我正在编写代码以从表中检索两列并将其存储在另一个表中。我正在使用 MS Accesses 作为数据库。 代码如下
public void connectDb(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:harish","scott","tiger");
Statement st= con.createStatement();
ResultSet rs=st.executeQuery("select sev,al from pgw_alarm where sev='000'");
while(!rs.next())
{
String sev= rs.getString("sev");
String al= rs.getString("al");
st.executeUpdate("insert into info_alarm values('"+sev+"','"+al+"')");
}
}catch(Exception e){e.printStackTrace();
System.out.println("some error");}
}
以下堆栈跟踪
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3907)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5698)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:354)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:411)
请帮我解决这个问题......
最佳答案
这应该可以在单个查询中实现:
INSERT INTO info_alarm (sev, al)
SELECT sev, al FROM pgw_alarm where sev='000';
它会更干净,速度更快。
while (!rs.next())
中的 !
可能只是一个拼写错误,对吧?
编辑:为了回答您的问题,请查看 JavaDoc :
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.
基本上 ResultSet
仍在从语句中读取,但您通过对同一 Statement
执行另一个查询来关闭它。如果你想这样做,你需要使用两个单独的语句。
关于java - 如何从一个表中提取数据并插入到另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5713692/