傳智播客學習筆記4.20
cmd指令行中亂碼問題:
mysql用戶端輸入:
set names 'gb2312';
通知mysql采用gb2312處理字元
存儲過程、JDBC2.0以後的幾個新特性
1.存儲過程
CallableStatement(從PreperedStatement擴充來)
cs = connection.prepareCall(“{call psname(?,?,?)}”);
2.幾個有用的特性
1) Statement.getGeneratedKeys()
Statement st =
connection.createStatement(Statement.RETURN_GENERATED_KEYS);
st.executeUpdate();
ResultSet rs = st.getGeneratedKeys();
rs.getInt();
2) 批量處理(1000次插入對比,mysql中優勢不明顯)
PrepareStatement.addBatch();
PreparedStatement.executeBatch();
3) 可滾動的結果集(性能一般,不推薦)
Statement st =
connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = st.executeQuery(sql);
rs.beforeFirst(); rs.afterLast();
rs.first(); rs.isFirst();
資料源和連接配接池
1. DataSource用來取代DriverManager來擷取Connection;
2. 通過DataSource獲得Connection速度很快;
3. 通過DataSource獲得的Connection都是已經被包裹過的(不是驅動原來的連接配接),他的close方法已經被修改。
4. 一般DataSource内部會用一個連接配接池來緩存Connection,這樣可以大幅度提高資料庫的通路速度;
5. 連接配接池可以了解成一個能夠存放Connection的Collection;
6. 我們的程式隻和DataSource打交道,不會直接通路連接配接池;
7. 實作一個簡單的資料源;
8. 常用的開源實作DBCP
使用DBCP必須用的三個包:commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar。
Java API: BasicDataSourceFactory.createDataSource(properties);
DBCP
C3P0
自行實作資料源連接配接池:
context.xml檔案需要放在METF-INF目錄中
資料源配置文檔:
apache-tomcat-6.0.16/webapps/docs/jndi-datasource-examples-howto.html
JNDI:java命名目錄接口
另一個開源的資料源:c3p0
重點掌握:
Connection(資料源、連接配接池,通過配置檔案控制連接配接字元串)
preparedStatement CallableStatement
ResultSet(分頁)
小工具:
dbutil
觸發器
1. DatabaseMetaData
DatabaseMetaData meta = connection.getMetaData();
通過DatabaseMetaData可以獲得資料庫相關的資訊如:資料庫版本、資料庫名、資料庫廠商資訊、是否支援事務、是否支援某種事務隔離級别,是否支援滾動結果集等。
2. ResultSetMetaData
ResultSetMetaData meta = rs.getMetaData();
通過ResultSetMetaData可以獲得結果有幾列、各列名、各列别名、各列類型等。
發現傳智的老師都比較追求完美,即使是示範的小程式也盡量做得完善些。這點很是讓人佩服