1

我有简单的查询Java运行在SQL SERVER 2008。当达到NullPointerException当运行executeQuery(sql)

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

你在哪里实例化stmt? – BobTheBuilder 2013-02-19 07:36:06

回答

2

您需要实例stmt地方(在构造函数或内部select功能)

您还可以移动stmt字段为select函数的变量。

public ResultSet select(String sql) 
    { 
     Statement stmt = link.createStatement(); 
     rs = stmt.executeQuery(sql);       
     return rs; 
    } 
0

您选择的方法应该是这样的,只是为了让你的代码工作:

public ResultSet select(String sql) 
    { 
     stmt = link.createStatement(); 
     rs = stmt.executeQuery(sql);       
     return rs; 
    } 

你需要看看如何在未泄漏资源执行JDBC操作的很好的教程(如连接这里)。

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(); 
     } 
相关问题