我在学习JDBC时候对数据库操作也是非常混乱,但是后来我就理清了思路了,
我和楼主分享下经验吧!
这些是必要的属性
private Statement stmt;
private PreparedStatement pstmt;
private ResultSet rs;
private Connection con;
首先是这个获取连接串的方法:
private Connection getConn(){
String driverName=ProReader.getInstance().getProperty("driverClassName");
String url=ProReader.getInstance().getProperty("url");
String user=ProReader.getInstance().getProperty("username");
String password=ProReader.getInstance().getProperty("password");
try {
Class.forName(driverName);
con=DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
采取的是配置文件读取,可支持编译后的数据库字符串变动的修改
这个ClossAll方法可关闭所有连接,并且防止了空指针异常的出现
public void closeAll(){
try {
if(pstmt!=null){
pstmt.close();
}
if(stmt!=null){
stmt.close();
}
if(rs!=null){
rs.close();
}
if(con!=null){
con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
接下来是这个构造方法的实现
在构造的同时获取了数据库连接串,并且将Statement 创建,你就可以直接执行对数据库的操作了
public BaseDao(){
closeAll();
con=getConn();
try {
stmt=con.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
最后是通用的方法
public Object execute(String sql,boolean isQuery){
if(isQuery){
return executeQuery(sql);
}else{
return executeUpdate(sql);
}
}
public ResultSet executeQuery(String sql){
try {
rs=stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public int executeUpdate(String sql){
int ret=-1;
try {
ret=stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ret;
}
public ResultSet pExecuteQuery(String sql,Object [] param){
try {
if(pstmt!=null){
pstmt.close();
}
pstmt=con.prepareStatement(sql);
for(int i=1;i<=param.length;i++){
pstmt.setObject(i, param[i-1]);
}
return pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public int pExecuteUpdate(String sql,Object [] param){
try {
if(pstmt!=null){
pstmt.close();
}
pstmt=con.prepareStatement(sql);
for(int i=1;i<=param.length;i++){
pstmt.setObject(i, param[i-1]);
}
return pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}
public Object pExecute(String sql,Object [] param,boolean isQuery){
if(isQuery){
return pExecuteQuery(sql, param);
}else{
return pExecuteUpdate(sql, param);
}
}
不过在最后别忘记关闭数据库,调用下closeAll方法就可以将所有的关闭! |