【JDBC】打造通用增删改方法原创
简介:在我们学习JDBC的时候或者编写简单的Servlet程序的时候,经常需要增删改查等操作,很多小伙伴的做法是:增删改查各写一个方法,这样写虽然可以实现我们想要的功能,但是写了很多重复的代码(垃圾代码),今天带大家一起来编写一个通过的CRUD方法。
- 实体类(用户类)
- BaseDao(链接数据库方法)
- CrudUtils(增删改查工具类)
- TestDemo(测试功能)
1、实体类
public class User {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
2、BaseDao(链接数据库方法)
public class BaseDao {
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://127.0.0.1/cart";
String dbName="root";
String dbPwd="root";
Connection conn;
PreparedStatement ps;
ResultSet rs;
/**
* 获取数据库链接
* @return
*/
public Connection getConnection(){
try {
Class.forName(driver);
conn=DriverManager.getConnection(url, dbName, dbPwd);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
*/
public void getClose(){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、CrudUtils(增删改查工具类)
public class CrudUtils extends BaseDao{
public void getUtils(String sql,Object []values){
//获取数据库链接
conn=getConnection();
try {
//预编译
ps=conn.prepareStatement(sql);
//获取ParameterMetaData()对象
ParameterMetaData pmd=ps.getParameterMetaData();
//获取参数个数
int number=pmd.getParameterCount();
//循环设置参数值
for (int i = 1; i <=number; i++) {
ps.setObject(i, values[i-1]);
}
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
getClose();
}
}
}
讲解:大家都知道,增删改其实没什么太多的区别,无非就是sql语句不一样和参数不一样,此方法中有两个值,一个是sql,还有一个是数组类型的,首先需要我们创建一个名为ParameterMetaData()对象,关于ParameterMetaData()对象的使用请大家查询api,通过ParameterMetaData()中的getParameterCount()方法可以获取我们的参数个数,在以往的情况下,我们如果执行添加操作,首先要创建对象,使用set依次进行赋值,如果属性过多,写起来也是比较费力气的,这边我们使用for循环,依次对属性进行赋值操作,在赋值的过程中,很多属性我们并不知道他是什么类型,但又要做到通用,此时我们使用Object类型更为妥当。
4、测试增删改
public class Demo01{
public static void main(String[] args) {
//增
new CrudUtils().getUtils("insert into user values(null,?,?)",new Object[]{"bbbbbb","123456"});
//删
new CrudUtils().getUtils("delete from user where id=?", new Object[]{27});
//改
new CrudUtils().getUtils("update user set name=?,password=? where id=?",new Object[]{"lililili","258369",2});
}
}
讲解:当我们需要做增删改操作的时候,直接调用以上方法即可,CrudUtils中需要传入两个参数,一个是sql语句,另一个是参数值,例如以上写法。
总结:此方法大大简化了我们的代码量,使得增删改更加的方便!