1、回顾数据库的基本用法
* 加载驱动:Class.forName().newInstance;//在JVM内加载了驱动
e.g:Class.forName("com.mysql.jdbc.Driver").newInstance;
* 获取连接对象:
java.sql.Connection conn = DriverManager.getConnection(url,userName,pwd);
其中:url="jdbc:mysql://localhost/"+dbName; //在本机器上的配置
若是Oracle数据库:url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
* 获取处理对象:
java.sql.Statement stmt = conn.createStatement();
java.sql.preparedStatement pstmt = conn.preparedStatement(sql);
* ResultSet遍历记录
java.sql.ResultSet rs = stmt.excuteQuery(sql);//查询
while(rs.next()){//rs.next()每次被调用将指向下一条记录,第一次调用将指向第一条记录
rs.getString("goods_id");//使用列名访问
rs.getDouble("price");
或
rs.getString(1);//使用序列号访问
rs.getDouble(2);
}
2、数据库连接池
基本步骤:
* 创建数据源对象:
BasicDataSource ds = new BasicDataSource();
* 设定数据源的相关参数:
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("admin");
ds.setPassword("123456");
ds.setInitialSize(10);//线程池容量
ds.setMaxActive(20);
* 生成连接池(连续多个连接):
DataSource ds = setupDataSource();
Connection conn = ds.getConnection();
* 数据库操作:
* 关闭数据源:
ds.close();
注意:数据库连接池技术是Apache的一个项目,在使用中必须用到两个外部类库。
commons-dbcp-1.2x.zip 、 commons-pool-1.4.1.zip
还要注意一下,有ds获得的conn使用后调用conn.close()将其休眠。
3、批处理:
/** * 获取数据源,注意:org.apache.commons.dbcp.BasicDataSource中的一些方法 * 如下函数中的set方法都不是实现接口方法。 * @return 数据源 */ private static javax.sql.DataSource getDS(){ BasicDataSource ds = new org.apache.commons.dbcp.BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver");//加载驱动 ds.setUsername("netjavablog");//数据库用户名 ds.setPassword("netjavablog");//密码 ds.setUrl("jdbc:mysql://localhost:3306/netjavablog");//数据库url ds.setInitialSize(5);//线程池容量,即连接个数。 return ds; } for(int i=0;i<10;i++){ //每次循环,从线程池取出一个连接对象。 java.sql.Connection conn= ds.getConnection(); String sql="select * from userinfo"; try{ java.sql.Statement stmt=conn.createStatement(); java.sql.ResultSet rs= stmt.executeQuery(sql); while(rs.next()){ UserInfo user=new UserInfo();// int id=rs.getInt(1); String name=rs.getString(2); String pwd=rs.getString(3); user.setId(id); user.setName(name); user.setPwd(pwd); System.out.println("user: "+user.toString()); Thread.sleep(3000); } rs.close(); }catch(Exception ef){ ef.printStackTrace(); } conn.close();//注意:该close方法并不是关闭了连接,而是 //将连接放到连接池休眠。