JDBC(二)

Jdbc学习,以mysql为例!

一、DbUtils包和核心类

  1. DbUtils使用的包:

    • commons-dbutils-1.6.jar
    • mysql-connector-java-5.1.37-bin.jar
  2. DButils核心类:

    • QueryRunner
    • ResultSetHandler
    • DbUtils

二、QueryRunner类实现insert,update,delete

  1. Java工具类,创建数据库连接:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    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:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    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);
    }
    }

三、结果集的处理

  1. 结果集处理方式 - ArrayHandler
    • 将结果集的第一行,存到数组中。
  2. 结果集处理方式 - ArrayListHandler
    • 将结果集的每一行,存到数组中。
  3. 结果集处理方式 - BeanHandler
    • 将结果集的第一行,存到javabean中。
  4. 结果集处理方式 - BeanListHandler
    • 将结果集的每一行,存到javabean中。
  5. 结果集处理方式 - ColumnListHandler
    • 将结果集指定的一列,存到List集合中。
  6. 结果集处理方式 - ScalarHandler
    • 对于查询以后只有一个结果。
  7. 结果集处理方式 - MapHandler
    • 将结果集的第一行,存到Map集合中。
  8. 结果集处理方式 - MapListHandler
    • 将结果集的每一行,存到Map集合中。

四、连接池

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

五、结果集和连接池实践

  1. 结果集处理:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    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();
    }
    /**
    * 使用连接池插入一条新的数据
    *
    * @throws SQLException
    */
    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 将结果集的第一行,存到数组中。
    *
    * @throws SQLException
    */
    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 将结果集的每一行,存到数组中。
    *
    * @throws SQLException
    */
    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中。
    *
    * @throws SQLException
    */
    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中。
    *
    * @throws SQLException
    */
    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集合中。
    *
    * @throws SQLException
    */
    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 对于查询以后只有一个结果。
    *
    * @throws SQLException
    */
    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集合中。
    *
    * @throws SQLException
    */
    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集合中。
    *
    * @throws SQLException
    */
    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. 连接池:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    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;
    }
    }