I am using a SELECT statement to get data from a table and then insert it into another table. However the line \"stmt.executeQuery(query);\" is inserting the first line fro
Statement
objects can only do one thing at a time, so when you execute that INSERT
, you invalidate the ResultSet
which it generated. You'll need to create a second Statement
object to perform the INSERT
.
From the Statement documentation: "By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists."
if you use the same statement, it will invalidate the previous result set. You should use a different statement to perform updates/inserts.
You are re-using the Statement
that was used to produce rs
on the last line of your loop.
This will close the ResultSet
rs
. As stated in the documentation:
A
ResultSet
object is automatically closed when theStatement
object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.
You need to use a second Statement
object to execute the INSERT
statements.
This is from the Java docs of interface Statement:
By default, only one ResultSet object per Statement object can be open at the same time.
So you better use a second Statement
or even better a PreparedStatement
.
And to execute an INSERT SQL statement you should use executeUpdate()
instead of executeQuery()
.