在尝试从我的sql服务器获取数据时遇到了一个问题,在那里他们在准备好的语句中给出了空点异常。我确定这肯定是一个菜鸟问题,但请提供帮助:)
这是我正在调用的方法
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;
}
答案 0 :(得分:2)
您的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