更新查询显示异常

时间:2013-04-29 06:19:50

标签: database jsp sql-update prepared-statement

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或列规范无效

4 个答案:

答案 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创建代码并完成它。 谢谢大家的支持。