引入jar包操作資料庫與連線池
阿新 • • 發佈:2019-02-13
commons-dbutils-1.6.jar
1.commons-dbutils-1.6.jar
操作JDBC連線資料庫 並且執行sql語句 處理返回的結果集
三個核心類
DbUtils: 關閉資源的方法(安靜的關閉 不用異常處理)
QueryRunner: 執行sql語句 並且返回你想要的結果集
引數: ResultSetHandler是介面(使用它的實現類 想要什麼結果集 就傳入什麼該類的介面)
// 插入資料
private static void insert() throw SQLException{
// 插入一條資料使用QueryRunner
QueryRunner qr = new QueryRunner();
// 獲取連線 (JDBCUtil是自己寫好的建立連線和關閉資源的工具類)
Connection connection = JDBCUtil.getConnection();
String sql = "insert into sort values (null, '顯示器', 5,'這是一臺顯示器');
// 插入資料
int row = qr.update(connection.sql);
if(row > 0){
System.out.println("插入成功");
}
// 安靜的關閉資源
DbUtil.closeQuietly(connection);
}
// 修改資料
private static void update() throw SQLException{
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
// 使用佔位符傳入sql語句
String sql = "update sort set sname=?, sprice=?, sdesc=? where sid=5";
// 多引數傳參 方式1 利用陣列傳
// 方式2 直接傳遞引數 注意要和佔位符號的順序 對應
Object[] params = {"咖啡",1000,"java裡的咖啡"};
int row = qr.update(connection, sql, "咖啡1",2000,"java裡的咖啡");
if (row > 0) {
System.out.println("修改成功" );
}
DbUtils.closeQuietly(connection);
}
2.使用QueryRunner進行查詢操作 給QueryRunner傳入的引數不同 返回的結果集也不同
@Test
public void select1() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
// 呼叫查詢方法
// 傳入什麼內容 該類就把資料放到什麼容器中 給你返回
Object[] objects = qr.query(connection, sql, new ArrayHandler());
for (Object object : objects) {
System.out.println(object);
}
DbUtils.closeQuietly(connection);
}
/*
* ArrayListhandler
* 查詢每一條記錄 放到List集合中
* 每一條記錄是一個物件陣列
*/
@Test
public void select2() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
List<Object[]> list = qr.query(connection, sql, new ArrayListHandler());
for (Object[] objects : list) {
for (Object object : objects) {
System.out.println(object);
}
System.out.println();
}
DbUtils.closeQuietly(connection);
}
/*
* BeanHandler
* 把結果集的第一行 封裝成一個JavaBean物件
* JavaBean物件規則
* 1.成員變數私有化
* 2.提供空參的構造方法
* 3.提供set/get方法
* 符合以上規則的實體類創建出來的物件 就是一個JavaBean物件
*
*/
@Test
public void select3() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
// 要把使用哪個javabean實體類 傳進去
// 類名.class
Sort sort = qr.query(connection, sql, new BeanHandler<>(Sort.class));
if (sort == null) {
System.out.println("沒有該資料");
}
System.out.println(sort);
DbUtils.closeQuietly(connection);
}
/*
* BeanListHandler
* 返回全部資料
*/
@Test
public void select4() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
List<Sort> list = qr.query(connection, sql, new BeanListHandler<>(Sort.class));
for (Sort sort : list) {
System.out.println(sort);
}
DbUtils.closeQuietly(connection);
}
/*
* ColumnListHandler
* 返回指定列的資料 放在list中返回
*/
@Test
public void select5() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
List<String> list = qr.query(connection, sql, new ColumnListHandler<String>("sname"));
for (String string : list) {
System.out.println(string);
}
DbUtils.closeQuietly(connection);
}
/*
* ScalarHandler
* 只返回一個結果 多用於sql語句的聚合查詢
*/
@Test
public void select6() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select avg(sid) from sort";
BigDecimal query = qr.query(connection, sql, new ScalarHandler<BigDecimal>());
System.out.println(query);
DbUtils.closeQuietly(connection);
}
/*
* MapHandler
* 將第一條資料存放在map中 以鍵值對的形式 鍵:列名 值: 列值
*/
@Test
public void select7() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
Map<String, Object> map = qr.query(connection, sql, new MapHandler());
for (String key : map.keySet() ) {
System.out.println(key + " " + map.get(key));
}
DbUtils.closeQuietly(connection);
}
/*
* MapListHandler
* 返回全部資料 將存有資料的map存到list中 在返回去
*/
@Test
public void select8() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
List<Map<String,Object>> list = qr.query(connection, sql, new MapListHandler());
for (Map<String, Object> map : list) {
for (String key : map.keySet()) {
System.out.println(key + " " + map.get(key));
}
}
DbUtils.closeQuietly(connection);
}
}
連線池
java為了解決頻繁建立資料庫連線和釋放資料庫連線的問題
使用資料庫連線池來解決 並且出了一套規範
資料庫連線規範(介面)
javax.sql.DataSource java擴充套件包
由資料庫廠商來提供的
常用資料庫連線池 DBCP C3P0
需要匯入的jia包(dbcp中依賴pool jia包種的類)
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
BasicDataSource 是 DataSource(規範類) 的實現類
基礎設定 (要使用資料庫連線池 必須要設定的內容)
mysql驅動類 com.mysql.jdbc.Driver
訪問資料庫連線地址
資料庫訪問使用者名稱 和 密碼
public class DataSourceUtil {
private static BasicDataSource dataSource = new BasicDataSource();
static {
// 設定dataSource
// mysql的驅動類的許可權定類名
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc");
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 擴充套件設定
// 初始化連線數
dataSource.setInitialSize(10);
// 最大活動數
dataSource.setMaxActive(8);
// 最大空閒連線數
dataSource.setMaxIdle(5);
// 最小空閒連線數
dataSource.setMinIdle(2);
}
// 獲取資料庫連線池方法
public static DataSource getDataSource() {
return dataSource;
}
}
// 測試DataSourceUtil類
public static void main(String[] args) throws SQLException {
// 資料庫連線池和QueryRunner結合使用
QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
// 插入一條資料
String sql = "insert into sort values (null, ?, ?, ?)";
Object[] params = {"試卷", 10, "一份萬分試卷"};
int row = qr.update(sql, params);
if (row > 0) {
System.out.println("插入成功");
}
}