2013-04-29 65 views
0

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(); 
} 

得到以下exception-

值java.sql.SQLException:ORA-01747:無效user.table.column,表.COLUMN,或列規範

+0

您不能綁定標識符。所以說 – 2013-04-29 06:21:41

回答

1

預期。當使用setString方法綁定參數時,參數值將被轉義並放入單/雙引號。在這種情況下,您的列名也將被放置在單/雙引號,並且數據庫將在這種情況下拋出錯誤。

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(); 
} 
+0

我需要做的這一點,因爲在後端數據庫表中的列數和偶數列名也可以是它需要changed..as – 2013-04-29 06:35:21

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(); 
     } 
0

最後,它的完成。 我首先通過根據需要由rsmd.getColumnName()方法,並且還附加「=」運算符和逗號oprator得到列名下環由SQL字符串。然後將它傳遞給準備語句創建代碼並完成它。 感謝您的支持。