更新查询的动态列名

Posted

技术标签:

【中文标题】更新查询的动态列名【英文标题】: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));
       


     

【问题讨论】:

【参考方案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 你能发布异常堆栈跟踪吗?

以上是关于更新查询的动态列名的主要内容,如果未能解决你的问题,请参考以下文章

动态列名的实现

DataGridView绑定DataTable动态生成列 并且将列名中文显示

如何动态准备 SQL 查询(也包括列名)避免 SQL 注入

游标 PLSQL 中的动态列名

SQL 动态列和更新多列

根据列值动态获取列名