这是按照老师在课堂上打的代码照打下来的,但是打完因为时间关系老师没有演示,小弟回来后自己一模一样的打了下来,不知道是老师漏了什么,运行起来却发现有Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException异常。提示的是窗口类中的ms.ExecuteSql(sql);和MySql类里面的ExecuteSql(String sql)方法里面的stm.executeUpdate(sql);麻烦帮小弟分析下这个代码。谢谢!
窗口类代码如下:
- Java code
private MySql ms = new MySql();//省略部分无关代码btnSave.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String sql = "INSERT INTO student VALUES("+txtId.getText()+",'"+txtName.getText()+"');"; ms.ExecuteSql(sql); ms.closeConnection(); showStu(); } });
MySql类代码如下:
- Java code
public class MySql { private Connection conn =null; private final String DB_DRIVER="com.mysql.jdbc.Driver"; private final String DB_URL="jdbc:mysql://localhost:3306/school"; private final String DB_USER="root"; private final String DB_PWD="root"; public MySql(){} public void getConnection(){ try { Class.forName(DB_DRIVER); Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PWD); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void closeConnection(){ try { if(conn!=null){ conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public boolean ExecuteSql(String sql){ int rt=0; if(conn==null){ getConnection(); } try { Statement stm = conn.createStatement(); stm.executeUpdate(sql); //stm.close(); //不管有没有这个close都会有异常 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(rt==0){ return false; }else{ return true; } }
------解决方案--------------------
可能是conn.createStatement();的时候返回null,因为你在使用完没有及时摧毁?所以连接数过多?
另外建议你用prepareStatement....防止sql注入以及在查询前预编译成数据库需要的语言,查询的时候更快
------解决方案--------------------
private MySql ms = new MySql();
btnSave.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{
String sql = "INSERT INTO student VALUES("+txtId.getText()+","+txtName.getText()+")";
ms.ExecuteSql(sql);
ms.closeConnection();
showStu();
}
}catch(SQLException e){};
});
试试我这个方法行不,如果不行你好好检查一下;这个NullPointerException异常可能是空指针异常,说不定你代码少打了。