由于刚学完JDBC,所以来小练一下,通过Druid实现对数据库的增删改查操作
(现在是真正简单的纯数据库操作,等我学过前端,再做一个比较具体的!)
•数据库
新建一个数据库tb,创建brand表,有主键,品牌名,公司名,排序,描述,状态属性。
并插入三条信息(为防止主键id错乱,使用自动生成,即不写默认从1开始依次增加)
CREATE DATABASE IF NOT EXISTS tb; USE tb; -- 建表 CREATE TABLE brand( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自动生成 brand_name VARCHAR(20), -- 品牌名 company_name VARCHAR(20), -- 公司名 ordered INT, -- 排序 description VARCHAR(100), -- 商品描述 statu INT -- 状态 0:禁用 1:启用 ); -- 添加数据 INSERT INTO brand (brand_name,company_name,ordered,description,statu) VALUES ("三只松鼠", "三只松鼠股份有限公司", 5, "好吃不上火", 0), ("华为", "华为有限公司", 100, "华为华为华为",1), ("小米", "小米科技有限公司", 50, "are you ok?",1);
•代码
•创建品牌类
首先,先创建一个brand类(so easy),记得重写一下toString方法方便输出
package JDBCtest; /* * 品牌 */ public class Brand { // id 主键 private int id; // 品牌名 private String brand_name; // 公司名 private String company_name; // 排序 private int ordered; // 描述 private String description; // 状态 0:禁用 1:启用 private Integer statu;// 包装类默认为null,不会影响数据, 建议使用包装类 public void setId(int id) { this.id = id; } public void setBrand_name(String brand_name) { this.brand_name = brand_name; } public void setCompany_name(String company_name) { this.company_name = company_name; } public void setOrdered(int ordered) { this.ordered = ordered; } public void setDescription(String description) { this.description = description; } public void setStatu(Integer statu) { this.statu = statu; } public int getId() { return id; } public String getBrand_name() { return brand_name; } public String getCompany_name() { return company_name; } public int getOrdered() { return ordered; } public String getDescription() { return description; } public Integer getStatu() { return statu; } @Override public String toString() { String s = "Brand{" + "id=" + id + ",brand_name=" + brand_name + ",company_name=" + company_name + ",ordered=" + ordered + ",description" + description + ",status=" + statu + "}"; return s; } }
•增删改查操作
重头戏开始,其实四个操作代码差不多,主要是sql语句不同,具体步骤如下:
1. 加载Connection
•加载配置文件
•获取连接池对象
•获取数据库连接
2.Sql语句
3. 获取PreparedStatement对象
4. 设置参数
5. 执行Sql语句
6. 处理结果
7. 释放资源
•先以查询brand表全部数据为例:
上一篇博客已经给出加载Connection的代码,这里就不再多说。
使用PreparedStatement对象是为了防止SQL注入,也已经熟练使用了。
所以这个操作就是前几篇博客的一个综合运用。
查询全部 Select * from brand
/* * 查询全部 */ public static void SelectAll() throws Exception { // 1.加载connection // 加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("druid.properties")); // 获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); // 获取数据库连接 Connection conn = dataSource.getConnection(); // 2.SQL语句 String sql = "Select * from brand"; // 3.获取preparedStatement对象 PreparedStatement pstmt = conn.prepareStatement(sql); // 4.设置参数 //虽然这个查询不需要设置参数 // 5.执行SQL ResultSet rs = pstmt.executeQuery(); // 6.处理结果 ArrayListalist = new ArrayList (); while (rs.next()) { Brand b = new Brand(); b.setId(rs.getInt(1)); b.setBrand_name(rs.getString(2)); b.setCompany_name(rs.getString(3)); b.setOrdered(rs.getInt(4)); b.setDescription(rs.getString(5)); b.setStatu(rs.getInt(6)); alist.add(b); } for (Brand b : alist) { System.out.println(b.toString()); } // 7.释放资源 rs.close(); pstmt.close(); conn.close(); }
结果:
•添加数据:
和上述步骤相同,改变Sql语句,添加数据:Insert into brand(brand_name,company_name,ordered,description,statu) values(?,?,?,?,?)
注意id是自动生成,所以这里不写id(默认补充),从brand_name开始,接下来给preparedStatement对象使用setXxx()方法设置参数
/* * 增 */ public void Addtest() throws Exception { // 1.加载connection // 加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("druid.properties")); // 获取数据库连接池 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); // 获取conn Connection conn = dataSource.getConnection(); // 2.SQL语句 String sql = "Insert into brand(brand_name,company_name,ordered,description,statu) values(?,?,?,?,?)"; // 3.获取pstmt PreparedStatement pstmt = conn.prepareStatement(sql); // 完善sql语句 Scanner sc = new Scanner(System.in); String bname = sc.next(); String cname = sc.next(); int ordered = sc.nextInt(); String description = sc.next(); int statu = sc.nextInt(); pstmt.setString(1, bname); pstmt.setString(2, cname); pstmt.setInt(3, ordered); pstmt.setString(4, description); pstmt.setInt(5, statu); // 4.执行sql pstmt.executeUpdate(); SelectAll(); // 5.释放资源 pstmt.close(); conn.close(); }
例:添加一条(香飘飘,香飘飘,2,绕地球3圈,0)
再增一条(华米,华米,1,华为和小米,1)
查看数据库
•删除数据:
删除数据:delete from brand where id=?
这里是用id删除,也可以换成其他属性
/* * 删 */ public void DeleteTest() throws Exception { // 1.加载connection // 加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("druid.properties")); // 获取数据库连接池 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); // 获取conn Connection conn = dataSource.getConnection(); // 2.sql语句 String sql = "delete from brand where id=?"; // 3.创建pstmt PreparedStatement pstmt = conn.prepareStatement(sql); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); pstmt.setInt(1, num); // 4.执行sql pstmt.executeUpdate(); SelectAll(); // 5.释放资源 pstmt.close(); conn.close(); }
删除id=4
•模糊查询:
模糊查询我做的是品牌名的模糊查询,也可以改成其他或者多个属性的
模糊查询:Select * from brand where brand_name like ?
注意模糊查询时 %要放在setXxx()方法里!(这里我就错了,后来百度出来的....)
public void SelectTest() throws Exception { // 1.加载connection // 加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("druid.properties")); // 获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); // 获取数据库连接 Connection conn = dataSource.getConnection(); // 2.SQL语句 String sql = "Select * from brand where brand_name like ?"; // 3.获取preparedStatement对象 PreparedStatement pstmt = conn.prepareStatement(sql); // 4.设置参数 Scanner sc = new Scanner(System.in); String bname = sc.next(); pstmt.setString(1, "%" + bname + "%"); //注意这里 // 5.执行SQL ResultSet rs = pstmt.executeQuery(); // 6.处理结果 ArrayListalist = new ArrayList (); while (rs.next()) { Brand b = new Brand(); b.setId(rs.getInt(1)); b.setBrand_name(rs.getString(2)); b.setCompany_name(rs.getString(3)); b.setOrdered(rs.getInt(4)); b.setDescription(rs.getString(5)); b.setStatu(rs.getInt(6)); alist.add(b); } for (Brand b : alist) { System.out.println(b.toString()); } // 7.释放资源 rs.close(); pstmt.close(); conn.close(); }
查询:华
ok!✿✿ヽ(°▽°)ノ✿结束