/**
* Dao的基类,使用JDBC连接数据库、释放资源、执行sql.
*/
package s2jsp.dao;
import java.sql.*;
public class BaseDao {
// 数据库驱动
public final static String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
// URL
public final static String URL = "jdbc:sqlserver://localhost:1433;DataBaseName=bank";
// 数据库用户名
public final static String DBNAME = "sa";
// 数据库密码
public final static String DBPASS = "sa";
/**
* 得到数据库连接
* @return 数据库连接对象
* @throws ClassNotFoundException
* @throws SQLException
*/
public Connection getConn() throws ClassNotFoundException,SQLException{
// 注册驱动
Class.forName(DRIVER);
// 获得数据库连接
Connection conn = DriverManager.getConnection(URL,DBNAME,DBPASS);
// 返回连接
return conn;
}
/**
* 释放资源
* @param conn 数据库连接
* @param pstmt PreparedStatement对象
* @param rs 结果集
*/
public void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs){
/* 如果rs不空,关闭rs */
if(rs != null){
try{rs.close();}catch(SQLException e){e.printStackTrace();}
}
/* 如果pstmt不空,关闭pstmt */
if(pstmt != null){
try{pstmt.close();}catch(SQLException e){e.printStackTrace();}
}
/* 如果conn不空,关闭conn */
if(conn != null){
try{conn.close();}catch(SQLException e){e.printStackTrace();}
}
}
/**
* 执行SQL语句,可以进行增、删、改的操作,不能执行查询
* @param sql 预编译的 SQL 语句
* @param param 预编译的 SQL 语句中的'?'参数的字符串数组
* @return 影响的条数
*/
public int executeSQL(String preparedSql,String[] param){
Connection conn = null;
PreparedStatement pstmt = null;
int num = 0;
try{
conn = getConn(); // 得到数据库连接
pstmt = conn.prepareStatement(preparedSql); // 得到PreparedStatement对象
if(param != null){
for (int i = 0; i < param.length; i++) {
pstmt.setString(i+1, param[i]);
}
}
num = pstmt.executeUpdate();
}
catch(ClassNotFoundException e){
e.printStackTrace(); //处理ClassNotFoundException异常
}catch(SQLException e){
e.printStackTrace(); //处理SQLException异常
}finally{
closeAll(conn,pstmt,null); // 释放资源
}
return num;
}
}