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. 数据库数据 ...
随机推荐
- JUC并发工具类之 CountDownLatch等待多线程完成
上篇JUC同步工具之Semaphore - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)示例中,资源释放一个线程就可以退出然后另一个线程可以使用了,那如果需要所有规定数量的资源同时释放了才 ...
- rinetd基于内网TCP端口转发
在Linux系统中大多数情况选择用iptables来实现端口转发,iptables虽然强大,但配置不便,而且新手容易出错.在此分享另一个TCP/UDP端口转发工具rinetd,rinetd体积小巧,配 ...
- RFC2544丢包率测试——信而泰网络测试仪实操
文章关键词:RFC2544.丢包率.吞吐量. 丢包率概述: 丢包率(Frame Loss Rate)测试的目的是确定DUT在不同的负载和帧长度条件下的丢包率.在稳定负载下,由于网络设备资源缺乏,应该正 ...
- 可视化里程碑:可拖拽使用的可视化BI工具
在数据量越来越大的今天,如何利用好数据,更好的为人类社会服务,成为人们所关心的话题,而其中数据可视化作为最后一个环节,也是人们最为直观的感受,自然而然备受重视.同质化的应用越来越多,应用开发者也开始在 ...
- c# 编程学习(三)
方法是具名的语句序列 returnType methodName ( parameterList ) { // 这里添加方法主体语句 } returnType(返回类型)是类型名称,指定方法返回的数 ...
- 【c#新手学习 练习 案例】 阶段项目一:开发团队调度软件
案例是模仿java https://blog.csdn.net/bjfu170203101/article/details/109322590 改用C#:开发环境 vs2022/vscode .n ...
- JVM学习笔记(详细)
目录 01 JVM与Java体系结构 简介 JVM整体架构,HotSpot java代码执行流程 JVM架构模型 JVM生命周期 JVM发展历程 02 类加载子系统 JVM细节版架构 类加载器的作用 ...
- C#基于Redis实现分布式锁
[本博客属于原创,如需转载,请注明出处:https://www.cnblogs.com/gdouzz/p/12097968.html] 最近研究库存的相关,在高峰期经常出现超卖等等情况,最后根据采用是 ...
- mysql 语句的使用
查看数据库 show databases; use 数据库名: show tables; //显示数据库的表名describe 表名; //显示某表的字段, 建表模板 这是为了清楚直观,再mysql行 ...
- 修改Ehcache缓存中取到的值,缓存中的值也被修改了
问题现象 我们从Ehcache中取出缓存的对象,之后将对象中的属性进行了修改使用.等再次从缓存中拿到对象后,发现对象的值变成了上一次调用修改后的对象了. 原因 Ehcache中缓存的是原对象的引用,所 ...