用前须知:
什么是数据库连接池?
当服务器启动时初始化一些链接放在连接池中,等待客户端调用。
客户端请求链接,则首先判断连接池中是否有可用的链接,如果有,则返回,
如果连接池中没有可用链接,则判断当前连接数是否超过了最大可用链接,
如果没有超过,则创建新的链接返回,如果超过了,则抛出无可用链接的异常,
最后,当客户端使用完链接之后,再将链接放回的连接池中,从而实现链接的重用。
数据源的作用:
1.获得连接的工程
2.DriverManager工具替代
工厂:
package com.bt.factory;
import java.sql.Connection;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class CF {
//给属性赋值
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql:///bt1707";
private static final String USER = "root";
private static final String PWD = "password";
//构造BasicDataSource对象
private static BasicDataSource ds = new BasicDataSource();
static{
ds.setDriverClassName(DRIVER);
ds.setUrl(URL);
ds.setUsername(USER);
ds.setPassword(PWD);
ds.setMaxActive(10);
ds.setMaxWait(3000);
}
//对外提供数据源(javax.sql.DataSource-->DBCP--->COMMONS-DBCP)
public static DataSource getDs(){
return ds;
}
//元数据:MetaData ResultSetMetaData
public static Connection getConnection(){
try {
return ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
实现类(自己写接口去)
package com.etoak.dao;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import com.bt.factory.CF;
import com.bt.po.Book;
public class DaoImpl implements DaoIf {
QueryRunner qr = new QueryRunner(CF.getDs());
@Override
public int getCount() {
String sql = "select count(*) from book";
try {
Map map = qr.query(sql, new MapHandler());
return Integer.parseInt(map.get("count(*)")+"");
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
@Override
public Book getById(Integer id) {
try {
String sql = "select * from book where id = ?";
Book book = qr.query(sql, new BeanHandler(Book.class),id);
return book;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
public List<Book> getAll() {
try {
String sql = "select * from book";
List<Book> data = qr.query(sql, new BeanListHandler(Book.class));
return data;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}