summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Cramer <davec@fastcrypt.com>2002-06-16 18:26:53 +0000
committerDave Cramer <davec@fastcrypt.com>2002-06-16 18:26:53 +0000
commit0daee96ed18c244d87cf9fdb2142a70a645d25b7 (patch)
treee4b9a90255160b1f0a853826c7460463779503fe
parent0dbfea39f313fbd24a1754a701a85815229fe262 (diff)
downloadpostgresql-0daee96ed18c244d87cf9fdb2142a70a645d25b7.tar.gz
implemented refresh row
-rw-r--r--src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java77
-rw-r--r--src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java2
2 files changed, 77 insertions, 2 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java
index a85f2b420c..9ff8be4080 100644
--- a/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java
+++ b/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java
@@ -76,7 +76,10 @@ public class UpdateableResultSet extends org.postgresql.jdbc2.ResultSet
protected java.sql.PreparedStatement deleteStatement = null;
- private java.sql.Statement currentStatement = null;
+ /**
+ * PreparedStatement used to refresh data
+ */
+ private java.sql.PreparedStatement selectStatement = null;
/**
@@ -617,6 +620,78 @@ public class UpdateableResultSet extends org.postgresql.jdbc2.ResultSet
}
+
+ public void refreshRow() throws SQLException
+ {
+ if ( !isUpdateable() )
+ {
+ throw new PSQLException( "postgresql.updateable.notupdateable" );
+ }
+
+ try
+ {
+ StringBuffer selectSQL = new StringBuffer( "select ");
+
+ final int numColumns = java.lang.reflect.Array.getLength(fields);
+
+ for (int i=0; i < numColumns ; i++ )
+ {
+
+ selectSQL.append( fields[i].getName() );
+
+ if ( i < numColumns - 1 )
+ {
+
+ selectSQL.append(", ");
+ }
+
+ }
+ selectSQL.append(" from " ).append(tableName).append(" where ");
+
+ int numKeys = primaryKeys.size();
+
+ for ( int i = 0; i < numKeys; i++ )
+ {
+
+ PrimaryKey primaryKey = ((PrimaryKey)primaryKeys.get(i));
+ selectSQL.append(primaryKey.name).append("= ?");
+
+ if ( i < numKeys -1 )
+ {
+ selectSQL.append(" and ");
+ }
+ }
+ if ( Driver.logDebug ) Driver.debug("selecting "+ selectSQL.toString());
+ selectStatement = ((java.sql.Connection)connection).prepareStatement(selectSQL.toString());
+
+
+ for( int j=0, i=1; j < numKeys; j++, i++)
+ {
+ selectStatement.setObject( i, ((PrimaryKey)primaryKeys.get(j)).getValue() );
+ }
+
+ org.postgresql.jdbc2.ResultSet rs = (org.postgresql.jdbc2.ResultSet) selectStatement.executeQuery();
+
+ if( rs.first() )
+ {
+ rowBuffer = rs.rowBuffer;
+ }
+
+ rows.setElementAt( rowBuffer, current_row );
+ if ( Driver.logDebug ) Driver.debug("done updates");
+
+ rs.close();
+ selectStatement.close();
+ selectStatement = null;
+
+ }
+ catch (Exception e)
+ {
+ if ( Driver.logDebug ) Driver.debug(e.getClass().getName()+e);
+ throw new SQLException( e.getMessage() );
+ }
+
+ }
/**
*
* @throws SQLException
diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java
index 94effddc06..722dd78398 100644
--- a/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java
+++ b/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java
@@ -57,7 +57,7 @@ public class UpdateableResultTest extends TestCase
rs.updateString("name", "paul");
rs.insertRow();
-
+ rs.refreshRow();
assertTrue( rs.getInt("id") == 3 );
assertTrue( rs.getString("name").equals("paul"));
assertTrue( rs.getString("notselected") == null );