Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Resultset更新JDBC中的值_Java_Sql_Database_Jdbc_Resultset - Fatal编程技术网

Java 如何使用Resultset更新JDBC中的值

Java 如何使用Resultset更新JDBC中的值,java,sql,database,jdbc,resultset,Java,Sql,Database,Jdbc,Resultset,我想使用resultset将所有thd“id”的值更改为int k 我有错误,异常为空 我在updateInt(“ID”,k)处得到错误 错误: “无法抑制空异常。不允许自抑制” 尝试向代码中添加updateRow(),如下所示: rs.beforeFirst(); while (rs.next()) { if(rs.getInt("ID")!=k){ rs.updateInt("ID", k); rs.updateRow(); k++

我想使用resultset将所有thd“id”的值更改为int k

我有错误,异常为空

我在updateInt(“ID”,k)处得到错误

错误: “无法抑制空异常。不允许自抑制”


尝试向代码中添加
updateRow()
,如下所示:

   rs.beforeFirst();
   while (rs.next()) {
     if(rs.getInt("ID")!=k){
      rs.updateInt("ID", k);
      rs.updateRow();
       k++;
       }
     }
并尝试替换
rs.first()带有
rs.beforeFirst()

尝试在

处查看尝试向代码中添加
updateRow()
,如下所示:

   rs.beforeFirst();
   while (rs.next()) {
     if(rs.getInt("ID")!=k){
      rs.updateInt("ID", k);
      rs.updateRow();
       k++;
       }
     }
并尝试替换
rs.first()带有
rs.beforeFirst()

试着看一看

我用另一种方法找到了一个解决方案,它的工作,没有结果集

        int k=1;
        int oldId=1;
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            String  urlCn="jdbc:derby://localhost:1527/myDb";
            Connection   cn = DriverManager.getConnection(urlCn, "omer", "1234");
            Statement stmt = cn.createStatement();
            String sql = "SELECT * FROM QUESTIONS";
            ResultSet rs = stmt.executeQuery(sql);
            PreparedStatement st;
            while (rs.next()) {
                st = cn.prepareStatement("update QUESTIONS set id = ? where id = ?");
                oldId=rs.getInt("id");
                if(oldId!=k){
                    st.setInt(1,k);
                    st.setInt(2,oldId);
                    st.executeUpdate(); 
                }
                k++;
            }
            rs.close();
            cn.close();
        }
        catch (ClassNotFoundException ex) {
            Logger.getLogger(addQuestion.class.getName()).log(Level.SEVERE, null, ex);
        }           
        catch (SQLException ex) {
            Logger.getLogger(addQuestion.class.getName()).log(Level.SEVERE, null, ex);
        }

我用另一种方法找到了一个解决方案,它的工作,没有结果集

        int k=1;
        int oldId=1;
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            String  urlCn="jdbc:derby://localhost:1527/myDb";
            Connection   cn = DriverManager.getConnection(urlCn, "omer", "1234");
            Statement stmt = cn.createStatement();
            String sql = "SELECT * FROM QUESTIONS";
            ResultSet rs = stmt.executeQuery(sql);
            PreparedStatement st;
            while (rs.next()) {
                st = cn.prepareStatement("update QUESTIONS set id = ? where id = ?");
                oldId=rs.getInt("id");
                if(oldId!=k){
                    st.setInt(1,k);
                    st.setInt(2,oldId);
                    st.executeUpdate(); 
                }
                k++;
            }
            rs.close();
            cn.close();
        }
        catch (ClassNotFoundException ex) {
            Logger.getLogger(addQuestion.class.getName()).log(Level.SEVERE, null, ex);
        }           
        catch (SQLException ex) {
            Logger.getLogger(addQuestion.class.getName()).log(Level.SEVERE, null, ex);
        }

哪一行给你null…我在updateInt(“ID”,k)处得到错误;检查表的数据类型。可能是因为ID是不允许编辑的自动编号。查看它是否也是防止重复ID的主键。K可以保留一个值,该值在以后的行中将被更新@Parfait id是常规类型,IntegerAutoNumber是带有特殊数据库名称的整数类型。你能确认它不是自动递增的吗?还有,它是主键吗?哪一行给你null…我在updateInt(“ID”,k)处得到错误;检查表的数据类型。可能是因为ID是不允许编辑的自动编号。查看它是否也是防止重复ID的主键。K可以保留一个值,该值在以后的行中将被更新@Parfait id是常规类型,IntegerAutoNumber是带有特殊数据库名称的整数类型。你能确认它不是自动递增的吗?还有,它是主键吗?