增删改查——DBUtils
利用QueryRunner类实现对数据库的增删改查操作,需要先导入jar包:commons-dbutils-1.6。利用QueryRunner类可以实现对数据步骤的简化。
1、添加
运用JDBC工具类实现连接:
package JDBCUtils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
private static Connection con;
private static String driver;
private static String url;
private static String username;
private static String password;
static {// 静态代码块只执行一次,获取一次信息即可
try {
readConfig();
Class.forName(driver);
con = DriverManager.getConnection(url, username, password);
} catch (Exception ex) {
throw new RuntimeException("数据库连接失败");
}
}
/*
* getClassLoader();返回该类的加载器
* getResourceAsStream();查找具有给定名称的资源
*/
private static void readConfig() {
InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("JDBC.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}
driver = pro.getProperty("driver");
url = pro.getProperty("url");
username = pro.getProperty("username");
password = pro.getProperty("password");
}
public static Connection getConnection() {
return con;
}
public static void close(Connection con) {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("con流关闭异常!");
}
}
}
public static void close(Connection con, Statement stat) {
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("stat流关闭异常!");
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("con流关闭异常!");
}
}
}
public static void close(Connection con, Statement stat, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("rs流关闭异常!");
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("stat流关闭异常!");
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("con流关闭异常!");
}
}
}
}
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import JDBCUtils.JDBCUtils;
public class add {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "INSERT INTO student(studentno,sname,sex,birthday,classno,point,phone,email) VALUES(?,?,?,?,?,?,?,?)";
Object[] ", "Jack", "男", "1988-12-01",
", "Tom.@3218n.com" };
int num = qr.update(con, sql, params);
System.out.println("添加了" + num + "行");
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
2、删除
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import JDBCUtils.JDBCUtils;
public class DeleteDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "DELETE from Student where sname =?";
Object[] delete = { "Tom" };
qr.update(con, sql, delete);
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
3、修改
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import JDBCUtils.JDBCUtils;
public class UpdateDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Update Student set classno=? Where sname='韩吟秋'";
Object[] update = { " };
qr.update(con, sql, update);
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
4、查询
(1)
ArrayHandler: 将结果集的第一行存储到Object[]数组中
ArrayListHandler: 将结果集的每一行存储到Object[]数组中
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import JDBCUtils.JDBCUtils;
public class SeleteDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Select * from Student where studentno=?";
Object[] };
List<Object[]> list = qr.query(con, sql, new ArrayListHandler(),
select);
// 将记录封装到一个装有Object[]的List集合中
for (Object[] arr : list) {
System.out.println(Arrays.toString(arr));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
(2)
BeanHandler:结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler:结果集中每一条记录封装到javaBean中,再将javaBean封装到list集合中。
public class Student {
private String studentno;
private String sname;
private String sex;
private String birthday;
private String classno;
private String point;
private String phone;
private String email;
public String getStudentno() {
return studentno;
}
public void setStudentno(String studentno) {
this.studentno = studentno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Student [studentno=" + studentno + ", sname=" + sname + ", sex="
+ sex + ", birthday=" + birthday + ", classno=" + classno
+ ", point=" + point + ", phone=" + phone + ", email=" + email
+ "]";
}
public String getClassno() {
return classno;
}
public void setClassno(String classno) {
this.classno = classno;
}
public String getPoint() {
return point;
}
public void setPoint(String point) {
this.point = point;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import JDBCUtils.JDBCUtils;
public class SeleteDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Select * from Student where studentno=?";
Object[] };
List<Student> list = qr.query(con, sql,new BeanListHandler<Student>((Student.class)), select);
// 将记录封装到一个装有Object[]的List集合中
for (Student s : list) {
System.out.println(s);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
(3)ColumnListHandler将结果集中指定的列封装到List集合。
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import JDBCUtils.JDBCUtils;
public class SeleteDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Select * from Student where studentno=?";
Object[] };
List<String> list = qr.query(con, sql,new ColumnListHandler<String>(), select);
// 将记录封装到一个装有Object[]的List集合中
for (String str: list) {
System.out.println(str);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
查询学生的学号:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import JDBCUtils.JDBCUtils;
public class SeleteDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Select studentno from Student ";
Object[] select = {};
List<String> list = qr.query(con, sql,new ColumnListHandler<String>(), select);
// 将记录封装到一个装有Object[]的List集合中
for (String str: list) {
System.out.println(str);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
(4)ScalarHandler返回一个数据
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import JDBCUtils.JDBCUtils;
public class SeleteDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "SELECT COUNT(sname) FROM Student";
Object[] select = {};
long count= qr.query(con, sql, new ScalarHandler<Long>(), select);
System.out.println(count);
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
(5)MapHandler:将结果集的第一行封装到Map集合中
MapListHandler:将结果集的多条记录封装到一个集合中
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
import JDBCUtils.JDBCUtils;
public class SeleteDemo {
public static void main(String[] args) {
Connection con = null;
try {
con = JDBCUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Select studentno from Student ";
Object[] select = {};
List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler(),select);
// 将记录封装到一个装有Object[]的List集合中
for (Map<String,Object> map : list) {
for(String key : map.keySet()){
System.out.print(key+"..."+map.get(key));
}
System.out.println();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
JDBCUtils.close(con);
}
}
增删改查——DBUtils的更多相关文章
- dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)
jsp的三个指令为:page,include,taglib... 建立一个jsp文件,建立起绝对路径,使用时,其他jsp文件导入即可 导入方法:<%@ include file="/c ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- mvc模式jsp+servel+dbutils oracle基本增删改查demo
mvc模式jsp+servel+dbutils oracle基本增删改查demo 下载地址
- 开源工具DbUtils的使用(数据库的增删改查)
开源工具DbUtils的使用(数据库的增删改查) 一.DbUtils简介: DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果 ...
- Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用
前面做了一个非常垃圾的小demo,真的无法直面它,菜的抠脚啊,真的菜,好好努力把.菜鸡. --WH 一.JDBC是什么? Java Data Base Connectivity,java数据库连接,在 ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- 使用DbUtils实现增删改查——ResultSetHandler 接口的实现类
在上一篇文章中<使用DbUtils实现增删改查>,发现运行runner.query()这行代码时.须要自己去处理查询到的结果集,比較麻烦.这行代码的原型是: public Object q ...
- Android 利用xUtils框架实现对sqllite的增删改查
首先下载xUtils,下载地址:https://github.com/wyouflf/xUtils 把下载好的文件压缩,把里面的jar包拷进项目中如图所示: 这里新建一个User类进行测试增删改查 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- 关于阿里云Mysql分页查询不走索引的问题
需要修改阿里云中的MYSQL 配置参数 : eq_range_index_dive_limit 阿里云上默认是 10 , 这个参数 表示 in 查询 条件超过 10 个 就不走索引,走全表扫描.如果我 ...
- Selenium+java - Page Object设计模式
前言 Page Object(页面对象)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一 ...
- springboot + jedisCluster
如果使用的是redis2.x,在项目中使用客户端分片(Shard)机制. 如果使用的是redis3.x中的集群,在项目中使用jedisCluster. 1.项目结构 2.pom.xml 1 <? ...
- springBoot框架分布式部署定时任务重复执行之解决方案
问题描述: 在集群模式部署服务端时,会出现所有的定时任务在各自的节点处均会执行一遍,这显然不符合实际的开发场景,针对这种问题,本文给出一种springboot集成shedlock的解决方案 第一步:引 ...
- 关于多线程中sleep、join、yield的区别
好了.说了多线程,那就不得不说说多线程的sleep().join()和yield()三个方法的区别啦 1.sleep()方法 /** * Causes the currently executing ...
- Java任务调度框架Quartz教程实例
介绍: Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. 核心概念 Quar ...
- 迁移桌面程序到MS Store(10)——在Windows S Mode运行
首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...
- I-Just Jump_2019牛客暑期多校训练营(第八场)
题目链接 Just Jump 题意 有L+1个点,初始在第0个点上,要跳到第L个点,每次至少跳d格,也就是在点x至少要跳到x+d,且有m个限制 \((t_i, p_i)\)指跳第\(t_i\)次不能跳 ...
- 洛谷P2216: [HAOI2007]理想的正方形 单调队列优化DP
洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一 ...
- 杭电多校第二场 1005 hack it
题意: 构造一个n*n 的 01 矩阵, 0 < n < 2001, 矩阵需要满足没有一个子矩阵的4个角都是1,并且矩阵内1的个数至少有85000个. 题解:数论构造题 参考From 代 ...