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. 数据库数据 ...
随机推荐
- MySQL表单查询
一.表单查询的语法 select 字段1.字段2....from 表名 where MySQL备份
- MyBatis缓存Cache包
Mybatis默认使用了一级缓存为数据查询提供效率,其底层数据结构为PerpetualCache.同时MyBatis不止实现了PerpetualCache,还有其他实现提供其他功能,如下: 可以从UM ...
- 关于tomcat 访问80端口失效 阿里云问题版
可能有朋友在配置完阿里云 配置好服务器发现 使用默认80端口访问网址失效 用8080依然失效 - -放心你用什么都会失效 并且你怎么杀接口也没用 答案就是 你的里面绝对没有80 和8080 你没 ...
- ORACLE-创建用户和表空间
/*分为四步 *//*第1步:创建临时表空间 */create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\ ...
- k8s家族Pod辅助小能手Init容器认知答疑?
k8s家族Pod辅助小能手Init容器认知答疑? k8s集群Init 容器是一种特殊容器,职责是在Pod的生命周期中作为应用容器的前置启动容器. 在很多应用场景中,在 Pod 内的应用容器正式启动之前 ...
- RFC2544时延测试——信而泰网络测试仪实操
关键词:RFC2544:时延测试:标记帧:储存转发时延:直通交换时延 时延概述: 时延也常被成为延时(latency),是指一个帧从源点到目的点的总传输时间,包括网络节点的处理时间和在传输介质上的传播 ...
- 详解用OpenCV绘制各类几何图形
摘要:本文详细介绍了OpenCV绘制几何图形的方法,利用cv2.line().v2.circle().cv2.rectangle().cv2.ellipse().cv2.polylines().cv2 ...
- 常用windows快捷键及cmd、dos命令
Windows常用快捷键 #Alt+F4:关闭窗口.网页 #ctrl+C:复制 #ctrl+V:粘贴 #ctrl+X:剪切 #ctrl+Z:撤销 #ctrl+A:全选 #ctrl+S:保存 #shif ...
- 为什么用Python,高级的Python是一种高级编程语言
Python特性 如果有人问我Python最大的特点是什么,我会毫不犹豫地告诉他:它简单易学,功能强大.作为一个纯自由软件,Python有许多优点: 很简单.基于"优雅".&quo ...
- 图解volatile
volatile是什么 出去面试的时候,很多面试官都会问你:说说你对volatile的理解. 下面我将用图的方式告诉大家,volatile是什么? 如上图所示:每个线程都有自己的工作内存,同时还能访问 ...