【问题标题】:NullPointerException when run executeQuery(sql)运行 executeQuery(sql) 时出现 NullPointerException
【发布时间】:2013-02-19 07:34:27
【问题描述】:

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

【问题讨论】:

  • 你在哪里实例化stmt?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      由于 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();
              }
      

      【讨论】:

        猜你喜欢
        • 2019-03-24
        • 2020-03-28
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多