java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...

一、工具类及配置文件准备工作

1.1 引入jar包

使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下:

mysql

mysql-connector-java

5.1.48

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 staticString url;private staticString user;private staticString password;static{

Properties properties= newProperties();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() throwsSQLException {returnDriverManager.getConnection(url, user, password);

}//5.定义关闭资源的方法

public static voidclose(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 voidclose(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类,将获取数据库连接抽取出来,方法如下:

privateConnection 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 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= newUser();

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引用方式如下:

com.mchange

c3p0

0.9.5.5

com.mchange

mchange-commons-java

0.2.15

配置文件必须在resources文件夹根目录,且名称必须为 c3p0.properties 或者 c3p0-config.xml,因此无需手动加载配置文件:

//1.创建数据库连接池对象

DataSource ds = newComboPooledDataSource();//2. 获取连接对象

Connection conn = ds.getConnection();

3.2.2 druid使用

只需要一个jar包,maven引入方式如下:

com.alibaba

druid-spring-boot-starter

1.1.9

配置文件名称任意,但需要是.properties形式的,因此需要获取配置文件位置,具体使用方式如下:

//1.加载配置文件

Properties pro = newProperties();

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 classJDBCUtils {private staticDataSource ds;static{try{

Properties pro= newProperties();

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() throwsSQLException {returnds.getConnection();

}public static voidclose(Statement stmt, Connection conn) {

close(null, stmt, conn);

}public static voidclose(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 staticDataSource getDataSource() {returnds;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

64位Visual Studio 2022,微软在下一盘大棋!

有没有跟我一样奇怪过&#xff0c;都2021年了&#xff0c;用的还是VS2019&#xff1f;原来微软是憋大招去了&#xff0c;4月18号Amanda的一篇博文宣布了一则重磅消息——Visual Studio 2022 首个预览版将于今年夏季发布 &#xff0c;并且终于成为万众期待的 64 位版&#xff01…

如何添加自定义icon

(1)一般命令行程序编译后是一个方框图标。 我们可以自定义&#xff1a; Project -> Add to project -> New... 选择Resource Script&#xff0c;新建一个资源脚本&#xff0c;这样左面就多了一个资源视图 然后Project -> Add to project -> File&#xff0c;加进…

mysql 5.7.17 源码安装_mysql5.7.17源码安装

创建用户和目录groupadd mysqluseradd -r -g mysql mysqlmkdir -p /data/mysql/standby/datamkdir -p /data/mysql/standby/tmpmkdir -p /data/mysql/standby/elogmkdir -p /data/mysql/standby/blogchown -R mysql:root /data/mysql配置yum源cd /etc/yum.repos.d/rm -rf *vi c…

跟几个程序员聊了聊他们的每月薪资收入

阅读本文大概需要6分钟。我一直有一个技术小群&#xff0c;这个群最初是在360当新人入职导师带的几个人&#xff0c;和大家挺聊得来就建了一个群&#xff0c;没想到居然存在了6年之久。压力大的时候就在群里和大家相互调侃或者拉拉家常&#xff0c;偶尔谁跳槽了也会喷喷前东家&…

开通博客

今天注册了博客园并且开通了博客&#xff01; 我想用博客来记录并分享我学习编程过程和知识。 希望大家予以支持和帮助。转载于:https://www.cnblogs.com/crislina/archive/2012/01/28/2330629.html

【重磅】MIT发布2018年“全球十大突破性技术”

“有些技术已经应用多年&#xff0c;有些则是意外之喜。无论如何&#xff0c;以下是我们认为将在未来的几年对我们的工作和生活产生巨大影响的技术突破。”北京时间2018年2月21日&#xff0c;《麻省理工科技评论》揭晓了2018年“全球十大突破性技术”&#xff0c;这份全球新兴科…

mysql必须的组件_mysql innodb的重要组件

innodb包涵如下几个组件一、innodb_buffer_pool&#xff1a;1  它主要用来缓存数据与索引(准确的讲由于innodb中的表是由聚集索引组织的&#xff0c;所以数据只不是过主键这个索引的叶子结点)。二、change buffer:1  如果更新语句要更新二级索引的记录&#xff0c;但是记录…

[Stardust]星尘配置中心

在分布式系统开发中&#xff0c;配置中心必不可少。在中通几年时间里&#xff0c;为了配合大数据计算平台&#xff0c;统一管理数百个微小应用&#xff0c;设计了一套轻量级配置中心。星尘配置中心在其理念基础上改进&#xff0c;针对中小团队而全新设计&#xff01;源码&#…

oracle中v$database视图详解

SQL> desc v$database 名称 是否为空? 类型 ----------------- -------- ------------ DBID NUMBER NAME VARCHAR2(9) CREATED DATE RESETLOGS_CHANGE# NUMBER RESETLOGS_T…

大数据可视化设计到底是啥,该怎么用

大数据可视化是个热门话题&#xff0c;在信息安全领域&#xff0c;也由于很多企业希望将大数据转化为信息可视化呈现的各种形式&#xff0c;以便获得更深的洞察力、更好的决策力以及更强的自动化处理能力&#xff0c;数据可视化已经成为网络安全技术的一个重要趋势。文章目录一…

九度 1376 最近零子序列

http://ac.jobdu.com/problem.php?id1376 N^2的算法超时 优化算法想了好久没想出来&#xff0c;就当是学习一下STL的set了吧 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 #include <set> 5 #include <iostream> 6 #defi…

WPF 如何实现颜色值拾取

WPF开发者QQ群&#xff1a; 340500857 前言如何进行颜色值拾取&#xff1f;这里采用的是调用WindowsAPI进行实现。吸取 沙漠尽头的狼 的建议多写一些文字进行描述。效果图如下&#xff1a;第一步 注册WindowsAPI 代码如下&#xff1a;[DllImport("user32.dll")]stati…

大文本导入mysql_大文本数据,导入导出到数据库

大文本数据&#xff0c;导入到数据库240w的数据&#xff0c;利用plsql的文本导入器&#xff0c;导了一个半小时&#xff0c;且数据出现缺失。两种方式导入到数据库一&#xff0c;使用sql load创建表create table ext_gv_tmp_amazon_sku(skucode varchar2(255 char),eancode var…

仿Google+相册的动画

在使用Google的时候&#xff0c;查看某一相册&#xff0c;会经常看到&#xff0c;如下图所示的动画效果。 鼠标移入、移出时均有动画效果&#xff0c;咋一看估计是使用了css3的transform属性来实现动画效果的。 在网上搜索“Google 相册 效果”的时候发现有人使用CSS3做了这样的…

看见到洞见之引子(二)机器学习算法

《看见到洞见》系列文章汇聚、分享的是绿盟科技创新中心对于数据分析在安全领域应用的技战术思考与经验&#xff0c;力求由浅入深层次递进&#xff0c;实战到方法论双线剖析。此文为系列文章之引子第二篇&#xff0c;深入浅出的对常用的数据分析和机器学习的算法进行介绍。在上…

mysql pmod项目_内置函数 - 数学函数 - 《Apache Doris 文档(201812)》 - 书栈网 · BookStack...

数学函数abs(double a)功能&#xff1a; 返回参数的绝对值返回类型&#xff1a;double类型使用说明&#xff1a;使用该函数需要确保函数的返回值是整数。acos(double a)功能&#xff1a; 返回参数的反余弦值返回类型&#xff1a;double类型asin(double a)功能&#xff1a; 返回…

gcc中常用的选项

开始学习在Linux下写程序&#xff0c;利用gcc进行编译的时候经常需要添加一些选项&#xff0c;为了便于查找&#xff0c;将这写常用的选项整理出来。GCC常用选项 -c 通知GCC取消链接步骤&#xff0c;即编译源码并在最后生成目标文件&#xff1b; -Dmacro 定义指定的宏&am…

一图看懂 ASP.NET Core 中的服务生命周期

翻译自 Waqas Anwar 2020年11月8日的文章 《ASP.NET Core Service Lifetimes (Infographic)》 [1]ASP.NET Core 支持依赖关系注入&#xff08;DI&#xff09;软件设计模式&#xff0c;该模式允许我们注册服务、控制如何实例化这些服务并将其注入到不同的组件中。一些服务可以在…

看见到洞见之引子(一)机器学习算法

《看见到洞见》系列文章汇聚、分享的是绿盟科技创新中心对于数据分析在安全领域应用的技战术思考与经验&#xff0c;力求由浅入深层次递进&#xff0c;实战到方法论双线剖析。此文为系列文章之引子第一篇&#xff0c;深入浅出的对常用的数据分析和机器学习的算法进行介绍。文章…

支持向量回归代码_RDKit:基于支持向量回归(SVR)预测logP

RDKit一个用于化学信息学的python库。使用支持向量回归(SVR)来预测logP。 分子的输入结构特征是摩根指纹&#xff0c;输出是logP。代码示例&#xff1a;#导入依赖库import numpy as npfrom rdkit import Chemfrom rdkit.Chem.Crippen import MolLogPfrom rdkit import Chem, Da…