web中数据库交互操作注意事项
发布时间
阅读量:
阅读量
最近在servlet遇到些小问题–数据的交互操作,分享给大家【有详细注解】;
- package org.rookie.util;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- //数据库的交互操作,如增,删,查,改;
- public class BaseDao {
- private Connection conn;
- // PreparedStatement表示预编译得SQL语句的对象,也就是说SQL语句被预编译并存储在PreparedStatement对象中,
- // 然后可以使用此对象多次高效地执行改语句
- private PreparedStatement ps;
- private ResultSet rs;
- //获得连接
- private void getConnection(){
- try {
- //1.注册驱动
- Class.forName(“com.mysql.jdbc.Driver”);
- //2.获取连接
- String url=”jdbc:mysql://localhost:3306/booksys”;
- //3.通过数据库名+用户名+密码连接该9(booksys)数据库
- conn=DriverManager.getConnection(url,”root”,”root”);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- //关闭数据库,注意顺序
- /**
- (1)由于垃圾回收的线程级别是最低的,为了充分利用数据库资源,有必要显式关闭它们,尤其是使用Connection
- Pool的时候;
- (2)最优经验是按照ResultSet,Statement(PreparedStatement),Connection的顺序执行close;
- (3)为了避免由于java代码有问题导致内存泄露,需要在rs.close和stmt.close()后面一定要加上rs = null和stmt = null;
- (4)如果一定要传递ResultSet,应该使用RowSet,RowSet可以不依赖于Connection和Statement。Java传递的是引用,
- 所以如果传递ResultSet,你会不知道Statement和Connection何时关闭,不知道ResultSet何时有效。
-
- */
- public void close(){
- if(rs!=null)
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- if(ps!=null)
- try {
- ps.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- if(conn!=null)
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- //做更新操作–增,删,改;
- /*理解(Object…objects)
- 当形参为Object[]数组时,调用该方法必须为一个数组
- 当形参为Object…objects时,调用就相当灵活了,可以不带参数,可以带一个参数或者多个参数,也可以带数组作为参数*/
- public int executeUpdate(String sql,Object…objects){
- this.getConnection();
- try {
- ps=conn.prepareStatement(sql);
- if(objects!=null)
- for(int i=0;i<objects.length;i++){
- ps.setObject(i+1, objects[i]);
- }
- return ps.executeUpdate();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- this.close();
- }
- return -1;
- }
- //查询
- // 结果集(ResultSet)是数据中查询结果返回的一种对象
- public ResultSet executeQuery(String sql,Object…objects){ //ResultSet接口
- this.getConnection();
- try {
- ps=conn.prepareStatement(sql); //预编译执行SQl语句
- if(objects!=null)
- for(int i=0;i<objects.length;i++){
- ps.setObject(i+1, objects[i]);
- }
- return rs=ps.executeQuery(); //返回结果集
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
全部评论 (0)
还没有任何评论哟~
