Java學習路程之資料庫連線, common-dbutils和資料來源
阿新 • • 發佈:2018-12-12
一.資料庫連線 1.封裝資料庫連線
public class Day28{ public static void main(String[] args) throws SQLException { //查詢sort全表並且將查詢出來的每條資料封裝成一個物件 //給每一張表建立一個實體類 Connection connection = JDBCConnection.getConnection(); //獲取SQL語句執行物件 Statement statement = connection.createStatement(); String sql = "select * from sort"; ResultSet resultSet = statement.executeQuery(sql); //結果處理 while (resultSet.next()) { Sort sort = new Sort(); sort.setSid(resultSet.getInt("sid")); sort.setSname(resultSet.getString("sname")); sort.setSprice(resultSet.getDouble("sprice")); sort.setSdesc(resultSet.getString("sdesc")); System.out.println(sort); } //關閉資源 JDBCConnection.myClose(connection, resultSet, statement); } } public class JDBCConnection { //宣告連線 private static Connection connection; //註冊驅動 在靜態程式碼塊中會只註冊一次 static{ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); //丟擲執行時異常停止程式 throw new RuntimeException("註冊驅動失敗"); } } private JDBCConnection(){ } //獲取連線方法 public static Connection getConnection(){ //資料庫地址 String url = "jdbc:mysql://localhost:3306/ldmysql01"; /資料庫/使用者名稱 String user = "root"; //資料庫密碼 String password = "123456"; try { //獲取連線物件 connection = DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("資料庫連線失敗"); } return connection; } //關閉資源方法 public static void myClose(Connection connection, ResultSet resultSet, Statement statement){ //當使用try catch處理異常時,發生異常時,不影響下面程式碼的執行.當自己丟擲異常時,異常發生會導致程式中斷. if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
二.common-dbutils 工具類庫 1.dbutils類 closeQuietly(Connection conn)方法關閉資源 2.queryrunner類 query(Connection conn, String sql, ResultSetHandler rsh, Object… params) 查詢 引數1:資料庫連線物件 引數2:SQL語句(可使用佔位符) 引數3:查詢後得到的結果集(可以選用不同型別的結果集) 引數4:替換SQL語句佔位符 update(Connection conn, String sql, Object… params) 更新 插入資料
//建立查詢物件 QueryRunner queryRunner = new QueryRunner(); Connection connection = JDBCutil1.getConnection(); String sql = "insert into sort values (null, ?, ?, ?)"; //建立陣列 傳引數 Object[] params = {"熱風鞋子", 100, "好穿不貴"}; int row = queryRunner.update(connection, sql, params); System.out.println("受影響的行數" + row); //關閉資源 DbUtils.close(connection);
刪除 id為10的資料
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
String sql = "delete from sort where sid=?";
int row = queryRunner.update(connection, sql, 10);
System.out.println("受影響的行數" + row);
DbUtils.close(connection);
修改id=8 毛巾 100 柔軟
QueryRunner queryRunner = new QueryRunner(); Connection connection = JDBCutil1.getConnection(); String sql = "update sort set sname=?, sprice=?, sdesc=? where sid=?"; Object[] params = {"毛巾", 100, "柔軟", 8}; int row = queryRunner.update(connection, sql, params); System.out.println("受影響的行數" + row); DbUtils.close(connection);
3.ResaultSetHandle 提供結果集 ArrayHandler 預設返回查詢的第一條資料
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
Object[] query = queryRunner.query(connection, sql, new ArrayHandler());
for (Object object : query) {
System.out.println(object);
}
DbUtils.close(connection);
ArrayListHabdler 返回多條記錄
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
List<Object[]> query = queryRunner.query(connection, sql, new ArrayListHandler());
for (Object[] objects : query) {
for (Object object : objects) {
System.out.print(object+ " ");
}
System.out.println();
}
DbUtils.close(connection);
BeanListHandler 預設只返回第一條資料
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
Sort sort = queryRunner.query(connection, sql, new BeanHandler<>(Sort.class));
System.out.println(sort);
DbUtils.close(connection);
BeanListHandler 返回儲存好的物件的list集合,返回所有資料
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
List<Sort> query = queryRunner.query(connection, sql, new BeanListHandler<>(Sort.class));
for (Sort sort : query) {
System.out.println(sort);
}
DbUtils.close(connection);
ColumnListHandler 預設返回資料庫中第一列資料,可以傳入引數(欄位名)
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
List<Object> query = queryRunner.query(connection, sql, new ColumnListHandler<>("sname"));
for (Object object : query) {
System.out.println(object);
}
DbUtils.close(connection);
ScalarHandler 獲取聚合函式返回的資料並且返回的是long型
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
String sql2 = "select count(*) from sort";
Long query = queryRunner.query(connection, sql2, new ScalarHandler<Long>());
System.out.println(query);
//或
/*Number number = queryRunner.query(connection, sql2, new ScalarHandler<Long>());
System.out.println(number.longValue());*/
DbUtils.close(connection);
MapHandler 預設返回第一條資料
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
Map<String, Object> map = queryRunner.query(connection,sql, new MapHandler());
for (String key : map.keySet()) {
System.out.println(key + " "+ map.get(key));
}
DbUtils.close(connection);
MapListHandler 返回多條記錄
String sql = "select * from sort";
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCutil1.getConnection();
List<Map<String,Object>> query = queryRunner.query(connection, sql, new MapListHandler());
for (Map<String, Object> map : query) {
for (String key : map.keySet()) {
System.out.print(key +" "+ map.get(key));
}
System.out.println();
}
三.DataSource 資料來源 查詢時建立和銷燬連線耗費資源,使用資料來源可以解決這個問題,查詢時會從資料庫連線池找出一個空閒的連線去查詢資料庫,查詢完畢後不會銷燬連線會重新放入連線池中
// 建立資料庫連線池
BasicDataSource dataSource = new BasicDataSource();
//基礎設定 賬號密碼 資料庫地址
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/ldmysql01");
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 獲取連線
Connection connection = dataSource.getConnection();
System.out.println(connection);
dataSource工具類
// 通過資料庫連線池建立 QueryRunner物件
QueryRunner queryRunner = new QueryRunner(DataSourceUtil.getDataSource());
String sql = "select * from sort";
List<Sort> query = queryRunner.query(sql, new BeanListHandler<>(Sort.class));
System.out.println(query);