2010-11-04 84 views
1

- 無法使用executeQuery()發出數據處理 語句。在JSP中更新錯誤,eclipse


UPDATING Java代碼

MultiDBManager db8=new MultiDBManager(uif); 
String updateString = "UPDATE pklrsc SET pr_prod_rate="+rate+" , pr_ln_cst="+cost+" WHERE pr_rsc_cde= "+component+" "; 
db8.execSQL(updateString); 

的.java文件代碼

public ResultSet execSQL(String sql) throws SQLException { 
    System.out.println("execSQL"); 
    return super.execSQL(processQuery(sql)); 
    } 

private String processQuery(String sql){ 
System.out.println("processQuery"); 
return mdb.getCacheDB().procSQL(sql, false); 
} 

錯誤信息

value i: 1 
component: ACODE0001 
rate: 2.00 
cost: 261.22 
execSQL 
processQuery 
Execute = UPDATE c66_p30_BIS.pklrsc SET pr_prod_rate=2.00 , pr_ln_cst=261.22 WHERE pr_rsc_cde= ACODE0001 
Nov 4, 2010 4:54:49 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910) 
at com.mysql.jdbc.Statement.checkForDml(Statement.java:398) 

回答

2

使用INSERT/UPDATE/DELETE的時候,而不是executeQuery()

必須調用executeUpdate()另外請注意,使用JSP,這是一種視圖技術代碼,不鼓勵。

1

您正在使用隱藏的executeQuery調用來更新數據庫中的值。這是不允許的(見例外)。

調用這個方法實際上導致你的麻煩:

mdb.getCacheDB().procSQL(sql, false); 

找到一個替代發送更新語句(其實我不知道你在這裏使用什麼API)