当java服务器在我们的服务器上运行时,而不是在我的开发人员机器上运行时,Mariadb存储过程调用上的NullPointerException
我正在开发一个使用Mariadb的服务器,如果客户机成功响应了特定的查询,一个特定的存储过程将更新枚举字段 当我在我的dev机器上本地运行服务器并将其指向服务器上的数据库时,没有问题,但是当我编译一个jar并使用数据库在服务器上运行它时,在查询执行后返回的int上会得到一个NullPointerException。错误发生在此行:当java服务器在我们的服务器上运行时,而不是在我的开发人员机器上运行时,Mariadb存储过程调用上的NullPointerException,java,jvm,centos,mariadb,Java,Jvm,Centos,Mariadb,我正在开发一个使用Mariadb的服务器,如果客户机成功响应了特定的查询,一个特定的存储过程将更新枚举字段 当我在我的dev机器上本地运行服务器并将其指向服务器上的数据库时,没有问题,但是当我编译一个jar并使用数据库在服务器上运行它时,在查询执行后返回的int上会得到一个NullPointerException。错误发生在此行: int rowsUpdated = callableStatement.executeUpdate(); 下面是完整的方法调用: public void u
int rowsUpdated = callableStatement.executeUpdate();
下面是完整的方法调用:
public void updateWlanSettingsStatus(String deviceId, String status) {
try {
connection = database.getConnection();
CallableStatement callableStatement = connection
.prepareCall("{call updateWlanSettingsStatus(?,?)}");
callableStatement.setString(1, deviceId);
callableStatement.setString(2, status);
int rowsUpdated = callableStatement.executeUpdate();
connection.close();
log.debug("DataDAO: Rows Updated: " + rowsUpdated);
log.debug("DataDAO: wlan settings update complete for " + deviceId);
} catch (SQLException e) {
log.error("DataDAO An SQLException occured!", e);
closeDbConnection(connection);
} catch (Exception e) {
log.error("DataDAO An Exception Occurred:", e);
closeDbConnection(connection);
}
我在Windows 8上开发,服务器运行CentOs。
我的机器正在运行Java1.8并编译为1.7。服务器正在运行1.7
这就是我得到的错误:
java.lang.NullPointerException
at org.mariadb.jdbc.MySQLCallableStatement.getUpdateCount(MySQLCallableStatement.java:1471)
at org.mariadb.jdbc.MySQLCallableStatement.executeUpdate(MySQLCallableStatement.java:1131)
at com.zaxxer.hikari.proxy.PreparedStatementProxy.executeUpdate(PreparedStatementProxy.java:61)
at com.zaxxer.hikari.proxy.CallableStatementJavassistProxy.executeUpdate(CallableStatementJavassistProxy.java)
at com.watersprint.deviceapi.data.DataDAO.updateWlanSettingsStatus(DataDAO.java:586)
at com.watersprint.deviceapi.server.WorkerRunnable.processResultOfMessage(WorkerRunnable.java:133)
at com.watersprint.deviceapi.server.WorkerRunnable.processJsonObject(WorkerRunnable.java:110)
at com.watersprint.deviceapi.server.WorkerRunnable.run(WorkerRunnable.java:63)
at java.lang.Thread.run(Thread.java:745)
服务器Java规范:
java版本1.7.0_75
OpenJDK运行时环境
rhel-2.5.4.2.el7_0-x86_64 u75-b13
OpenJDK 64位服务器虚拟机构建
24.75-b4,混合模式
我的开发机器Java规范:
java版本1.8.0_25
JavaTM SE运行时环境构建1.8.0_25-b18
Java HotSpotTM 64位服务器VM构建25.25-b02,混合模式
正如我所说,我正在将项目编译为Java1.7
代码按预期执行,数据库按预期更新,即使出现错误,执行后所有值都是正确的
我正在考虑卸载Java1.8并恢复到1.7。
我错过了什么?恢复我的机器版本的Java是最好的做法吗?我还缺什么吗 你能证明第61行吗?那是java.sql.PreparedStatement的一部分,我没有这方面的来源。对不起,我弄错了。Wich是第586I行,我刚刚在一台云服务器上运行了它,它使用相同的操作系统和相同的Java版本,运行时没有任何问题。所以我不再认为这是JVM的问题;