由于刚学完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.处理结果
ArrayList<Brand> alist = new ArrayList<Brand>();
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.处理结果
ArrayList<Brand> alist = new ArrayList<Brand>();
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!✿✿ヽ(°▽°)ノ✿结束

最新文章

  1. js最详细的基础,jquery 插件最全的教材
  2. css技巧
  3. 常见MFC UI界面库
  4. android 67 生成和解析xml
  5. 趣谈iOS运行时的方法调用原理
  6. (php)生成指定个数的随机红包
  7. java的表达式
  8. linux软与硬接线连接
  9. KB奇遇记(10):终章
  10. Python javascript操作DOM
  11. java_web学习(九) PreparedStatement动态参数的引入
  12. 在MAC电脑上抓取iphone数据包的方法
  13. Codeforces Round #396(Div. 2) A. Mahmoud and Longest Uncommon Subsequence
  14. [转]数据库中间件 MyCAT源码分析——跨库两表Join
  15. Markdown 指南
  16. RedHat7安装vmware虚拟机启动报错
  17. jupyter notebook 小笔记
  18. elk之[logstash-input-file]插件使用详解
  19. 学习生活必须知道的网站或者App
  20. kafka监控工具

热门文章

  1. 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__的原理介绍
  2. excel写入数值型内容
  3. 【测试必备】k8s基本使用(更新中。。。)
  4. VBS病毒实验
  5. 学习Spring5必知必会(7)~Spring tx
  6. starter
  7. mapreduce 中 groupingComparator 用法
  8. Anaconda:指令 安装、更新、卸载库
  9. Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则
  10. Python 学习路线(2022)