importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.Statement;importjava.sql.ResultSet;publicclassDBTools{privatefinalString...
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
public class DBTools
{
private final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private final String URL="jdbc:sqlserver://localhost:1433;DataBaseName=Shop";
private final String NAME = "sa";
private final String PASS = "sa";
private Connection conn = null;
private Statement state = null;
private ResultSet rs = null;
private static DBTools db = null;
/**
* 私有构造函数
*/
private DBTools()
{
try
{
Class.forName(DRIVER);
if(conn==null)
{
conn =DriverManager.getConnection(URL,NAME,PASS);
}
}
catch (ClassNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 静态工厂 获取实例
* @return 实例
*/
public static DBTools getInstance()
{
if(db==null)
{
db = new DBTools();
}
return db;
}
/**
* 获取 连接对象
* @return 数据库连接对象
*/
public Connection getConn()
{
return conn;
}
/**
* 释放资源(关闭所有链接)
* @param conn
* @param rs
* @param state
*
*/
public static void closeAll(Connection conn,ResultSet rs,Statement state)
{
try
{
if(state!=null)
{
state.close();
state=null;
}
if(rs!=null)
{
rs.close();
}
if(conn!=null&&!conn.isClosed())
{
conn.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
/**
* 数据库操作 增 删 改
* @param sql
*
*/
public boolean addInfo(String sql)
{
boolean add = false;
int i=0;
try
{
state = this.conn.createStatement();
i = state.executeUpdate(sql);
if(i>0)
{
add = true;
}
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
closeAll(conn, null, state);
}
return add;
}
public ResultSet getInfo(String sql)
{
try
{
state = conn.createStatement();
rs = state.executeQuery(sql);
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
closeAll(conn, rs, state);
}
return rs;
}
}
本人新手 看了单例 模糊的写了这个。。
构造时就创建链接
如果测试类 来实例化这个对象
然后调用一次 addInfo() 方法 执行数据库操作 然后就把链接关闭了。
= = 那么要再使用链接就得再实例化一次对象才能 使用链接。
啊。。好矛盾啊 感觉逻辑过不去
难道只能让链接一直 开着不关。。
不是连接过多
是执行一次数据库操作方法
finally 块就关闭所有连接了
此时 数据库连接就没了
必须得重新构造这个类 才能创建连接 。。 貌似很不OK。。
展开