java-jdbc-druid
0、简介
- Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
- JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。
为了简化 开发人员的(对数据的统一)操作,提供了一个java操作数据库规范,对于开发人员来说,我们只需要掌握JDBC接口的操作即可;
1、添加驱动
<!-- 数据库驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
2、增加配置文件
className=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/wangdb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
user=admin
password=Admin@123
3、代码
public class JdbcDemo {
public static void main(String[] args) {
PreparedStatement statement = null;
Connection connection = null;
ResultSet set = null;
try {
// 1、加载配置文件
Properties props = new Properties();
props.load(new FileInputStream("properties.properties"));
String className = props.getProperty("className");
String url = props.getProperty("url");
String user = props.getProperty("user");
String password = props.getProperty("password");
// 2、加载驱动
Class.forName(className);
// 3、获取连接
connection = DriverManager.getConnection(url, user, password);
// 4、sql语句 可以通过
String sql =
"select t.Id, t.`NAME`,t.DEPT_NAME,t.ID_NO,t.CreateDate from user_info t where id=?";
// 5、获得Satement执行sql语句 或者 获得PrepareStatement执行sql语句
statement = connection.prepareStatement(sql);
// 6、设置参数,一个?对应一个值,不能有其他的关键字
statement.setObject(1, 1);
// 7、执行语句 executeUpdate:增删改 executeQuery:执行查询操作
set = statement.executeQuery();
// 8、从ResultSet中将数据传入到我们自己定义的对象中
while (set.next()) {
int id = set.getInt("id");
String name = set.getString("name");
String idNo = set.getString("ID_NO");
Date date = set.getDate("CreateDate");
Timestamp time = set.getTimestamp("CreateDate");
System.out.println("id:" + id);
System.out.println("name:" + name);
System.out.println("idNo:" + idNo);
System.out.println("date:" + date);
System.out.println("time:" + time);
System.out.println("---------------");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 9、关闭连接
try {
if (set != null) {
set.close();
}
Objects.requireNonNull(connection).close();
if (statement != null) {
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4、开启mysql预编译功能
- 连接参数增加
className=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/wangdb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&&useServerPrepStmts=true
user=admin
pass
5、打印mysql日志
修改 mysql.ini
[mysqld]
## 增加日志监控
log-output=FILE
general-log=1
general_log_file="D:\java\mysql\phpstudy_pro\Extensions\MySQL5.7.26\mysql.log"
slow-query-log=1
slow_query_log_file="D:\java\mysql\phpstudy_pro\Extensions\MySQL5.7.26\mysql_slow.log"
long_query_time=2
6、事务
try {
// ============开启事务==========
conn.setAutoCommit(false);
//5. 执行sql
int count1 = stmt.executeUpdate(sql1);//受影响的行数
//6. 处理结果
System.out.println(count1);
int i = 3/0;
//5. 执行sql
int count2 = stmt.executeUpdate(sql2);//受影响的行数
//6. 处理结果
System.out.println(count2);
// ============提交事务==========
//程序运行到此处,说明没有出现任何问题,则需求提交事务
conn.commit();
} catch (Exception e) {
// ============回滚事务==========
//程序在出现异常时会执行到这个地方,此时就需要回滚事务
conn.rollback();
e.printStackTrace();
}
7、使用连接池Druid
- 配置文件
driver-class-name=com.mysql.cj.jdbc.Driver
username=admin
password=Admin@123
url=jdbc:mysql://localhost:3306/wangdb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&&useServerPrepStmts=true
initialSize=5
minIdle=5
maxActive=20
- 程序
public class DruidDemo {
public static void main(String[] args) throws Exception {
PreparedStatement statement = null;
Connection connection = null;
ResultSet set = null;
// 1、导入jar包
// 2、 加载配置文件,路径根据情况自己写
String propsPath = System.getProperty("user.dir") + "\\day02\\src\\druid.properties";
Properties prop = new Properties();
prop.load(new FileInputStream(propsPath));
// 3、获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
// 4、获取连接
connection = dataSource.getConnection();
// 5、编写sql
String sql =
"select t.Id, t.`NAME`,t.DEPT_NAME,t.ID_NO,t.CreateDate from user_info t where id=?";
// 6、获取PrepairStatement
statement = connection.prepareStatement(sql);
// 7、执行sql语句
statement.setObject(1, 1);
set = statement.executeQuery();
// 8、遍历
while (set.next()) {
int id = set.getInt("id");
String name = set.getString("name");
String idNo = set.getString("ID_NO");
Date date = set.getDate("CreateDate");
Timestamp time = set.getTimestamp("CreateDate");
System.out.println("id:" + id);
System.out.println("name:" + name);
System.out.println("idNo:" + idNo);
System.out.println("date:" + date);
System.out.println("time:" + time);
System.out.println("---------------");
}
}
}
java-jdbc-druid的更多相关文章
- JAVA JDBC Template的使用
JAVA JDBC Template的使用 什么是Template? Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发 Template使用步骤 导入ja ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- Java JDBC高级特性
1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...
- Java JDBC下执行SQL的不同方式、参数化预编译防御
相关学习资料 http://zh.wikipedia.org/wiki/Java数据库连接 http://lavasoft.blog.51cto.com/62575/20588 http://blog ...
- Java JDBC批处理插入数据操作
在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...
- Java JDBC批处理插入数据操作(转)
在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...
- java jdbc使用配置文件连接数据库:
java jdbc使用配置文件连接数据库: 创建后缀名为:.properties的文件,文件内容包括,数据库驱动.连接的数据库地址.用户名.密码…… 以Mysql为例创建config.properti ...
- Java JDBC中,MySQL字段类型到JAVA类型的转换
1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射 java.sql.Types定义了常 ...
- Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 及sql2008外围服务器
转载:Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 错误原因如下: Exception in thread & ...
- java jdbc ResultSet结果通过java反射赋值给java对象
在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...
随机推荐
- 像go 一样 打造.NET 单文件应用程序的编译器项目bflat 发布 7.0版本
现代.NET和C#在低级/系统程序以及与C/C++/Rust等互操作方面的能力完全令各位刮目相看了,有人用C#开发的64位操作系统: GitHub - nifanfa/MOOS: C# x64 ope ...
- 甜点cc的2022年回顾总结
每每到年底,总会感概时间飞逝,总会莫名的心慌几天. 高中时代我就明白了一个道理:自己决定做的事,就算结果再烂以后也不要后悔,因为那无异于否定过去的自己.人不能总是否定自己的过去,因为我觉得这样会打击自 ...
- windows通过sshfs挂载linux目录
之前讲过一种方法,PC跟VM在同局域网的情况下,可以用samba的方式挂载linux系统的目录到windows上.但是当PC跟VM不同局域网时这种方式就没办法了. 网络环境 在示意图中,PC只能直连物 ...
- 【nginx】代理设置Host
旧文章从语雀迁移过来,原日期为2021-02-18 nginx 的 proxy 模块使我们经常会用到的模块之一,比如我们常用的 nginx 反向代理. 反向代理我们一般有这么几行配置代码: locat ...
- Asp-Net-Core-搭建ELK日志平台-Docker-Compose版本
title: Asp.Net Core 搭建ELK日志平台(Docker-Compose版本) date: 2022-09-27 15:16:59 tags: - .NET 由于暂时用不上Logsta ...
- Matplotlib学习笔记2 - 循序渐进
Matplotlib学习笔记2 - 循序渐进 调整"线条" 在Matplotlib中,使用plot函数绘制的线条其实是一种特定的类,matplotlib.lines.Line2D. ...
- Codeforces Round #844 (Div. 1 + Div. 2, based on VK Cup 2022 - Elimination Round) A-D
比赛链接 A 题意 设计一条线路要贴着6个墙面走,从 \((a,b)\) 到 \((f,g)\) ,线路长度最短. 题解 知识点:模拟. 分类取最短即可. 时间复杂度 \(O(1)\) 空间复杂度 \ ...
- angular建立服务打印日志创建全局变量方法有两种,手工创建,依赖注入
- echarts图表配置
1.柱状图 option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] ...
- 1.MAC获取文件路径;2.MAC使用SSH连接远程服务器,实现文件上传下载
首先来说一下如何获取文件路径 ····打开terminal,把文件拖进terminal 窗口,自动显示路径. 接下来说一下使用SSH连接远程服务器,实现文件上传下载 1. 上传本地文件到服务器 sc ...