从数据库获取值时,主线程java.lang.NullPointerException中出现异常
我只是想在eclipse上运行一个有问题的java程序,但是得到了NullPointerException。我的代码贴在下面。请告诉我我做错了什么 Rect.java从数据库获取值时,主线程java.lang.NullPointerException中出现异常,java,jdbc,dao,Java,Jdbc,Dao,我只是想在eclipse上运行一个有问题的java程序,但是得到了NullPointerException。我的代码贴在下面。请告诉我我做错了什么 Rect.java package org.spring.model; public class Rect { private int id; private String name; public int getId() { return id; } public void setId(
package org.spring.model;
public class Rect {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Rect(int rectId, String rectName)
{
setId(rectId);
setName(rectName);
}
}
JdbcDaoImplement.java
package org.spring.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.spring.model.Rect;
public class JdbcDaoImplement {
public Rect getRect(int rectId)
{
Connection conn=null;
try
{
Class.forName("oracle.jdbc.OracleDriver");
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
conn = DriverManager.getConnection(jdbcUrl, "system", "abcd");
PreparedStatement ps=conn.prepareStatement("SELECT * FROM RECTANGLE WHERE id=?");
ps.setInt(1, rectId);
Rect rect=null;
ResultSet rs=ps.executeQuery();
if(rs.next()==true)
{
rect=new Rect(rectId,rs.getString("name"));
}
rs.close();
ps.close();
return rect;
}
catch(Exception e)
{
throw new RuntimeException();
}
finally
{
try {
conn.close();
} catch (SQLException e) {
//e.printStackTrace();
}
}
}
}
最后是JdbcDemo.java
package org.spring;
import org.spring.dao.JdbcDaoImplement;
import org.spring.model.Rect;
public class JdbcDemo {
public static void main(String[] args) {
Rect rect=new JdbcDaoImplement().getRect(1);
System.out.println(rect.getName());
}
}
堆栈跟踪是:
Exception in thread "main" java.lang.NullPointerException
at org.spring.JdbcDemo.main(JdbcDemo.java:10)
很可能在您的主方法中,
rect
为null,您调用了rect.getName()
,然后砰的一声!NPE
因为在您的getRect(int rectId)
方法中,您处理了该方法中的异常,然后返回一个rect
,如果出现错误或rs.next()
为false,您将返回一个nullrect
对象
您可以考虑的是,重新设计<代码> GETSULLUTE()/Cux>方法,让它永远不返回null,例如如果没有找到记录,或者异常发生,抛出异常(S);或者在主方法中,检查
rect
,确保它不为空。如果您要告诉我们异常,请提供完整堆栈跟踪。好的,我编辑了问题并重新发布了完整堆栈跟踪。好的,我更改了代码并重新编辑了问题…但仍然得到相同的错误。您调试了代码吗?e、 g.rs.next()
返回true还是false?首先尝试调试!