【问题标题】:Dynamic column name for update query更新查询的动态列名
【发布时间】:2017-08-10 09:59:20
【问题描述】:

我正在尝试从要动态获取的多个列名称(lo1、lo2、...)中更新表。但是这些值没有在数据库中更新。 列名是 co1,co2....

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

         Connection conn = null;
        PreparedStatement pstmt = null;

        try{
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost/netbeans","root","");



        Statement st = conn.createStatement();

         ResultSet rs = st.executeQuery("SELECT * FROM colo");

    rs = st.executeQuery("SELECT COUNT(*) FROM colo");
    // get the number of rows from the result set
    rs.next();
    int rowCount = rs.getInt(1); 

     //txt_ans.setText(String.valueOf(rowCount));
     int num_1 =300;
     int num_2 =200;
     int num_3 =300;
     int num_4 =400;
     String value = null;
     int value1 ;

     for(int i=1;i<=rowCount;i++)
     {

        String sql =("SELECT * FROM colo WHERE id = '"+i+"'");

        pstmt = conn.prepareStatement(sql);
      rs = pstmt.executeQuery(sql);
       while(rs.next())
          value = rs.getString("co1");
       //txt_ans.setText(String.valueOf(value));
       String x = "co2";
       if(value.equals("lo1"))
       {
          // value1= 1;
          // txt_ans.setText(String.valueOf(value1));


             String sql1 =("update colo set '"+x+"' = '"+num_1+"' where id = '"+i+"'");
        pstmt = conn.prepareStatement(sql1);
      int r = pstmt.executeUpdate(sql1);


       txt_ans.setText(String.valueOf(r));    

       }
       else if(value.equals("lo2"))
       {
          // value1= 1;
          // txt_ans.setText(String.valueOf(value1));
      String sql1 =("update colo set '"+ x +"' = '"+num_2+"' where id = '"+i+"'");
        pstmt = conn.prepareStatement(sql1);
      int r = pstmt.executeUpdate(sql1);


       txt_ans.setText(String.valueOf(r));    

       }
       else
       {
           value1 = 9009;
           txt_ans.setText(String.valueOf(value1));
       }


     }

【问题讨论】:

    标签: java mysql xampp netbeans-8


    【解决方案1】:

    问题在于使用单引号作为列名,例如 'x',因此只需将它们删除,如下所示:

    String sql1 =("update colo set " + x + " = ? where id = ?");//no single quote for x
    pstmt = conn.prepareStatement(sql1);
    pstmt.setString(1, num_1);
    pstmt.setString(2, i);
    int r = pstmt.executeUpdate(sql1);
    

    另外,请始终使用prepareStatementsetString 等方法来设置推荐值。

    else if(value.equals("lo2")) 块内的其他查询也应用相同的概念。

    【讨论】:

    • 仍然没有变化@javaguy
    • 你能发布异常堆栈跟踪吗?
    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 2021-08-05
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多