nhờ các bác xem giúp lỗi null pointer exception khi sử dụng prepareStatement

hehe

Member
1/12/12
38
0
6
hi, mình ngồi suốt buổi tối mà không hiểu lỗi chỗ nào, mong mọi người giúp đỡ. Thanks all.
 

Attachments

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,637
310
83
Tại sao lại ko thấy nhỉ? Exception nó quăng chình ình truớc mắt mà.
 

SITUVN

Well-Known Member
25/2/12
967
263
63
Phải nói, đây là một trong số các lỗi gặp nhiều nhất.
 

JackV

Administrator
Staff member
Tại sao lại ko thấy nhỉ?
Tớ nghĩ là thấy nhưng không debug xem biến nào null, nên suy nghĩ hoài không ra chứ không phải "mò không thấy" :))

Thiệt là xin trợ giúp quá sơ sài.
Không có db, không có chỉ dẫn gì, không có hướng dẫn chạy phát sinh lỗi, ..., code thì không có chú thích,...
Nói chung là thử tài người hâm mộ.

Người hâm mộ trả lời
Sau dòng
Code:
 public void addSV(SinhVien sv){
thêm dòng
Code:
Connection();
 

hehe

Member
1/12/12
38
0
6
anh thông cảm, tại e gà còn không biết add cái db thế nào ạ :(
 

hehe

Member
1/12/12
38
0
6
vâng, em thử rồi. nhưng vẫn thế anh ạ. em nghĩ sai ở cái sv.getPhong.getmaPhong(). tại nó có khóa ngoại từ bảng phòng nên e không biết làm thế nào :D
 

Joe

Thành viên VIP
21/1/13
3,024
1,336
113
hi hehe....what a name;)
nullPointerException is the hint to one of the objects you used is NOT instantiated. Look for the objects you used and see if you've instantiated them. You bark (or hehe) at a wrong tree.
 
  • Like
Reactions: hehe

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,637
310
83
Jackv
What is tớ test ?
Hi Joe,
:)) "Tớ" means I in English, and it similiars to "tôi, tao, ta, mình". However, in some case, we can use "anh, em, chị, ba, mẹ, ông, bà" for first personal pronoun. Hope your brain won't blown.
 
  • Like
Reactions: JackV

Joe

Thành viên VIP
21/1/13
3,024
1,336
113
Nancru,
I'll mention your comment in my last lecture about AI translator... Anyway I start to swoon :eek:
 
  • Like
Reactions: hehe

JackV

Administrator
Staff member
vâng, em thử rồi. nhưng vẫn thế anh ạ. em nghĩ sai ở cái sv.getPhong.getmaPhong(). tại nó có khóa ngoại từ bảng phòng nên e không biết làm thế nào :D
Code mà không để đường debug quá là nguy hiểm.
Sau khi thêm Connection() vào trong addSV(SinhVien sv) thì
PHP:
public void Connection(){
      String url = "jdbc:sqlserver://localhost:1433;databaseName=QuanLyKTX";
      String user = "sa";
      String password = "123456";
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn = DriverManager.getConnection(url, user, password);
        } catch (Exception ex) {
        }
}
Sau dòng } catch (Exception ex) {
thêm dòng ex.printStackTraces();
nếu conn = DriverManager.getConnection(url, user, password); xảy ra exception thì conn vẫn null.

Bạn cấu trúc phân tán chức năng nên phải cận thận kiểm tra từng chỗ.
Bạn thêm vài dòng kiểm tra trước dòng
Code:
preStmt=conn.prepareStatement(insertstr);
trong phương thức addSV(SinhVien sv)
Code:
            System.out.println("preStmt: " + preStmt);
            System.out.println("conn: " + conn);
Phải tự print debug info thôi, nó chỉ null ở dòng đó nhưng lại có nhiều biến.
 
  • Like
Reactions: hehe

Joe

Thành viên VIP
21/1/13
3,024
1,336
113
Hi hehe....what a name;)
PHP:
 public void addSV(SinhVien sv){
      String insertstr="INSERT INTO SinhVien(maSV,maPhong,tenSV,diaChi,ngaySinh,gioiTinh,lop,khoa,loai) VALUES(?,?,?,?,?,?,?)";
        try{
            preStmt=conn.prepareStatement(insertstr);
            preStmt.setString(1, sv.getMaSV());
            preStmt.setString(2,sv.getPhong().getMaPhong());
            preStmt.setString(3, sv.getTenSV());
            preStmt.setString(4, sv.getDiaChi());
            preStmt.setString(5, sv.getNgaySinh());
            preStmt.setString(6, sv.getGioiTinh());
            preStmt.setString(7, sv.getLop());
            preStmt.setString(8, sv.getKhoa());
            preStmt.setString(9, sv.getLoai());
            preStmt.executeUpdate();

        }catch(SQLException e){
            e.printStackTrace();
}
The nullPointerException points to this method at line 58 (68?). That means one of the string you picked from SinhVien has a value null. I verified the Test.java and saw you just add the retrieved String to a vector without verifying its content. So, you DON'T know if the strings are all OK. You're searching a needle in a hay heap...my proposal for your SinhVien.java
PHP:
    ....
    public Phong getPhong() {
        return (phong == null) ? "" : phong; // return a string of 0 length or phong
    }
    ...
 
  • Like
Reactions: hehe

JackV

Administrator
Staff member
The nullPointerException points to this method at line 58 (68?). That means one of the string you picked from SinhVien has a value null. I verified the Test.java and saw you just add the retrieved String to a vector without verifying its content. So, you DON'T know if the strings are all OK. You're searching a needle in a hay heap...my proposal for your SinhVien.java
PHP:
    ....
    public Phong getPhong() {
        return (phong == null) ? "" : phong; // return a string of 0 length or phong
    }
    ...
Oh, No, line not
Code:
preStmt=conn.prepareStatement(insertstr);
I was wrong ... :(
 

anhtuank7c

Member
5/12/10
167
13
18
Code xấu quá.
Điều đơn giản mình nhận ra là

PHP:
preStmt=conn.prepareStatement(insertstr);
Connection chưa đc tạo thì null chắc luôn, vì vậy bạn k thể prepareStatement được.
 

Joe

Thành viên VIP
21/1/13
3,024
1,336
113
Anhtuank & JackV
If the line is 58 then you both were RIGHT and I was WRONG. My shortsighted eyes said 58 or 68.
The line 58 pointed at the prepareStatement. Also conn wasn't correctly instantiated. But it doesn't change the fact that one of the Objects was not properly instantiated.
 

Joe

Thành viên VIP
21/1/13
3,024
1,336
113
Hi Hehe,
you have a beautiful pic of a road (probably somewhere in Vietnam). How do you think about this pic? Our vineyard in Pyrénées Orientales?
 

Attachments

  • Like
Reactions: hehe