1. DbUtils包和核心类
- DbUtils使用的包:
- commons-dbutils-1.6.jar
- mysql-connector-java-5.1.37-bin.jar
- DButils核心类:
- QueryRunner
- ResultSetHandler
- DbUtils
2. QueryRunner类实现insert,update,delete
- 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(); } }
- 使用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. 结果集的处理
-
结果集处理方式 - ArrayHandler
将结果集的第一行,存到数组中。
-
结果集处理方式 - ArrayListHandler
将结果集的每一行,存到数组中。
-
结果集处理方式 - BeanHandler
将结果集的第一行,存到javabean中。
-
结果集处理方式 - BeanListHandler
将结果集的每一行,存到javabean中。
-
结果集处理方式 - ColumnListHandler
将结果集指定的一列,存到List集合中。
-
结果集处理方式 - ScalarHandler
对于查询以后只有一个结果。
-
结果集处理方式 - MapHandler
将结果集的第一行,存到Map集合中。
-
结果集处理方式 - MapListHandler
将结果集的每一行,存到Map集合中。
4. 连接池
- 包
- commons-dbcp-1.4.jar
- commons-pool-1.5.6.jar
- 核心类
- BasicDataSource
- 常见配置项
// 驱动类设置 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. 结果集和连接池实践
- 结果集处理:
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); } } } }
- 连接池:
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; } }