2010-11-04 83 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)