创建一个配置文件xx.properties,打开配置文件写入连接数据库的驱动,用户名,密码,路径
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/myfriend
user=root
password= 123456
读取配置文件信息,加载数据库驱动
InputStream is=ConnectionPool.class.getClassLoader().getResourceAsStream("db.properties");
Properties p=new Properties();
p.load(is);
driver=p.getProperty("driver");
url=p.getProperty("url");
user=p.getProperty("user");
password=p.getProperty("password");
优化连接之连接池技术
为什么要优化呢?
因为原来的数据库连接,每一次连接完数据库,之后就自动销毁,下一次连接时有创建新的对象,会导致在连接时,花大量的时间。
连接池的思想是:一次将指定数目的数据库连接作为对象放在连接池中,然后每次从连接池中取用,用完之后又放回连接池,保证每个连接对象能重复使用。
3测试
连接数据库
ConnectionPool.java
package test;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.*;
public class ConnectionPool {
private static String driver;//驱动
private static String url; //本地数据库的路径
private static String user;//用户名
private static String password;//密码
private Vector<Connection> pool;//定义连接的动态数组,来存放连接
private final int ConnectionPool_Size=10;//连接的数目
private static ConnectionPool instance=null;
//判断是否有连接
public static ConnectionPool getinstance(){
if(instance==null)
{
instance =new ConnectionPool();
}
return instance;
}
private ConnectionPool(){
//连接池的大小
pool=new Vector<Connection>(ConnectionPool_Size);
addConnection();//添加连接
}
private void addConnection(){
try {
//读取配置文件信息,加载数据库驱动
InputStream is=ConnectionPool.class.getClassLoader().getResourceAsStream("db.properties");
Properties p=new Properties();
p.load(is);
driver=p.getProperty("driver");
url=p.getProperty("url");
user=p.getProperty("user");
password=p.getProperty("password");
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0;i<ConnectionPool_Size;i++)//添加默认数目的连接到连接池中
{
Connection con = null;
try {
con = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
pool.add(con);
}
}
//获取连接,如果有连接,则从连接池拿出使用
//如果没有连接,则向连接池添加连接
public synchronized Connection getConnection(){
if(ConnectionPool_Size>0){
Connection conn=pool.get(0);
pool.remove(conn);
return conn;
}
else
{
addConnection();
return null;
}
}
//用完放回连接池
public synchronized void release(Connection conn){
pool.add(conn);
}
}
查询
test.java
package test;
import java.sql.*;
public class test {
public static void main(String[] args) throws SQLException
{
Connection con=ConnectionPool.getinstance().getConnection();
Statement stat1 = null;
stat1 = con.createStatement();
String sql="select myfriend.name,myfriend.sex,myfriend.telephone,myfriend.email from user,myfriend ";
ResultSet rs = null;
rs = stat1.executeQuery(sql);
while(rs.next())
{
System.out.print(rs.getString("name")+" ");
System.out.print(rs.getString("sex")+" ");
System.out.print(rs.getString("telephone")+" ");
System.out.print(rs.getString("email")+" ");
System.out.println();
}
ConnectionPool.getinstance().release(con);
}
}