当前位置: 代码迷 >> J2SE >> 数据库操作代码错误,请高手帮忙找有关问题所在
  详细解决方案

数据库操作代码错误,请高手帮忙找有关问题所在

热度:89   发布时间:2016-04-24 02:03:11.0
数据库操作代码异常,请高手帮忙找问题所在。
这是按照老师在课堂上打的代码照打下来的,但是打完因为时间关系老师没有演示,小弟回来后自己一模一样的打了下来,不知道是老师漏了什么,运行起来却发现有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异常可能是空指针异常,说不定你代码少打了。
  相关解决方案