-5

これは、カスタマイズされた接続用の JDBC コードです。正常に動作している SQL 5 データベース サーバーを使用しています。ネット Bean バージョン 7.3 でこのコードを試しました。3つのクラスが含まれています

public class MyDbOperation {

    private static Connection c;
    private static Statement st;
    private static ResultSet rs;
    private static ArrayList al;
    private static int m;
    private static Student student;
    static {
        try{
            Class.forName("com.mysql.jdbc.Driver");
            c=  DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stp13","root","@Ashish123");
            st=c.createStatement();
        }catch(Exception e){}
    }

    public static int getInsert(Student s) throws SQLException {
      m=st.executeUpdate("insert into student values("+s.getRollNo()+",'"+s.getFname()+"','"+s.getLname()+"','"+s.getEmail()+"',"+s.getMob()+",'"+s.getStreet()+"','"+s.getCity()+"')");
        return m;
    }    
}

コードを実行すると、次のエラーが表示されます

java.lang.NullPointerException
at stp13.MyDbOperation.getInsert(MyDbOperation.java:44)
at stp13.Stp13hbt.main(Stp13hbt.java:24)

コードに問題がありますか?どのように解決するには?

4

2 に答える 2

2

あなたの問題はここにあります

try{
    Class.forName("com.mysql.jdbc.Driver");
    c=  DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stp13","root","@Ashish123");
    st=c.createStatement();
} catch(Exception e){}

例外を再スローしたりログに記録したりしないため、飲み込まれます。stそれではnull。これをに変更

try{
    Class.forName("com.mysql.jdbc.Driver");
    c=  DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stp13","root","@Ashish123");
    st=c.createStatement();
} catch(Exception e){
    throw new ExceptionInInitializerError(e);
}

コードには、メモリ リークと SQL インジェクションの可能性がいっぱいです。JDBC の正しい使用法に関するチュートリアル 読みください。

于 2013-06-20T17:29:06.357 に答える
0

静的初期化子で例外を飲み込んだように見えるので、stnull です。これが、例外を飲み込んではいけない理由です。簡単に追加して、e.printStackTrace()それが何を言っているかを見てください。おそらく MySQL が実行されていません。

于 2013-06-20T17:27:49.830 に答える