Java连接数据库DBHelper增删改查[多条数据]

来源:互联网 发布:windows c盘清理 编辑:程序博客网 时间:2024/05/20 08:42

补充!忘记写思路了。。。
思路
1. 使用Class.forName()加载驱动
2. 驱动管理指定数据库并连接 Connection conn = DriverManager.getConnection()
3. 连接后,使用连接获取预处理(处理sql语句) PreparedStatement pst = conn.preparedStatement(“sql语句”)
4. 使用预处理执行相应操作得到一个结果集 ResultSet rs = pst.executeQuery();
5. 获取元数据即数据库中一部分数据 ResultSetMetaData rsd = rs.getMetaData();
6. rsd中则包含数据库信息一定要要判断rsd.next() 是否有值,才能进一步操作
7. 根据数据库字段名获取数据库中相应的值 rs.getObject(“字段名”); 8.最后关闭连接,预处理,结果集


上午一大早被吵醒…干脆起来写代码,于是就有了这个DBHelper工具类,算是复习复习。
在实际开发过程中没有数据库基本是不能活呀!改工具类写了较详细的注释。
都是根据自己的理解写的,如果不对之处欢迎提出!不胜感激。

文件包括:
- jar包 oracle和mysql
- 一下描述到的类和配置文件

文件结构图
这里写图片描述

此类支持以下功能

  1. 增加
  2. 删除
  3. 修改
  4. 查询结果只有单条数据
  5. 查询结果有多条数据
  6. 多条语句查询

MyDbHelper类

package com.wy.mydb;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.wy.properties.MyProperties;public class MyDbHelper {    private  Connection conn = null;    private  PreparedStatement ps = null;    private  ResultSet rs = null;    //加载驱动    static {        try {            //方式一  固定写死  不方便更改数据库操作//          Class.forName("com.mysql.jdbc.Driver"); //Oracle驱动为: oracle.jdbc.driver.OracleDriver            //方式二  读取配置文件操作  如果需要更换数据库只需要修改配置文件即可   推荐            try {                Class.forName(MyProperties.getInstance().getProperty("driverName"));            } catch (IOException e) {                e.printStackTrace();            }        } catch (ClassNotFoundException e) {            e.printStackTrace();        }     }    //驱动管理连接指定数据库  获取连接对象    public Connection getConnection() {        try {            //方式一   固定写死  不方便更改数据库操作            //驱动管理指定数据库并连接          参数说明  端口信息  数据库账户  密码//          conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "a");            //方式二  读取配置文件操作  如果需要更换数据库只需要修改配置文件即可   推荐            try {                conn = DriverManager.getConnection(MyProperties.getInstance().getProperty("url"),MyProperties.getInstance());            } catch (IOException e) {                e.printStackTrace();            }        } catch (SQLException e) {            e.printStackTrace();        }        return conn;    }    //关闭所有对象              连接                预处理                 结果集    public void closeAll(Connection conn,PreparedStatement ps,ResultSet rs) {        if(conn!=null) {            try {                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(ps!=null) {            try {                ps.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(rs!=null) {            try {                rs.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }    /**单条语句的增删改   说明:在执行成功后函数返回的结果为非零整数     * @param sql  需要执行的sql语句     * @param params 执行sql语句的参数     * @return     */    public int doUpdate(String sql,List<Object> params) {        int result = 0;        //获取连接        conn = getConnection();        //预处理        try {            ps = conn.prepareStatement(sql);            //设置参数得到结果集            this.setParams(ps,params);            //预处理执行得到结果反馈            result = ps.executeUpdate();        } catch (SQLException e) {            e.printStackTrace();        }finally {            //关闭所有对象            this.closeAll(conn, ps, rs);        }        return result;    }    /**     * 多条语句的增删改     说明:这些语句要么同时成功,要么都失败     * @param sqls   多条sql语句     * @param params 执行参数     * @return     */    public int doUpdate(List<String> sqls,List<Object> params) {        int result = 0;        //获取连接        conn = getConnection();        try {            //多条语句的执行涉及到事务    设置事务提交方式为手动            conn.setAutoCommit(false);            //判断sql语句集合            if(sqls!=null&&sqls.size()>0) {                //循环每一条语句执行                for(int i=0;i<sqls.size();i++) {                    ps = conn.prepareStatement(  sqls.get(i) );                    //设置参数                    ps.setObject(i+1, params.get(i));                    //执行并反馈                    result = ps.executeUpdate();                }            }            //手动提交数据            conn.commit();        } catch (SQLException e) {            //出现错误则回滚数据            try {                conn.rollback();            } catch (SQLException e1) {                e1.printStackTrace();            }            e.printStackTrace();        } finally {            //回复事务自动提交            try {                conn.setAutoCommit(true);            } catch (SQLException e) {                e.printStackTrace();            }            //关闭所有对象            this.closeAll(conn, ps, rs);        }           return result;    }    /**     * 设置预处理的参数     * @param ps      预处理     * @param params 参数集合     * @throws SQLException      */    public void setParams(PreparedStatement ps,List<Object> params) throws SQLException {        if(params!=null&&params.size()>0) {            for(int i=0;i<params.size();i++) {                ps.setObject(i+1, params.get(i));            }        }    }    /**     * 查询sql语句单条结果     * @param sql   查询的sql语句     * @param params执行sql所需参数     * @return     */    public Map<String,Object> findSingleObject(String sql,List<Object> params){        Map<String,Object> map = new HashMap<String,Object>();        //获取连接        conn = getConnection();        //预处理        try {            ps = conn.prepareStatement(sql);            //设置参数            this.setParams(ps, params);            //执行查询得到结果集            rs = ps.executeQuery();            //获取数据库该表所有字段名            List<String> names = getAllColumnName(rs);            if(rs.next()) {                //循环names                for(String name:names) {                    map.put(name,  rs.getObject(name) );                }            }        } catch (SQLException e) {            e.printStackTrace();        } finally {            //关闭对象            this.closeAll(conn, ps, rs);        }        return map;    }    /**     * 查询sql语句多条结果     * @param sql     * @param params     * @return     */    public List<Map<String,Object>> findMulitObject(String sql,List<Object> params){        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();        //连接        conn = this.getConnection();        //预处理        try {            ps = conn.prepareStatement(sql);            //设置参数            this.setParams(ps, params);            //执行查询得到结果集            rs = ps.executeQuery();            //获取所有列名            List<String> names = this.getAllColumnName(rs);            while(rs.next()) { //注意这里不能用if 因为使用if的话只能执行一次 最后得到的结果就成了查一条数据                Map<String, Object> map = new HashMap<String,Object>();                //循环迭代                for(String name:names) {                    map.put(name, rs.getObject(name));                }                list.add( map );            }        } catch (SQLException e) {            e.printStackTrace();        }        return list;    }    /**     * 根据结果集获取数据库中的所有列表名     * @param rs     * @return     */    private List<String> getAllColumnName(ResultSet rs) {        List<String> names = new ArrayList<String>();        try {            ResultSetMetaData rsmd = rs.getMetaData();            for(int i=0;i<rsmd.getColumnCount();i++) {                names.add(   rsmd.getColumnName(i+1)  );            }        } catch (SQLException e) {            e.printStackTrace();        }        return names;    }}

MyProperties类 说明:用于读取配置文件db.properties

package com.wy.properties;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** * 整个类只需要创建一个对象 * 设计成单例模式 */public class MyProperties extends Properties{    private static MyProperties myProperties;    private MyProperties() throws IOException{        InputStream in = MyProperties.class.getClassLoader().getResourceAsStream("db.properties");        try {            this.load(in);        } catch (IOException e) {                   e.printStackTrace();            throw e;        }    }    public static MyProperties getInstance() throws IOException{        if(null==myProperties){            myProperties = new MyProperties();        }        return myProperties;    }}

db.properties 说明:输入自己的数据库链接密码 注意 所有输入后面不能有空格! 那句英文我感觉有错误…写英文的原因是,中文会被处理

#oracle#driverName=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@localhost:1521:orcl#user=scott#password=   please input your database password#mysql  #please input your database passworddriverName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testuser=rootpassword=   please input your database password

数据库文件

create table student(    sid int primary key auto_increment,    sname varchar(10))insert into student(sname) values('马小跳')insert into student(sname) values('淘气包')select * from student where sid = 2delete from student where sid = 3

完整文件请移步网盘下载http://pan.baidu.com/s/1o7EshNs pw2t

原创粉丝点击