设置预备语句参数的方法中的空指针异常

时间:2014-01-29 02:26:01

标签: java sql-server-2008-r2 prepared-statement

我在互联网上发布了从过去12小时开始,发现有太多用户正面临这个问题,但他们都没有能够摆脱那个, 我创建了一个JDialog,它有TextFields,我试图从那些文本字段获取输入,并将其存储在DataBase中, 但Givi是以下例外。

Exception occurred during event dispatching:
Connection ok
Adnan
java.lang.NullPointerException
at srvrDataBaseClass.setPersonStatement(srvrDataBaseClass.java:90)
at srvrDataBaseClass.insertPerson(srvrDataBaseClass.java:71)
at EnrollmentForm.setPerson(EnrollmentForm.java:90)

这是StackTrac指向的代码,

public void setPersonStatement(String nm,String fn,String cn,String add, byte[] fpt) {
    String Sql = "INSERT INTO PERSON (NAME, FNAME, CNIC, ADDR, FPT) VALUES ( ?,?,?,?,?)";
    try {
        if(con==null){
            System.out.println("Connection error");   <---------------- Connection is Not Closed
        }
        else {
            System.out.println("Connection ok");    <------Connection ok
        }


        con.prepareStatement(Sql);

    System.out.println(nm);     <----- This is Line :90,  But You can see its not Null, as the Value 'Adnan' is printed on cmd,
    pst2.setString(1, nm);
    pst2.setString(2, fn);
    pst2.setString(3, cn);
    pst2.setString(4, add);
    pst2.setBytes(5, fpt);

    pst2.executeUpdate();

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        System.out.println("SQL Error");
        e.printStackTrace();
    }
    }

所以谁能告诉我,我的代码错误

注意:DataBase是SQL Server 2008,

2 个答案:

答案 0 :(得分:5)

你的意思是

pst2 = con.prepareStatement(Sql);

?似乎pst2null并且将保持在

pst2.setString(1, nm);

这实际上可能会引发NPE。

查看javadoc了解您尝试使用的方法。

答案 1 :(得分:1)

con.prepareStatement(Sql);

未分配给正确的PreparedStatement变量

写为

pst2= con.prepareStatement(Sql);