@@ -784,7 +784,16 @@ public void update() throws SQLException {
784784 }
785785 else {
786786 try {
787- stmt = conn .prepareStatement (sql .toString (), java .sql .Statement .RETURN_GENERATED_KEYS );
787+ if (keys ==null || keys .isEmpty ()){
788+ stmt = conn .prepareStatement (sql .toString (), java .sql .Statement .RETURN_GENERATED_KEYS );
789+ }
790+ else {
791+ String [] columnNames = new String [keys .size ()];
792+ for (int i =0 ; i <columnNames .length ; i ++){
793+ columnNames [i ] = keys .get (i ).toString ();
794+ }
795+ stmt = conn .prepareStatement (sql .toString (), columnNames );
796+ }
788797 }
789798 catch (Exception e ){ //not all databases support auto generated keys
790799 stmt = conn .prepareStatement (sql .toString ());
@@ -800,6 +809,18 @@ public void update() throws SQLException {
800809 if (batchSize ==1 ){
801810 try {
802811 stmt .executeUpdate ();
812+
813+ if (InsertOnUpdate ){
814+ try (java .sql .ResultSet generatedKeys = stmt .getGeneratedKeys ()) {
815+ if (generatedKeys .next ()) {
816+ this .GeneratedKey = new Value (generatedKeys .getString (1 ));
817+ }
818+ }
819+ catch (Exception e ){
820+ //not all databases support auto generated keys
821+ }
822+ }
823+
803824 stmt .close ();
804825 }
805826 catch (SQLException e ){
@@ -824,21 +845,7 @@ public void update() throws SQLException {
824845 }
825846
826847
827- if (InsertOnUpdate ){
828- try {
829- java .sql .ResultSet generatedKeys = stmt .getGeneratedKeys ();
830- if (generatedKeys .next ()) {
831- this .GeneratedKey = new Value (generatedKeys .getString (1 ));
832- }
833- }
834- catch (Exception e ){
835- //not all databases support auto generated keys
836- }
837- finally {
838- stmt .close ();
839- }
840- InsertOnUpdate = false ;
841- }
848+ if (InsertOnUpdate ) InsertOnUpdate = false ;
842849
843850 }
844851 else {
0 commit comments