JDBC(二)

1. DbUtils包和核心类

  1. DbUtils使用的包:
    1. commons-dbutils-1.6.jar
    2. mysql-connector-java-5.1.37-bin.jar
  2. DButils核心类:
    1. QueryRunner
    2. ResultSetHandler
    3. DbUtils

2. QueryRunner类实现insert,update,delete

  1. Java工具类,创建数据库连接:
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class JDBCUtils {
        private static Connection con;
    
        static {
            InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("database.properties");
            Properties pro = new Properties();
            try {
                pro.load(in);
                in.close();
                String driver = pro.getProperty("driver");
                String url = pro.getProperty("url");
                String user = pro.getProperty("user");
                String password = pro.getProperty("password");
                Class.forName(driver);
                con = DriverManager.getConnection(url, user, password);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public static Connection getConnection() {
            return con;
        }
        
        public static void close() throws SQLException {
            con.close();
        }
    }
    
  2. 使用QueryRunner类实现insert,update,delete:
    import java.sql.Connection;
    import java.sql.SQLException;
    import org.apache.commons.dbutils.DbUtils;
    import org.apache.commons.dbutils.QueryRunner;
    import com.ccblogs.utils.JDBCUtils;
    
    public class Dbutils_study {
        private static Connection con = JDBCUtils.getConnection();
    
        public static void main(String[] args) throws SQLException {
            insert();
            update();
            delete();
        }
    
        public static void insert() throws SQLException {
            String sql = "insert into myStudy001(mid, mname) values (?,?)";
            QueryRunner qr = new QueryRunner();
            Object[] params = { 3, "ccblogs003" };
            // 使用QueryRunner.update(Connection, sql, Object...params)实现对数据库的操作
            int iRst = qr.update(con, sql, params);
            System.out.println(iRst);
            // 使用DbUtils.closeQuietly(Connection)方法关闭连接
            DbUtils.closeQuietly(con);
        }
    
        public static void update() throws SQLException {
            String sql = "update myStudy001 set mname = ? where mid = ?";
            QueryRunner qr = new QueryRunner();
            Object[] params = { "ccblogs03", 3 };
            // 使用QueryRunner.update(Connection, sql, Object...params)实现对数据库的操作
            int iRst = qr.update(con, sql, params);
            System.out.println(iRst);
            // 使用DbUtils.closeQuietly(Connection)方法关闭连接
            DbUtils.closeQuietly(con);
        }
        
        public static void delete() throws SQLException {
            String sql = "delete from myStudy001 where mid = ?";
            QueryRunner qr = new QueryRunner();
            Object[] params = { 3 };
            // 使用QueryRunner.update(Connection, sql, Object...params)实现对数据库的操作
            int iRst = qr.update(con, sql, params);
            System.out.println(iRst);
            // 使用DbUtils.closeQuietly(Connection)方法关闭连接
            DbUtils.closeQuietly(con);
        }
    }
    

3. 结果集的处理

  1. 结果集处理方式 - ArrayHandler

    将结果集的第一行,存到数组中。

  2. 结果集处理方式 - ArrayListHandler

    将结果集的每一行,存到数组中。

  3. 结果集处理方式 - BeanHandler

    将结果集的第一行,存到javabean中。

  4. 结果集处理方式 - BeanListHandler

    将结果集的每一行,存到javabean中。

  5. 结果集处理方式 - ColumnListHandler

    将结果集指定的一列,存到List集合中。

  6. 结果集处理方式 - ScalarHandler

    对于查询以后只有一个结果。

  7. 结果集处理方式 - MapHandler

    将结果集的第一行,存到Map集合中。

  8. 结果集处理方式 - MapListHandler

    将结果集的每一行,存到Map集合中。

4. 连接池

    1. commons-dbcp-1.4.jar
    2. commons-pool-1.5.6.jar
  1. 核心类
    1. BasicDataSource
  2. 常见配置项
    // 驱动类设置
    dataSource.setDriverClassName(driver);
    // 数据库连接地址设定
    dataSource.setUrl(url);
    // 数据库用户名设定
    dataSource.setUsername(user);
    // 数据库密码设定
    dataSource.setPassword(password);
    // 连接池初始化连接数
    dataSource.setInitialSize(10);
    // 连接池最大连接数
    dataSource.setMaxActive(9);
    // 连接池最大空闲连接数
    dataSource.setMaxIdle(8);
    // 连接池最小空闲连接数
    dataSource.setMinIdle(1);
    

5. 结果集和连接池实践

  1. 结果集处理:
    import java.sql.SQLException;
    import java.util.List;
    import java.util.Map;
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.*;
    import com.ccblogs.utils.JDBCUtils;
    
    public class ResultSet_study {
        public static void main(String[] args) throws SQLException {
            System.out.println("********************** insert **********************");
            insert();
            System.out.println("********************** ArrayHandler **********************");
            ArrayHandler();
            System.out.println("********************** ArrayListHandler **********************");
            ArrayListHandler();
            System.out.println("********************** BeanHandler **********************");
            BeanHandler();
            System.out.println("********************** BeanListHandler **********************");
            BeanListHandler();
            System.out.println("********************** ColumnListHandler **********************");
            ColumnListHandler();
            System.out.println("********************** ScalarHandler **********************");
            ScalarHandler();
            System.out.println("********************** MapHandler **********************");
            MapHandler();
            System.out.println("********************** MapListHandler **********************");
            MapListHandler();
        }
    
        // 使用连接池插入一条新的数据
        public static void insert() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "insert into myStudy001 (mid, mname) values (?, ?)";
            Object[] obj = { 5, "ccblogs05" };
            int i = qr.update(sql, obj);
            System.out.println(i);
        }
    
        // 1. 结果集处理方式 - ArrayHandler 将结果集的第一行,存到数组中。
        public static void ArrayHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select * from myStudy001";
            Object[] obj = qr.query(sql, new ArrayHandler());
            for (Object o : obj) {
                System.out.print(o + "  ");
            }
            System.out.println();
        }
    
        // 2. 结果集处理方式 - ArrayListHandler 将结果集的每一行,存到数组中。
        public static void ArrayListHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select * from myStudy001";
            List<Object[]> obj = qr.query(sql, new ArrayListHandler());
            for (Object[] os : obj) {
                for (Object o : os) {
                    System.out.print(o + "  ");
                }
                System.out.println();
            }
        }
    
        // 3. 结果集处理方式 - BeanHandler 将结果集的第一行,存到javabean中。
        public static void BeanHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select * from myStudy001";
            MyStudy001 myStudy001 = qr.query(sql, new BeanHandler<MyStudy001>(MyStudy001.class));
            System.out.println(myStudy001);
        }
    
        // 4. 结果集处理方式 - BeanListHandler 将结果集的每一行,存到javabean中。
        public static void BeanListHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select * from myStudy001";
            List<MyStudy001> myStudy001Lst = qr.query(sql, new BeanListHandler<MyStudy001>(MyStudy001.class));
            for (MyStudy001 myStudy001 : myStudy001Lst) {
                System.out.println(myStudy001);
            }
        }
    
        // 5. 结果集处理方式 - ColumnListHandler 将结果集指定的一列,存到List集合中。
        public static void ColumnListHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select * from myStudy001";
            List<Object> lst = qr.query(sql, new ColumnListHandler<Object>("mname"));
            for (Object object : lst) {
                System.out.println(object);
            }
        }
    
        // 6. 结果集处理方式 - ScalarHandler 对于查询以后只有一个结果。
        public static void ScalarHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select count(*) from myStudy001";
            long n = qr.query(sql, new ScalarHandler<Long>());
            System.out.println(n);
        }
    
        // 7. 结果集处理方式 - MapHandler 将结果集的第一行,存到Map集合中。
        public static void MapHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select * from myStudy001";
            Map<String, Object> map = qr.query(sql, new MapHandler());
            for (Map.Entry<String, Object> m : map.entrySet()) {
                System.out.println(m);
            }
        }
    
        // 8. 结果集处理方式 - MapListHandler 将结果集的每一行,存到Map集合中。
        public static void MapListHandler() throws SQLException {
            QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            String sql = "select * from myStudy001";
            List<Map<String, Object>> mapLst = qr.query(sql, new MapListHandler());
            for (Map<String, Object> map2 : mapLst) {
                for (Map.Entry<String, Object> m : map2.entrySet()) {
                    System.out.println(m);
                }
            }
        }
    }
    
  2. 连接池:
    import java.io.InputStream;
    import java.util.Properties;
    import javax.sql.DataSource;
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class JDBCUtils {
        private static BasicDataSource dataSource = new BasicDataSource();
    
        static {
            InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("database.properties");
            Properties pro = new Properties();
            try {
                pro.load(in);
                in.close();
                String driver = pro.getProperty("driver");
                String url = pro.getProperty("url");
                String user = pro.getProperty("user");
                String password = pro.getProperty("password");
                // 驱动类设置
                dataSource.setDriverClassName(driver);
                // 数据库连接地址设定
                dataSource.setUrl(url);
                // 数据库用户名设定
                dataSource.setUsername(user);
                // 数据库密码设定
                dataSource.setPassword(password);
                // 连接池初始化连接数
                dataSource.setInitialSize(10);
                // 连接池最大连接数
                dataSource.setMaxActive(9);
                // 连接池最大空闲连接数
                dataSource.setMaxIdle(8);
                // 连接池最小空闲连接数
                dataSource.setMinIdle(1);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public static DataSource getDataSource() {
            return dataSource;
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值