1

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

3 回答 3

2

您需要在stmt某处实例化(在构造函数或内部select函数中)

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

    public ResultSet select(String sql)
    {
         Statement  stmt = link.createStatement();
         rs = stmt.executeQuery(sql);                        
         return rs; 
    }
于 2013-02-19T07:36:51.853 回答
0

您的 select 方法应如下所示,只是为了让您的代码正常工作:

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

你需要看一个关于如何在不泄漏资源的情况下执行 jdbc 操作的好教程(比如这里的连接)。

于 2013-02-19T07:37:47.963 回答
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();
        }
于 2013-02-19T07:41:54.243 回答