更新查询的动态列名
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);
另外,请始终使用prepareStatement
的setString
等方法来设置推荐值。
对 else if(value.equals("lo2"))
块内的其他查询也应用相同的概念。
【讨论】:
仍然没有变化@javaguy 你能发布异常堆栈跟踪吗?以上是关于更新查询的动态列名的主要内容,如果未能解决你的问题,请参考以下文章