解决方案 »
- ajax问题,请大侠们帮看看
- 高分急问一个问题,我的JSP修改保存了,为什么运行还是以前的?
- 如何将response作为jsp中程序的参数传递到一个java类中,急
- 一个月不写代码了,怎么显示集合对象也忘记了,郁闷ING......
- xfire调用web service !!
- jsp找回密码
- 为什么Hibernate中文查询不行
- SQL语名求助.
- 怎样才能在 打印 时把 下拉列表框 右边的 三角形箭头 隐藏?急呀!!!
- 一个还不能解决的连接池问题:java.sql.SQLException: Cannot load JDBC driver class 'null'
- tomcat启动不了
- Select 后面再增加个Select问题,在线等,告急 !!!
2.你不声明一个ResultSet对象去接收结果集的话,拿什么遍历?
3.还有很多地方可以优化,比如加载驱动放在静态块,通过PreparedStatement做动态参数赋值,还少一个update的方法。想封装一个比较好的DAO需要大量的工作经验和编码功底,说实话这个DAO差的挺远,连事务的代码都没封装根本不能用。
就比如,我会抽烟,但是目前我没有抽烟,等我点烟然后开始吸烟,才要处理
2、你的Bean中声明了ResultSet但并没有遍历ResultSet,你是把它交给了其他地方遍历
3、Class.forName(driverName);放在静态代码块中,只需加载一次就可以了,你的getConnection()方法会返回null,但你使用时并没有判断返回的connection是否为null,另外你的资源关闭方法也没有放在finally方法中,这种连接模版网上有很多示例,你可以参考参考
static{ Class.forName(driverName);
}
public Connection getConnection(){ //创建数据库连接
try{
con=DriverManager.getConnection(url,userName,password);
return con;
}catch(Exception e){
System.out.print("连接数据库失败"+e.getMessage());
throw new RuntimeException(e);
}
}
public ResultSet getResult(String sql){ //查询数据库
try{
// con=DriverManager.getConnection(url,userName,password); //这一行不可少
if(conn==null){
conn=getConnection();
}
st=con.createStatement();//最好使用PreparedStatement
rs=st.executeQuery(sql);
}catch(Exception e1){
System.out.print("无法把查询发送至数据库并获得结果"+e1.getMessage());
}
return rs;
}
你的代码就可以做上面的一些改动,当然还有比如说你可以将某些属性放在Properties文件中,然后动态读取呀,这些就不说了,网上太多了。
你说的关闭的问题:当某个对象你不想要在使用的时候,你就把它关闭掉,说的不是很准确。我举个例子哈:
rs,conn,st你都使用完毕了,那么就把它关闭,你不要调用了conn.close()后再去使用rs.getString()等方法,那么那个时候就会报空指针异常了,一般是在你不想在操作数据库的时候就关闭连接。希望对你有所帮助
java中对象的声明包括一个对象变量 以及它指向的堆对象的地址引用,即对象的初始化
Statement st;
ResultSet rs;
仅声明了对象变量,并没有将它们指向到具体的对象引用,也就是它们还没有初始化,还不能使用,所以在jsp页面上先初始化,然后使用之。
public static void closeAll(Statement stmt,PreparedStatement pstmt,ResultSet rs){
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
执行完操作后可一次性关闭。