代码之家  ›  专栏  ›  技术社区  ›  Sal-laS

运行executeQuery(sql)时出现NullPointerException

  •  1
  • Sal-laS  · 技术社区  · 13 年前

    我有一个简单的查询 Java语言 磨合 SQL服务器2008 。当它到达

    rs = stmt.executeQuery(sql); 它给了我 java.lang.NullPointerException

    1-I使用 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 回复  |  直到 13 年前
        1
  •  2
  •   BobTheBuilder    13 年前

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

    你也可以移动 stmt公司 字段为的变量 选择 作用

        public ResultSet select(String sql)
        {
             Statement  stmt = link.createStatement();
             rs = stmt.executeQuery(sql);                        
             return rs; 
        }
    
        2
  •  0
  •   Vikdor    13 年前

    您的select方法应该是这样的,只是为了让代码正常工作:

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

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

        3
  •  0
  •   Shurmajee    13 年前

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