BOX_ID列是整数,其余是varchar
sql="UPDATE TOYS SET ?=?,?=?,?=? WHERE NAME=? AND LICENSE=? AND BOX_ID=? ";
p_statement2=connection.prepareStatement(sql);
p_statement2.setString(1, "NAME");
p_statement2.setString(2, "toy1");
p_statement2.setString(3, "VENDOR");
p_statement2.setString(4, "vendor1");
p_statement2.setString(5, "SIZE");
p_statement2.setString(6, "size1");
p_statement2.setString(7, "toyx");
p_statement2.setString(8, "license1");
p_statement2.setInt(9, 11);
try
{
p_statement2.executeUpdate();
}
catch(Exception kl)
{
kl.toString();
kl.printStackTrace();
p_statement2.close();
}
获得以下异常 -
java.sql.SQLException:ORA-01747:user.table.column,table.column或列规范无效
答案 0 :(得分:1)
预计。使用setString方法绑定参数时,参数值将被转义并放入单/双引号中。在这种情况下,您的列名也将被放在单/双引号中,并且在这种情况下您的数据库将抛出错误。
答案 1 :(得分:0)
为什么要设置?
之类的列名?你不能这样做。尝试类似:
sql="UPDATE TOYS SET Name=?, Vendor=?, Size=? WHERE NAME=? AND LICENSE=? AND BOX_ID=? ";
p_statement2=connection.prepareStatement(sql);
p_statement2.setString(1, "toy1");
p_statement2.setString(2, "vendor1");
p_statement2.setString(3, "size1");
p_statement2.setString(4, "toyx");
p_statement2.setString(5, "license1");
p_statement2.setInt(6, 11);
try
{
p_statement2.executeUpdate();
}
catch(Exception kl)
{
kl.toString();
kl.printStackTrace();
p_statement2.close();
}
答案 2 :(得分:0)
试试这个
//assign values dynamically
String col1 = "NAME";
String col2 = "VENDOR";
String col3 = "SIZE";
//create sql
sql="UPDATE TOYS SET "+col1+"=?,"+col2+"=?,"+col3+"=? WHERE NAME=? AND LICENSE=? AND BOX_ID=? ";
p_statement2=connection.prepareStatement(sql);
p_statement2.setString(1, "toy1");
p_statement2.setString(2, "vendor1");
p_statement2.setString(3, "size1");
p_statement2.setString(4, "toyx");
p_statement2.setString(5, "license1");
p_statement2.setInt(6, 11);
try
{
p_statement2.executeUpdate();
}
catch(Exception kl)
{
kl.toString();
kl.printStackTrace();
p_statement2.close();
}
答案 3 :(得分:0)
最后,它已经完成了。 我首先通过rsmd.getColumnName()方法获取列名,并根据需要附加“=”运算符和逗号操作符,在循环下创建sql字符串。然后将它传递给preparestatement创建代码并完成它。 谢谢大家的支持。