java使用原生MySQL实现数据的增删改查以及数据库连接池技术
一、工具类及配置文件准备工作
1.1 引入jar包
使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
1.2 jdbc.properties文件配置
在resources文件夹根目录,新增jdbc.properties配置文件,内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
user=root
password=123456
1.3 JDBCUtils工具类
在java文件夹中新增 util --> JDBCUtils.java 类,该类中获取jdbc.properties中的值。
JDBCUtils工具类主要作用是简化获取MySQL配置文件、关闭资源。
private static String url;
private static String user;
private static String password; static {
Properties properties = new Properties();
try {
properties.load(Mytest.class.getClassLoader().getResourceAsStream("jdbc.properties"));
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
Class.forName(properties.getProperty("driver"));
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
// 1.获取jdbc.properties配置文件中的数据库连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
// 5.定义关闭资源的方法
public static void close(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {}
}
}
public static void close(Connection conn, Statement stmt) {
close(conn, stmt, null);
}
二、原生MySQL实现增删改查
2.1 语法说明
1、通过Connection获取数据库连接对象;
2、定义sql语句(一般可以在Navicat中直接执行);
3、通过获取执行sql的对象 --PreparedStatement;
4、执行sql语句:增删改使用conn的executeUpdate方法(成功返回值为int=1),查询使用executeQuery方法(返回值为ResultSet,建议使用下文的查询方法操作);
5、释放资源(执行SQL时定义的stmt、获取连接时的conn)。
2.2 新增数据 -- insertUser()
在java文件夹中新增MyService.java类,将获取数据库连接抽取出来,方法如下:
private Connection conn;
{
try {
conn = JDBCUtils.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
在MyService.java类中新增 insertUser方法,具体如下
String sql = "INSERT INTO user values (4, '腾讯科技', 'xinfeng37812', '2009-11-16', '广东省深圳市')";
PreparedStatement stmt = conn.prepareStatement(sql);
int count = stmt.executeUpdate(sql);
JDBCUtils.close(conn, stmt);
return count;
2.2 修改数据 -- updateById()
String sql = "update user set password = 567875 where id = 2";
PreparedStatement stmt = conn.prepareStatement(sql);
int count = stmt.executeUpdate(sql);
JDBCUtils.close(conn, stmt);
return count;
2.3 删除数据 -- deleteUser()
String sql = "delete from user where id = 5";
PreparedStatement stmt = conn.prepareStatement(sql);
int count = stmt.executeUpdate(sql);
JDBCUtils.close(conn, stmt);
return count;
2.4 查询数据 -- findAll()
前提:新建 entity --> User.java 实体类,并获取getter&setter、toSting方法;
String sql = "select * from user";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet count = stmt.executeQuery(sql);
User user = null;
List<User> arr = new ArrayList<>();
while(count.next()){
Long id = count.getLong("id");
String username = count.getString("username");
String password = count.getString("password");
Date birthday = count.getDate("birthday");
String address = count.getString("address");
user = new User();
user.setId(id);
user.setUsername(username);
user.setPassword(password);
user.setBirthday(birthday);
user.setAddress(address);
arr.add(user);
}
JDBCUtils.close(conn, stmt, count);
return arr;
三、原生MySQL语句的缺点及数据库连接池
3.1 原生MySQL语句的缺点
1、每一次查询都要新增通道,关闭通道,效率太低。实际项目中都会用数据库连接池进行优化;
2、实际项目中使用最多的就是查询,但是将查询的ResultSet结果,进行封装的代码过于臃肿。
3.2 c3p0和druid连接池技术
数据库连接池其实就是一个容器,在java中,使用getConnection方法代替Connection,实现节约资源,用户访问高效目的,但是代码本身与原生并无本质的减少。
3.2.1 c3p0使用
需要导入两个jar包,maven引用方式如下:
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.</version>
</dependency>
配置文件必须在resources文件夹根目录,且名称必须为 c3p0.properties 或者 c3p0-config.xml,因此无需手动加载配置文件:
//1.创建数据库连接池对象
DataSource ds = new ComboPooledDataSource();
//2. 获取连接对象
Connection conn = ds.getConnection();
3.2.2 druid使用
只需要一个jar包,maven引入方式如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
配置文件名称任意,但需要是.properties形式的,因此需要获取配置文件位置,具体使用方式如下:
//1.加载配置文件
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//3.获取连接
Connection conn = ds.getConnection();
3.3 JDBCUtils工具类的改造
以使用druid为例,在使用数据库连接池时的工具类,主要有三种方法:
1. 获取连接方法:通过数据库连接池获取连接
2. 释放资源
3. 获取连接池的方法
public class JDBCUtils {
private static DataSource ds;
static {
try {
Properties pro = new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
public static void close(Statement stmt, Connection conn) {
close(null, stmt, conn);
}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();// 归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static DataSource getDataSource() {
return ds;
}
}
java使用原生MySQL实现数据的增删改查以及数据库连接池技术的更多相关文章
- Node.js + MySQL 实现数据的增删改查
通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-cru ...
- MySQL 简洁 数据操作 增删改查 记不住的 看这里把
1.库操作====================== 1.创建 CREATE DATABASE DB2 charset utf8; 2.删除 DROP DATABASE db2; 3.使用(进入) ...
- MySQL表数据的增删改查
1.增 INSERT INTO tb VALUES(v1,v2,v3...); INSERT INTO tb (field1,field2...) VALUES(v1,v2...); INSERT I ...
- Vc数据库编程基础MySql数据库的表增删改查数据
Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...
- mysql学习笔记一 —— 数据的增删改查
1.连接mysql mysql 直接回车(是以root身份,密码空,登陆的是本机localhost) [root@www mysql]# mysql -uroot -p123 -S /var/lib/ ...
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- Mybatis框架基于注解的方式,实对数据现增删改查
编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...
- MVC模式:实现数据库中数据的增删改查功能
*.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...
- Mybatis实现数据的增删改查
Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...
随机推荐
- maven远程部署到tomcat8服务器
maven远程部署到tomcat8服务器 环境准备 linux服务器一台 服务器安装JDK 服务器安装Tomcat 服务器Tomcat8配置 添加Tomcat权限 配置文件路径: tomcat/con ...
- springIOC源码接口分析(八):AutowireCapableBeanFactory
参考博文: https://blog.csdn.net/f641385712/article/details/88651128 一 接口规范 从宏观上看,AutowireCapableBeanFact ...
- 推荐一本书学习springcloud书籍的SpringCloud微服务全栈技术与案例解析
整本书还算是挺详细的,基本大部分轮子都讲到了,唯一不足就是版本比较旧,而且springcloud 版本现在迭代这么快 很多内容其实高版本中完全没有了,得自己敲代码多采坑 前面基本章节其实可以大致略过一 ...
- oracle11G 已开启监听,但远程连接依旧无监听解决过程
1.连接数据库显示无监听程序,首先查看服务器的oracle监听服务是否开启,服务名称:OracleOraDb11g_home1TNSListener(具体环境中可能不完全一样,但是认准TNSListe ...
- 使用 web3D 技术的风力发电场展示
前言 风能是一种开发中的洁净能源,它取之不尽.用之不竭.当然,建风力发电场首先应考虑气象条件和社会自然条件.近年来,我国海上和陆上风电发展迅猛.海水.陆地为我们的风力发电提供了很好地质保障.正是 ...
- PE可执行文件加载器
PE文件加载器 模仿操作系统,加载pe文件到内存中 该项目主要是为了检测pe的学习程度,是否都完全理解了.当然没有完全理解 实现功能的如下: 模仿操作系统,加载pe文件到内存中,然后执行待执行的pe文 ...
- HDU_2579_bfs
http://acm.split.hdu.edu.cn/showproblem.php?pid=2579 简单bfs题,刚开始在纠结怎么存放vis,因为步数可能有几百步,这么多格子开数组的话也太多了, ...
- 曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析【上】)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 如何查看SparkSQL 生成的抽象语法树?
前言 在<Spark SQL内核剖析>书中4.3章节,谈到Catalyst体系中生成的抽象语法树的节点都是以Context来结尾,在ANLTR4以及生成的SqlBaseParser解析SQ ...
- SpringBoot嵌入式Servlet配置原理
SpringBoot嵌入式Servlet配置原理 SpringBoot修改服务器配置 配置文件方式方式修改,实际修改的是ServerProperties文件中的值 server.servlet.con ...