JDBC-Druid增删改查
由于刚学完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!✿✿ヽ(°▽°)ノ✿结束
JDBC-Druid增删改查的更多相关文章
- JDBC基础学习(一)—JDBC的增删改查
一.数据的持久化 持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各 ...
- Oracle使用JDBC进行增删改查 表是否存在
Oracle使用JDBC进行增删改查 数据库和表 table USERS ( USERNAME VARCHAR2(20) not null, PASSWORD VARCHAR2(20) ) a ...
- 纯Java JDBC连接数据库,且用JDBC实现增删改查的功能
Java JDBC连接数据库 package cn.cqvie.yjq; import java.sql.*; /** * 注册数据库的驱动程序,并得到数据库的连接对象 * @author yu * ...
- Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用
前面做了一个非常垃圾的小demo,真的无法直面它,菜的抠脚啊,真的菜,好好努力把.菜鸡. --WH 一.JDBC是什么? Java Data Base Connectivity,java数据库连接,在 ...
- MySQL的安装+可视化工具+JDBC的增删改查
1.Mysql和可视化工具的安装 安装包网上有很多资源.这里推荐一个我一直在用的学习网站,上面有提供安装包和详细的说明. http://how2j.cn/k/mysql/mysql-install/3 ...
- 【温故知新】Java web 开发(四)JSTL 与 JDBC 的增删改查
本篇开始使用 jstl 这个 jsp 的标签库,在同一个 Servlet 中实现处理 CRUD 请求,以及使用 jdbc 数据库基本操作.然后你会发现 Servlet 和 jdbc 还是有很多不方便之 ...
- MySQL之JDBC编程增删改查
MySQL之JDBC 一.JDBC是什么 Java DatabaseConnectivity (java语言连接数据库) 二.JDBC的本质 JDBC是SUN公司制定的一套接口(interface). ...
- Oracle使用JDBC进行增删改查
数据库和表 create table USERS( USERNAME VARCHAR2(20) not null, PASSWORD VARCHAR2(20))alter table USERS ...
- jqGrid(struts2+jdbc+jsp)增删改查的例子
前几日一直在找关于Java操作jqgrid返回json的例子,在网上也看了不少东西,结果都没几个合理的,于是本人结合网上的零散数据进行整理,完成了 一个比较完整的jqgrid小例子,考虑到还有很多 ...
- JDBC简单增删改查实现(单表)
0.准备工作 开发工具: MySQL数据库, intelliJ IDEA2017. 准备jar包: mysql-connector-java-5.1.28-bin.jar(其他均可) 1. 数据库数据 ...
随机推荐
- .NET CORE 鉴权
基础信息 1.什么是鉴权授权? 鉴权是验证用户是否拥有访问系统的权利,授权是判断用户是否有权限做一些其他操作. 2.传统的Session 和Cookie 主要用于无状态请求下的的用户身份识别,只不过S ...
- node + express 搭建服务器,修改为自动重启服务器
1.使用express搭建一个项目,步骤如下(安装node步骤已省略) a.全局安装express-generator和express npm i express-generator -g npm i ...
- 在k8s中使用性能分析神器:arthas
Arthas(阿尔萨斯)是阿里巴巴开源的性能分析神器. k8s中使用arthas的三种方式 [bak]https://www.cnblogs.com/uncleyong/p/15498842.html ...
- java操作excel(通过POI)
读取所有数据,并打印出来,表单名:testcase 定义实体类(说明:这里单纯打印读取的excel内容,未用到实体类,反射的时候才会用到实体类) package com.qzcsbj; /** * @ ...
- C# 枚举器(enumerator)
总结: 1.枚举器就像是序列中的"游标"或"书签".可以有多个"书签",移动其中任何一个都可以枚举集合,与其他枚举器互不影响.用来遍历数据结 ...
- 【C# 线程】线程局部存储(TLS) 实战部分 ThreadStatic|LocalDataStoreSlot|ThreadLocal<T>
往袋子里面装苹果 错误案例示范 关于C#多线程的文章,大部分都在讨论线程的起停或者是多线程同步问题.多线程同步就是在不同线程中访问同一个变量(一般是线程工作函数外部的变量),众所周知在不使用线程同步的 ...
- 使用http-server 快速的开启一个静态服务器
在本地安装好了nodejs后我们可以使用一个命令快速开启一个服务器: 命令界面进入到根目录(存放静态网页的文件夹) //方式一 npx http-server //默认 8080端口 //方式二 np ...
- Idea项目添加新文件后运行出现404问题
今天在项目里添加了一个新的html文件,然后运行项目页面跳转出现了404问题,找不到页面,经过我的一番查找,我注意到了Idea项目下有一个target文件,然后上网搜了解到这个target文件是mav ...
- Hive udf 或者 spark maven打包问题
正常打包maven pom配置如下 <properties> <project.build.sourceEncoding>UTF8</project.build.sour ...
- tp6 验证方式
think验证方式