java - 如何从一个表中提取数据并插入到另一个表中

标签 java jdbc

我正在编写代码以从表中检索两列并将其存储在另一个表中。我正在使用 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/

相关文章:

java - 在java中以不同的格式编写图像会产生不同的结果

java - 对于 Java EE 开发人员来说,学习 Python/Django 有多难?

java - Mongodb java驱动聚合的游标没有skip方法?

java - blob.getBinaryStream 独立关闭

java - 如何在MySQL中为每个用户存储多个数据

java - 在准备好的语句中使用可变数量的参数

java - 事务管理器未回滚

java - 如何正确关闭资源

mysql - JDBC 交互连接

java - 没有蓝图 xml 的 Karaf 中的 RESTful 服务