运行executeQuery(sql)时出现NullPointerException

时间:2013-02-19 07:34:27

标签: java sql-server-2008 nullpointerexception jtds executequery

我在 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); 
   }

3 个答案:

答案 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();
        }