我有一个用 java 编写的方法来执行 INSERT、UPDATE 和 DELETE 模式的 SQL 语句。这在 WebSphere 6.1 上工作,升级到 WebSphere 7.0 后它停止工作。
下面是我的代码:
public void executeSQL() throws SQLException, ParseException, NamingException
{
// Get a Connection from the Connection Pool if the connection is closed
Connection dbCon = DriverUtilities.getConnectionFromContext(DriverUtilities.DIRECTPAY_DB);
// create a Statment object whose ResultSet is scroll sensitive and with Concurrent Updatable.
Statement stmt = dbCon.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
dbCon.setAutoCommit(true);
String strColumn = null;
String colName = null;
String colVal = null;
String colType = null;
String sql = null;
try {
if (isUpdate | isDelete) {
//ResultSet rs = stmt.executeQuery("select * from " + getTableName());
ResultSet rs = stmt.executeQuery("select * from " + getSqlFrom());
//Move the ResultSet to the Row Index
rs.absolute(iRowIndex + 1);
Enumeration enum1 = ColNames.elements();
int i = 1;
// Update Block
if (isUpdate) {
while (enum1.hasMoreElements()) {
//column name for update
strColumn = (String) enum1.nextElement();
// value from the screen
colVal = (String) requestParams.get("post" + strColumn);
//get column type
colType = colTypeHash.get(strColumn).toString();
//if colvalue from screen not null then test for the Column type
if ((colVal == null) || (colVal.equalsIgnoreCase("null"))){
rs.updateNull(i);
} else {
if ((colType.equalsIgnoreCase("INT")) || (colType.equalsIgnoreCase("SMALLINT"))) {
if (colVal.trim().length() > 0)
rs.updateInt(i, Integer.parseInt(colVal));
} else if ((colType.equalsIgnoreCase("DATETIME"))) {
if (colVal.trim().length() > 0)
rs.updateTimestamp(i, toTimestamp(colVal));
} else if ((colType.equalsIgnoreCase("CHAR"))) {
//if (colVal.trim().length() > 0)
rs.updateString(i, colVal);
} else if ((colType.equalsIgnoreCase("NVARCHAR"))) {
//if (colVal.trim().length() > 0)
rs.updateString(i, colVal);
} else if ((colType.equalsIgnoreCase("VARCHAR"))) {
//if (colVal.trim().length() > 0)
rs.updateString(i, colVal);
} else if ((colType.equalsIgnoreCase("DECIMAL"))) {
if (colVal.trim().length() > 0)
rs.updateString(i, colVal);
} else if ((colType.equalsIgnoreCase("FLOAT"))) {
if (colVal.trim().length() > 0)
rs.updateDouble(i, Double.parseDouble(colVal));
} else if ((colType.equalsIgnoreCase("BIT"))) {
if (colVal.trim().length() > 0)
rs.updateByte(i, Byte.parseByte(colVal));
//rs.updateDouble(i, Double.parseDouble(colVal));
} else if ((colType.equalsIgnoreCase("int identity"))) {
// ignore it
} else {
System.out.println("WARNING DATATYPE UNSUPPORTED in ADMIN: " + colType);
}
}
i++;
}
//Setting Identity Insert ON.
stmt.executeUpdate("SET IDENTITY_INSERT "+getTableName()+" ON");
rs.updateRow();
}
//delete block
if (isDelete) {
rs.deleteRow();
}
rs.close();
}
//Insert Block
if (isInsert) {
//Setting Identity Insert ON.
stmt.executeUpdate("SET IDENTITY_INSERT "+getTableName()+" ON");
// get the SQL statement for Insert
sql = getSQL();
int resultFlag = stmt.executeUpdate(sql);
}
//Setting Identity Insert OFF.
stmt.executeUpdate("SET IDENTITY_INSERT "+getTableName()+" OFF");
stmt.close();
dbCon.close();
} catch (SQLException e) {
System.out.println("executeSQL failed: " + sql + ", " + StackTraces.getStackTrace(e));
try {
stmt.close();
} catch(Exception ee){
}
try {
dbCon.close();
} catch(Exception ee){
}
throw (e);
} catch (java.lang.NumberFormatException e) {
System.out.println("executeSQL failed: " + sql + ", " + StackTraces.getStackTrace(e));
try {
stmt.close();
} catch(Exception ee){
}
try {
dbCon.close();
} catch(Exception ee){
}
throw (e);
}
}
下面是我的错误堆栈跟踪:
[9/27/12 16:28:06:497 GMT-06:00] 0000002a SystemOut O ---------------- sql = SELECT * FROM PRODUCT ------------------------
[9/27/12 16:28:06:664 GMT-06:00] 0000002a SystemOut O ERROR:
[9/27/12 16:28:06:685 GMT-06:00] 0000002a WSRdbManagedC W DSRA1300E: Feature is not implemented: javax.sql.PooledConnection.addStatementEventListener
[9/27/12 16:28:37:378 GMT-06:00] 0000002e SystemOut O executeSQL failed: null, com.microsoft.sqlserver.jdbc.SQLServerException: Cannot find the object "PRODUCT" because it does not exist or you do not have permissions.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:633)
at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.pmiExecuteUpdate(WSJdbcStatement.java:1693)
at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeUpdate(WSJdbcStatement.java:1041)
at com.bcbskc.bbb.directpay.admin.AdminTableBean.executeSQL(AdminTableBean.java:313)
at com.bcbskc.bbb.directpay.admin.AdminTableBean.manipulateTable(AdminTableBean.java:132)
at com.bcbskc.bbb.directpay.actions.ManipulateAdminTableAction.manipulateTable(ManipulateAdminTableAction.java:104)
at com.bcbskc.bbb.directpay.actions.ManipulateAdminTableAction.execute(ManipulateAdminTableAction.java:46)
at com.bcbskc.bbb.common.uiframework.Controller.doPost(Controller.java:56)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1597)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131)
at com.bcbskc.bbb.common.security.AuthbeanFilter.doFilter(AuthbeanFilter.java:88)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:934)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1604)
[9/27/12 16:28:37:379 GMT-06:00] 0000002e SystemOut O ManipulateAdminTableAction failed: There was an error updating the admin table. Please check the data for errors and format. com.microsoft.sqlserver.jdbc.SQLServerException: Cannot find the object "PRODUCT" because it does not exist or you do not have permissions.com.microsoft.sqlserver.jdbc.SQLServerException: Cannot find the object "PRODUCT" because it does not exist or you do not have permissions.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:633)
at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.pmiExecuteUpdate(WSJdbcStatement.java:1693)
at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeUpdate(WSJdbcStatement.java:1041)
at com.bcbskc.bbb.directpay.admin.AdminTableBean.executeSQL(AdminTableBean.java:313)
at com.bcbskc.bbb.directpay.admin.AdminTableBean.manipulateTable(AdminTableBean.java:132)
at com.bcbskc.bbb.directpay.actions.ManipulateAdminTableAction.manipulateTable(ManipulateAdminTableAction.java:104)
at com.bcbskc.bbb.directpay.actions.ManipulateAdminTableAction.execute(ManipulateAdminTableAction.java:46)
at com.bcbskc.bbb.common.uiframework.Controller.doPost(Controller.java:56)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1597)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131)
at com.bcbskc.bbb.common.security.AuthbeanFilter.doFilter(AuthbeanFilter.java:88)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:934)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1604)