数据库连接封装
参数 user(uid,username,password,tid)
事先声明全局变量:
public Connection conn=null;
public PreparedStatement pstm=null;
public ResultSet rs=null;
driver,url,jdbcuser,pwd事先存入db.properties这样方便维护和修改。
只需在src文件夹中新建一个file将名字命名为db.properties,这样如果需要修改数据库信息只需在记事本中打开这个文件就可以了。
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true&characterEncoding=utf8
jdbcuser = root
pwd = 123456
读取配置文件的代码如下:
private static String driver;
private static String url;
private static String jdbcuser;
private static String pwd;
public static Properties properties=new Properties();
static {
try {
properties.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
driver=properties.getProperty("driver");
url=properties.getProperty("url");
jdbcuser=properties.getProperty("jdbcuser");
pwd=properties.getProperty("pwd");
}catch (Exception e){
e.printStackTrace();
}
}
数据库的连接封装只需将加载驱动和建立连接放在一个方法中即可,这样在编写程序的过程中直接调用此方法即可,减少了很多重复代码。
//数据库连接获取
public Connection getConn(){
try {
//获取驱动
Class.forName(driver);
//建立连接
conn= DriverManager.getConnection(url,jdbcuser,pwd);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
数据库BaseDAo的封装
实现增删改的BaseDAo的封装
这个方法只需把编写好的sql语句和存有从键盘获取的user的属性值放入到数组params中,数组类型为Object[]是因为属性值的类型不同。
String sql="insert into tb_user values(null,?,?,?)";
Object[] params={user.getUsername(),user.getPassword(),user.getTid()};
利用for循环,使用pstm的set方法将数组params中数据放入到对应的问号中。在输入的时候我们就会输入问号所对应的数据,所以数组的长度和问号的个数是对应的,这样可以应用到不同的sql语句上,实现更多的方法。通过返回的num来判断是否执行成功。
public int executeUpdate(String sql,Object[] params){
int num=0;
try {
pstm=conn.prepareStatement(sql);
if(params!=null){
for (int i = 0; i <params.length ; i++) {
pstm.setObject((i+1),params[i]);
}
}
num=pstm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return num;
}
实现查询的BaseDao封装
两个变量是和上面的方法是一样的,不同的是返回的数据类型不一样,查询语句返回的是一个ResultSet数据集,读取数据集中的数据得到查询结果。
public ResultSet executeQuery(String sql,Object[] params){
try {
pstm=conn.prepareStatement(sql);
if(params!=null){
for (int i = 0; i <params.length ; i++) {
pstm.setObject((i+1),params[i]);
}
}
rs=pstm.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
数据库资源释放封装
这一步也是同第一个封装一样是为减少代码重复,由于一般只有select会用到数据集,而其他sql语句只用到后面两个对象,所以为了适应不同的情况先进行判空操作,符合条件就释放资源,如果不进行判空操作可能会出现空指针报错。
public void closeResource(ResultSet rs,PreparedStatement pstm,Connection conn){
if (rs!=null){
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(pstm!=null){
try {
pstm.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
本人也是在学习中总结的,如有错误谢谢指正!