From 0daee96ed18c244d87cf9fdb2142a70a645d25b7 Mon Sep 17 00:00:00 2001 From: Dave Cramer <davec@fastcrypt.com> Date: Sun, 16 Jun 2002 18:26:53 +0000 Subject: [PATCH] implemented refresh row --- .../postgresql/jdbc2/UpdateableResultSet.java | 77 ++++++++++++++++++- .../test/jdbc2/UpdateableResultTest.java | 2 +- 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 a85f2b420cd..9ff8be4080d 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 94effddc066..722dd78398a 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 ); -- GitLab