JavaWeb基礎(1):JDBC
阿新 • • 發佈:2018-12-11
(一)JDBC
(1)簡介
- JDBC:Java Database Connection
- 用於執行SQL語句的Java API
- 可以連線MySQl、Orcale資料庫
(2)基本操作
- 一個典型的查詢資料庫表的操作
public void f1() throws ClassNotFoundException,java.sql.SQLException {
//註冊驅動
Class.forName("com.mysql.jdbc.Driver");
//獲取連線
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test" ,"root","123456");
//建立語句執行
String sql = "select * from category";
//設定引數
PreparedStatement st = conn.prepareStatement(sql);
//執行SQL
ResultSet rs = st.executeQuery();
//處理結果
while(rs.next()){
System.out.println(rs.getString("cid") + ":" + rs.getString("cname"));
}
//釋放資源
rs.close ();
st.close();
conn.close();
}
(3)API
- DriverManager:用於管理JDBC驅動的基本服務
//DriverManager的getConnection方法:
public static Connection getConnection(String url,
String user,
String password)
throws SQLException
URL: 協議:資料庫型別 引數
例如:jdbc:mysql://localhost:3306/test
user:資料庫使用者名稱
password:密碼
- Connection:連線(Interface)
- createStatement()
- prepareStatement(String sql) 獲取預編譯語句執行者
- Statement 語句執行者(可能會誘發SQL注入)
- PreparedStatement
- setXXX(引數index,對應引數) :給PreparedStatement物件設定引數
- executeQuery() :返回值為ResultSet物件(返回查詢的具體結果)
- executeUpdate() :返回值為int型別(執行結果affect的row數)
- ResultSet
- next():返回值為boolean型別,如果有下一條記錄,則移動游標。常用於迴圈體判斷條件
- getint(int n):返回第n列
- getString(String s):返回欄位名的值
- getObject():可以獲取任意值
(4)工具類使用
- 將字元創常量放在.properties檔案(.properties檔案放在src目錄下)中,然後使用ResourceBundle類每次去提取字元創變數對應的值,這樣在專案中修改使用者名稱以及密碼等字串值的時候比較方便
- 這種操作也體現了面向物件中的封裝思想
- ResourceBundle
- getBundle(“properties檔名”):返回值為ResourceBundle物件
(1)dbutils
JavaBean是一個遵循特定寫法的Java類:有一個無參的建構函式,屬性私有化並且通過public方法訪問和修改屬性
- dbutils
- 封裝了JDBC程式碼的工具包,簡化Dao層操作
- 需要匯入的包:commons-dbutils-1.6.jar
- 核心類是QueryRunner類
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); //建立QueryRunner物件,傳參為一個ComboPooledDataSource物件
String sql = "insert into category values(?,?)";
qr.update(sql,"c013","商品7"); //執行sql語句
- QueryRunner
- 構造方法:new QueryRunner(DataSource ds);
- update(sql,引數1,引數2):執行SQL語句
(5)連線池
- 連線池
- 概念:連線池初始化時存入一些連線,要使用的時候獲取,使用完成之後歸還連線
- 資料庫建立連線是消耗資源的操作,如果對每個請求向資料庫請求連線效率很低
- 使用Pool維持連線的思想和執行緒池非常相似
- 常用連線池
- DBCP
- C3P0
(1) DBCP
- DBCP:Database Connection Pool
- Apache上的Java連線池
- 需要匯入的包:commons-dbcp.jar,commons-pool.jar
Properties prop = new Properties();
prop.load(new FileInputStream("src/dbcp.properties")); //在dbcp.properties中配置屬性
DataSource ds = new BasicDataSourceFactory().createDataSource(prop); //生成一個連線池
Connection conn = ds.getConnection(); //獲取一個連線
(2)C3P0
- Hibernate、Spring使用c3p0
- 需要匯入jar包比如:c3p0-0.9.1.2.jar
- 在src目錄下配置c3p0.properties檔案或者使用c3p0-config.xml配置檔案
- c3p0.properties檔案:
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///test //資料庫名稱
c3p0.user=root //使用者名稱
c3p0.password=123456 //密碼
- 獲取連線的方式
ComboPooledDataSource ds = new ComboPooledDataSource(); //連線池
Connection conn = ds.getConnection(); //獲取連線
(6)裝飾者模式
- 裝飾者模式
- 23種設計模式之一
- 不改變原類中的方法
- 建立一個包裝類Wrapper,包裝原來的類,動態的擴充套件一個物件的功能
- 包裝類和原類都繼承自同一個類或者實現了同一個介面