之前我们使用JDBC对MySQL进行操作,但感觉JDBC相对比较繁琐今天我们使用dbutils对MySQL进行操作
在这之前我们需要做一些准备
1 .我们进行操作的数据表格(很随意的数据)
序号 | 名称 | 价格 | 说明 |
---|---|---|---|
1 | 家电 | 2000.0 | 优惠 |
2 | 家电2 | 3000.0 | 优惠2 |
3 | 家电3 | 4000.0 | 优惠3 |
4 | 家电4 | 5000.0 | 优惠4 |
5 | 汽车 | 2000000.0 | 不卖 |
7 | 体育用品 | 2222.222 | 体育相关 |
可以看到这是一个商品的信息 我们可以根据这个表格写出一个类Sort
public class Sort {
private int sid;
private String sname;
private double sprice;
private String sdesc;
public Sort(int sid, String sname, double sprice, String sdesc) {
super();
this.sid = sid;
this.sname = sname;
this.sprice = sprice;
this.sdesc = sdesc;
}
public Sort() {
super();
}
@Override
public String toString() {
return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice + ", sdesc=" + sdesc + "]";
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public double getSprice() {
return sprice;
}
public void setSprice(double sprice) {
this.sprice = sprice;
}
public String getSdesc() {
return sdesc;
}
public void setSdesc(String sdesc) {
this.sdesc = sdesc;
}
}
使用私有属性可以更加安全的让我们操作数据然后为每个属性添加get和set以及同String 而最终要的是要写一个空参的构造方法(之后我们会说到)
在之后我们可以使用之前写过的连接MySQL工具来连接获得Connection类的con
* 编写JDBC的工具类,获取数据库的连接
* 采用读取配置文件
* 读取配置文件,获取连接 执行一次 静态代码块 static{}
*/
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class JDBCUtilsConfig {
private static Connection con;
private static String driverClass;
private static String url;
private static String username;
private static String password;
static {
try {
readConfig();
Class.forName(driverClass);
con =DriverManager.getConnection(url, username, password);
}catch (Exception ex){
throw new RuntimeException("数据库连接失败");
}
}
private static void readConfig() throws Exception {
InputStream in=JDBCUtils.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro=new Properties();
pro.load(in);
driverClass=pro.getProperty("driverClass");
url=pro.getProperty("url");
username=pro.getProperty("username");
password=pro.getProperty("password");
}
public static Connection getConnection() {
return con;
}
}
使用配置文件来配置会使之后的更改变得简单
在我的配置文件中是这样的
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybase
username=root
password=root
以键值对的形式来存储各个信息以方便更改数据库后或者更改账号密码时更方便地更改操作
上面就是我们的准备 下来要进入正题了 使用dbutils来操作
我们可以使用dbutils中的QueryRunner类来实现操作
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import c.c.Utils.JDBCUtilsConfig;
/*
* 使用QueryRunner 类 实现对数据表的
* insert delete update
* 调用QueryRunner 累的方法update(Connection con ,String sql,Object... param)
* Object..param 可变参数 ,Object 类型 SQL语句会出现?占位符
*
* 数据库连接对象 自定义的工具类的传递
*/
public class QueryRunnerdemo {
private static Connection con=JDBCUtilsConfig.getConnection();
public static void main(String[] args) throws SQLException {
// insert();//添加数据
// update();//更新数据
// delete();//删除数据
}
/*
* 定义方法 使用QueryRunner类的方法update 像数据表中添加数据
*/
public static void insert() throws SQLException {
//创建QueryRunner 对象
QueryRunner qu=new QueryRunner();
String sql ="INSERT INTO sort(sname,sprice,sdesc)VALUES(?,?,?)";
//将三个?占位符的实际参数,写在一个数组中
Object[] params= {"体育用品",2222.222,"体育相关"};
//调用QueryRunner累的方法update执行SQL语句
int row=qu.update(con,sql,params);
System.out.println(row);
DbUtils.closeQuietly(con);
}
/*
* 定义方法 使用QueryRunner累的方法update将数据表的数据修改
*/
public static void update() throws SQLException {
QueryRunner qu=new QueryRunner();
String sql ="UPDATE sort SET sname=?,sprice=?,sdesc=? WHERE sid=6";
Object[] param = {"更新1",66.5,"更新时"};
int row=qu.update(con,sql, param);
DbUtils.closeQuietly(con);
System.out.println(row);
}
/*
* 定义方法 使用QueryRunner类的方法delete将数据表的数据删除
*/
public static void delete()throws SQLException{
QueryRunner qu=new QueryRunner();
String sql="DELETE FROM sort WHERE sid=?";
int row= qu.update(con,sql,6);
if(row>0) {
System.out.println("true");
}else {
System.out.println("flase");
}
System.out.println(row);
DbUtils.closeQuietly(con);
}
}
对数据的查看在下一篇