gpt4 book ai didi

Java - 将记录传递到数据库时出现空指针异常

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:51 27 4
gpt4 key购买 nike

我正在删除一个数组列表过滤值并传递到数据库,如果记录重复,代码会抛出异常,然后更新数据库中的值并跳转到下一条记录。 在记录 90 、 91 或 92 中我收到此异常

java.lang.NullPointerException
at com.icc.utilidades.Conexion.actualizarEstadoAlumno(Conexion.java:4296)
at com.icc.controlador.AjaxControlador.doGet(AjaxControlador.java:227)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

conexion 4296 中的代码是一个方法,异常出现在 preparedStatement 行中

public int actualizarEstadoAlumno(String rut,String estado)
{
try {
ConexionBd();
System.out.println("rut "+rut);
System.out.println("estado "+estado);
PreparedStatement enunciado = conexion.prepareStatement("update alumno set alu_estado = ? "
+ "where alu_rut = ? ;");
enunciado.setString(1, rut);
enunciado.setString(2, estado);
enunciado.execute();
conexion.close();
return 1;
} catch (SQLException e) {
return 0;
}
}

当我打印这些值时,它们不为 null ,那么为什么我会收到此异常? ,我确信数据库连接没问题,因为当我在其他事情中使用该代码时,这项工作很好。在记录号 90 之前,代码将值正确传递到数据库。可能是什么问题呢?请帮忙。

这是我连接数据库的方法

public void ConexionBd()
{
try
{
Class.forName("org.postgresql.Driver");

conexion = java.sql.DriverManager.getConnection("jdbc:postgresql://localhost:5432/final","postgres","*******");

consulta = conexion.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

当您尝试引用一个对象时,例如您正在调用该对象的方法,认为该对象存在,但在运行时该对象根本不存在,就会发生空指针异常。

对于代码中对象可能为空的所有可能性(取决于运行时场景),您必须进行空指针检查。我尝试在您的代码中添加一些空指针检查,请看下面。我也尝试稍微纠正你的代码,但它也可以进一步改进。在下面的代码中,我假设 conexion 是在给定方法之外初始化的类级别变量。

快速说明一下,当涉及空指针异常时,您无法确定运行时发生的任何事情:)

 public int actualizarEstadoAlumno(String rut,String estado)
{
try {
ConexionBd();
System.out.println("rut "+rut);
System.out.println("estado "+estado);
if(conexion!=null){
PreparedStatement enunciado = conexion.prepareStatement("update alumno set alu_estado = ? "
+ "where alu_rut = ? ;");
if(enunciado!=null){
enunciado.setString(1, rut);
enunciado.setString(2, estado);
enunciado.execute();
return 1;
}
}

} catch (SQLException sqlEx) {
//return 0; This isn't a good way to handle exception. How will you know that SQL Exception has occurred? You need to handle the exceptions/weird things your code can run into.
//log exception, use logger
//print stack trace, handle the exception or throw it
} catch (Exception ex){
//log exception, use logger
//print stack trace, handle the exception or throw it
}finally{
conexion.close(); // this is why finally was born.
}
}

关于Java - 将记录传递到数据库时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com