2017-03-18 10 views
0

動的に取得する複数の列名(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)); 
     } 


    } 

答えて

0

問題がのように、列名のIE用の単一引用符を使用しています以下に示すように「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); 

はまた、常に使用prepareStatementさんsetString、など。推奨される値を設定するためのメソッド。

else if(value.equals("lo2"))ブロック内の他のクエリにも同じ概念を適用します。

+0

まだ変更はありません@javaguy –

+0

ヌルポイント例外が発生しています。 –

+0

例外スタックトレースを送信できますか? – developer