传智播客学习笔记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可以获得结果有几列、各列名、各列别名、各列类型等。
发现传智的老师都比较追求完美,即使是演示的小程序也尽量做得完善些。这点很是让人佩服