Glassfish 3 连接池抛出 java.sql.SQLSyntaxErrorException:ORA-00933
Glassfish 3 Connection Pool throws java.sql.SQLSyntaxErrorException: ORA-00933
我正在使用 Glassfish 3 服务器 运行 网络服务。
连接池在服务器实现,可以ping通数据库。
已从服务器收到连接,但在 运行 宁 PreparedStatement 时抛出 java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
异常。
Glassfish 4 does not throw any exception
查询取自 属性 文件
QUERY=select * from TABLE where SYSTEMID=?1
使用两个单独的 java 类 接收连接和进一步处理
JDBCUtil.java
public static Connection connectionFromConnectionPool()
throws NamingException, SQLException {
Context initCtx = new InitialContext();
DataSource dataSource = (DataSource) initCtx.lookup(PropertyFileReader
.getPropertyValue("connectionPool.JNDI.name"));
Connection connection = (Connection) dataSource.getConnection();
if (connection != null) {
logger.info("Received Connection");
} else {
logger.info("No Connection Received");
}
return connection;
}
DAO.java
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
try {
connection = JDBCUtil.connectionFromConnectionPool();
if (connection != null) {
preparedStatement = connection
.prepareStatement(PropertyFileReader
.getPropertyValue("QUERY"));
if (preparedStatement != null) {
preparedStatement.setString(1, "systemID");
resultSet = preparedStatement.executeQuery(); // line No:56
生成的日志:
18:13:35,328 INFO - *****.JDBCUtil.connectionFromConnectionPool(JDBCUtil.java:38) - Received Connection
18:13:35,397ERROR - *****(DAO.java:81) - **************************** ::
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
at com.sun.gjc.spi.jdbc40.PreparedStatementWrapper40.executeQuery(PreparedStatementWrapper40.java:642)
at *************************************(DAO.java:56)
....................
ojdbc6.jar放在glassfish3\glassfish\lib和glassfish4\glassfish\lib
检查服务器文件夹中是否还有其他 ojdbc jar,尤其是您正在使用的域文件夹中。
如果服务器文件夹中有不同的jar或者不同版本的jar,可能会出现这样的错误。
例如:glassfish3\glassfish\domains\domain1\lib...
如果有不同版本的jar文件,全部替换成相同版本。
我使用 Glassfish4。我只将 ojdbc jar 保存在 glassfish4\glassfish\lib 中,这对我来说很好用。
我正在使用 Glassfish 3 服务器 运行 网络服务。 连接池在服务器实现,可以ping通数据库。
已从服务器收到连接,但在 运行 宁 PreparedStatement 时抛出 java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
异常。
Glassfish 4 does not throw any exception
查询取自 属性 文件
QUERY=select * from TABLE where SYSTEMID=?1
使用两个单独的 java 类 接收连接和进一步处理
JDBCUtil.java
public static Connection connectionFromConnectionPool()
throws NamingException, SQLException {
Context initCtx = new InitialContext();
DataSource dataSource = (DataSource) initCtx.lookup(PropertyFileReader
.getPropertyValue("connectionPool.JNDI.name"));
Connection connection = (Connection) dataSource.getConnection();
if (connection != null) {
logger.info("Received Connection");
} else {
logger.info("No Connection Received");
}
return connection;
}
DAO.java
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
try {
connection = JDBCUtil.connectionFromConnectionPool();
if (connection != null) {
preparedStatement = connection
.prepareStatement(PropertyFileReader
.getPropertyValue("QUERY"));
if (preparedStatement != null) {
preparedStatement.setString(1, "systemID");
resultSet = preparedStatement.executeQuery(); // line No:56
生成的日志:
18:13:35,328 INFO - *****.JDBCUtil.connectionFromConnectionPool(JDBCUtil.java:38) - Received Connection
18:13:35,397ERROR - *****(DAO.java:81) - **************************** ::
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
at com.sun.gjc.spi.jdbc40.PreparedStatementWrapper40.executeQuery(PreparedStatementWrapper40.java:642)
at *************************************(DAO.java:56)
....................
ojdbc6.jar放在glassfish3\glassfish\lib和glassfish4\glassfish\lib
检查服务器文件夹中是否还有其他 ojdbc jar,尤其是您正在使用的域文件夹中。
如果服务器文件夹中有不同的jar或者不同版本的jar,可能会出现这样的错误。
例如:glassfish3\glassfish\domains\domain1\lib...
如果有不同版本的jar文件,全部替换成相同版本。
我使用 Glassfish4。我只将 ojdbc jar 保存在 glassfish4\glassfish\lib 中,这对我来说很好用。