Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行executeQuery(sql)时出现NullPointerException_Java_Sql Server 2008_Nullpointerexception_Jtds_Executequery - Fatal编程技术网

Java 运行executeQuery(sql)时出现NullPointerException

Java 运行executeQuery(sql)时出现NullPointerException,java,sql-server-2008,nullpointerexception,jtds,executequery,Java,Sql Server 2008,Nullpointerexception,Jtds,Executequery,我在Java中有一个简单的查询,可以在sqlserver2008中运行。当它达到 rs=stmt.executeQuery(sql)它给我java.lang.NullPointerException 1-我使用jtds驱动程序将代码连接到数据库 2-当我直接在数据库中执行查询时,它可以工作 3-为了使代码简短易懂,我省略了Try-Catch public class DataBases { private Connection link; p

我在Java中有一个简单的查询,可以在sqlserver2008中运行。当它达到

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

您需要在某个地方实例化
stmt
(在构造函数中或
select
函数中)

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

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

您的select方法应如下所示,以使代码正常工作:

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

您需要看一本关于如何在不泄漏资源(如此处的连接)的情况下执行jdbc操作的好教程。

因为stmt对象引用没有指向任何您正在获得NPE的对象。 试试


在哪里实例化stmt?
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();
        }