我在 Java 中进行简单查询,以便在 SQL SERVER 2008 中运行。当它到达
rs = stmt.executeQuery(sql);
它给了我java.lang.NullPointerException
1 - 我使用 jtds 驱动程序将我的代码连接到数据库。
2 - 当我直接在数据库中执行查询时,它可以工作。
3 - 为了使代码简短易懂,我省略了Try-Catch
public class DataBases
{
private Connection link;
private java.sql.Statement stmt;
public ResultSet rs;
public DataBases()
{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
String connectionUrl = "jdbc:jtds:sqlserver://localhost:1433;databaseName=DB;integratedSecurity=true";
Connection link = DriverManager.getConnection(connectionUrl);
}
public ResultSet select(String sql)
{
rs = stmt.executeQuery(sql);
return rs;
}
}
public static void main(String[] args)
{
DataBases s=new DataBases();
String sql="SELECT * FROM [DB].[dbo].[quantities] ";
ResultSet rs=s.select(sql);
}
答案 0 :(得分:2)
您需要在某处(在构造函数中或stmt
函数内)实例化select
您还可以将stmt
字段移动为select
函数的变量。
public ResultSet select(String sql)
{
Statement stmt = link.createStatement();
rs = stmt.executeQuery(sql);
return rs;
}
答案 1 :(得分:0)
您的select方法应该如下所示,只是为了让代码正常工作:
public ResultSet select(String sql)
{
stmt = link.createStatement();
rs = stmt.executeQuery(sql);
return rs;
}
你需要看一个关于如何在不泄漏资源的情况下执行jdbc操作的好教程(比如这里的连接)。
答案 2 :(得分:0)
由于stmt对象引用未指向您正在获取NPE的任何对象。 试试..
public DataBases()
{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
String connectionUrl = "jdbc:jtds:sqlserver://localhost:1433;databaseName=DB;integratedSecurity=true";
Connection link = DriverManager.getConnection(connectionUrl);
Statement stmt = link.createStatement();
}