准备语句中出现空指针异常

s71maibg  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(385)

这个问题在这里已经有答案了

什么是nullpointerexception,如何修复它(12个答案)
两年前关门了。
我在尝试从sql server获取数据时遇到了一个问题,sql server在prepared语句中给出了一个空点异常。我肯定这是一个很难回答的问题,但请帮我:)
这就是我要调用的方法

public void notification(){
    int MachCode = 1721;
    try{
        String sql ="Select TimeOn from PRODUCTIONS_MONITOR where MachCode='"+MachCode+"'";
        pst = con.prepareStatement(sql);
        rs = pst.executeQuery();

        while(rs.next()){
            arrCount.add(rs.getInt(1));

        }

        for(int i=0;i<arrCount.size();i++){

             Count = Count + arrCount.get(i);

        }

        if(Count % 10 == 0){

            System.out.println("Time = " + Count);

        }

    }catch(SQLException e){

        e.printStackTrace();

    }

}

这是我的数据库连接

public static Connection ConnecrDb() {
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

       Connection con = DriverManager.getConnection("jdbc:sqlserver://10.228.59.2:1433;databaseName=dbNautilus;user=SA;password=KreedaIntimo@2017;");

        System.out.println("Connected to database !");

    } catch (SQLException sqle) {
        System.out.println("Sql Exception :" + sqle.getMessage());
    } catch (ClassNotFoundException e) {
        System.out.println("Class Not Found Exception :" + e.getMessage());
    }

    return null;
}
7vhp5slm

7vhp5slm1#

你的 ConnecrDb() 方法指定新的 Connection 对象到名为 con ,然后再也不用了。
然后该方法返回 null .
您没有演示如何调用方法,但这并不重要,因为 con 使用的字段 notification() 方法是未赋值的(因此 null ),或分配 null 返回值来自 ConnecrDb() ,确实如此 null 不管怎样。
既然如此,为什么你会混淆价值是什么 null 并导致 NullPointerException ?
关于代码的其他一般性评论:
如果 MachCode 是整数,那么为什么在sql中引用它,即为什么 where MachCode='"+MachCode+"'"; 而不是 where MachCode="+MachCode; ?
如果你用的是 PreparedStatement ,为什么不用 ? 要使用的参数标记?
在使用jdbc时,应该使用try-with-resources。
java命名约定是变量名以小写字母开头。
您的代码应该是:

int machCode = 1721;
String sql = "select TimeOn from PRODUCTIONS_MONITOR where MachCode = ?";
try (PreparedStatement pst = con.prepareStatement(sql)) {
    pst.setInt(1, machCode);
    try (ResultSet rs = pst.executeQuery()) {
        while (rs.next()) {
            arrCount.add(rs.getInt(1));
        }
    }
}
// rest of code here

相关问题