jdbc

postgresql 使用jdbc连接过程的分析

こ雲淡風輕ζ 提交于 2020-03-01 22:40:42
本人在开发 pgoneproxy 的过程中,需要实现前端登录到pgoneproxy,pgoneproxy针对前端进行校验,校验通过后才能使用连接池中的连接,而连接池中的连接是pgoneproxy通过发送数据包的方式进行的连接。 下图是客户端与服务端在建立连接过程中,发送的数据包的情况: 由于postgresql 9.4已经支持SSL,故jdbc会先来请求是否允许使用SSL的方式进行验证。如果不允许使用SSL的方式进行验证,则服务端会发送一个N字符给客户端,客户端再发送startupMessage包给服务端。本文只讲解非SSL连接的情况,因为pgoneproxy只支持非SSL连接。 在startupMessage包中包含了用户名,数据库或者其他的参数名以及这些参数的值。服务端在接收到这些参数时,会根据服务端配置的验证方式向客户端发送Authentication包。目前postgresql支持的验证方式有:Kerberos V5,明文的方式,MD5加密, SCM 方式,GSSAPI认证方式,SSPI认证方式,GSSAPI或者SSPI方式。它们之间的区别通过Authentication包中的第5个字节开始的4个字节进行标识。目前pgoneproxy已经支持明文,trust,MD5的验证方式。 客户端在接收到Authentication包后,根据相应的规则生成密码

定时任务查询数据时返回连接已关闭

﹥>﹥吖頭↗ 提交于 2020-03-01 20:29:02
如下打印的线程栈,原来的定时任务是由线程池形式定时执行,运行一段时间后就会报连接关闭。原来是直接线程访问数据库是没有交给spring的事务去接管的,猜测是连接没有及时释放,然后定时间隔大于异常检测间隔,下次继续用的时候已经被关闭了。 解决方案:定时任务修改为quartz定时任务,将数据库连接交给spring管理。 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at Wed Oct 23 11:12:39 CST 2019 ### The error may exist in org/pml/nos/tunnel/mapper/XxxMapper.java

解决java.lang.ClassNotFoundException: \"com.mysql.cj.jdbc.Driver\" at java.net.URLClassLoader.findClass

落爺英雄遲暮 提交于 2020-03-01 15:50:53
问题描述: 今天在项目中首次连接数据库时出现的问题,java.lang.ClassNotFoundException: "com.mysql.cj.jdbc.Driver" at java.net.URLClassLoader.findClass,从字面上看应该是JDBC的配置问题。 问题解决: 第一,检查 mysql-connector-java是否导进去,放在lib时候需要Add to Build path 第二,检查自己tomcat目录的lib中是否有jdbc,没有的话拷一份进去。 第三,检查mysql-connector-java jar版本是否跟本机安装的mysql版本匹配。 第四,如果确认包导进去,检查自己的代码。 来源: https://www.cnblogs.com/YFEYI/p/12389987.html

jmeter学习(jdbc操作mysql数据库)

别来无恙 提交于 2020-03-01 15:37:01
首先在测试计划里面添加mysql的jar包路径: 架包去网上找或者用maven下载:我这里用的是:mysql-connector-java-5.1.38.jar 在线程组下面添加一个JDBC Request: 如图: 添加成功如图: 添加jdbc连接配置: 填写数据库的的配置信息: 运行结果: 来源: https://www.cnblogs.com/xiamaojjie/p/12389699.html

JDBC读取MySQL的BLOB类型

守給你的承諾、 提交于 2020-03-01 13:29:48
今天写了个SQL查数据库,需要根据id分组,然后将同一分组中某几列的值都平铺开来,网络上查了下,MySQL中的 GROUP_CONCAT 函数,还是很好用的,SQL 大致写成如下: select `id` , GROUP_CONCAT(concat(`key`,':',`value`) ORDER BY `key` SEPARATOR ",") as prefs from `table_name` GROUP BY `id` 效果还算不错,但是在Java程序中查询这条SQL时,却出现了一些小意外,分组排列的字段显示不出来,我当时使DBUtils 查的,用MapListHandler 来读出的该字段,读出来 全是乱码, 于是跟到源码里,调了半天不知道问题,后来同事提示才发现,由于同一组中,个数太多,导致这些值产生的字符串很长,于是MySQL会自动把这列的结果类型转换成BLOB,这种类型读取的方式很特别,若用JDBC中 getObject(int index)方法读取的话,就会是乱码(DBUtils这里就是用的JDBC中的 getObject(int index) 来读取数据 )。 读取数据库中BLOB数据类型的方法,我在网上找了一下,找到两种,根据自身情况也实现了一下,我需要将BLOB类型 转换成String,代码如下 第一种方法: public String getBlob

注解+反射+JDBC,实现一个简易的泛型DAO接口

↘锁芯ラ 提交于 2020-03-01 13:13:06
一、实现思路 1、定义3个Annotation(注解):Entity、Id、Column,Entity作用于Type级别,用于标识JavaBean与数据库表名的映射关系。Id作用于Field级别,用于标识JavaBean中ID属性与表中ID字段的映射关系,Column作用于Field级别,用于标识JavaBean中除ID属性外的其它属性与表中字段的映射关系。 2、在Dao实现类中,通过反射API获得JavaBean中注解和属性的信息,如:表名、字段。JavaBean属性的名称、数据类型等信息。然后将这些信息拼接成一条SQL语句,通过JDBC的方式与数据库交互。 二、示例代码 1、定义一个Dao公共类,提供获得数据库连接与释放数据库资源的接口 package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 提供获取数据库连接、释放资源的接口 */ public class JdbcDaoHelper { /** * 数据库用户名 */ private static final String USER =

MyBatis入门实例(Idea)

佐手、 提交于 2020-03-01 10:57:37
开发环境:Idea2018 数据库:mysql 8.0.16 目的:学习Mybatis 数据库准备 本次实例使用数据库mysql 8.0.16,用户名root ,密码123456 创建数据库并建立测试表单: /*创建数据库*/ CREATE DATABASE tms default character set utf8; /*创建数据表单*/ CREATE TABLE `t_members` ( -> `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, -> `nickname` varchar(255) DEFAULT NULL COMMENT '昵称', -> `password` char(32) NOT NULL DEFAULT '' COMMENT '密码', -> `realname` varchar(36) NOT NULL DEFAULT '' COMMENT '真实姓名', -> `gender` enum('MALE','FEMALE','NONE') NOT NULL DEFAULT 'NONE' COMMENT '姓名', -> `rank` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '会员等级', -> `email` char(50) NOT

Mybatis事务管理

陌路散爱 提交于 2020-03-01 10:36:14
一、Mybatis事务 1、事务管理方式 Mybatis中的事务管理方式有两种: 1、JDBC的事务管理机制,即使用JDBC事务管理机制进行事务管理 2、MANAGED的事务管理机制,Mybatis没有实现对事务的管理,而是通过容器来实现对事务的管理 其中,Mybatis提供了事务的接口:Transaction,其代码如下: public interface Transaction { /** * Retrieve inner database connection * @return DataBase connection * @throws SQLException */ //获得数据库连接 Connection getConnection() throws SQLException; /** * Commit inner database connection. * @throws SQLException */ //提交 void commit() throws SQLException; /** * Rollback inner database connection. * @throws SQLException */ //回滚 void rollback() throws SQLException; /** * Close inner database

在Spring Boot中使用内存数据库

Deadly 提交于 2020-03-01 10:19:17
文章目录 H2数据库 HSQLDB Apache Derby SQLite 在Spring Boot中使用内存数据库 所谓内存数据库就是可以在内存中运行的数据库,不需要将数据存储在文件系统中,但是相对于普通的数据库而言,内存数据库因为数据都在内存中,所以内存的数据库的存取速度会更快。 本文我们将会讨论如何在Spring Boot中使用内存数据库。 H2数据库 H2是一个由java实现的开源内存数据库,它可以支持内存模式和独立模式。 如果要使用H2数据库,需要添加如下依赖: < dependency > < groupId > com.h2database </ groupId > < artifactId > h2 </ artifactId > < version > 1.4.194 </ version > </ dependency > 我们可以在配置文件中设置更多的H2数据库的连接信息: driverClassName=org.h2.Driver url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1 username=sa password=sa 默认情况下H2数据库当没有连接的时候会自动关闭,我们可以通过添加DB_CLOSE_DELAY=-1来禁止掉这个功能。 如果我们需要使用Hibernate, 我们需要设置如下内容: hibernate

wait millis 60009, active 50 ,maxactive 200 异常

﹥>﹥吖頭↗ 提交于 2020-03-01 07:37:03
2018年04月19日 16:48:46 先说明一下项目特点:业务需要,需要进行相当多的数据库查询和插入、更新操作。生产环境30万数据,本地为了开发方便,只准备了两万数据。 之前的开发过程中测试项目,启动项目后 执行sql操作正常,日志一直再打印hibernate的sql。过一段时间以后 ,就突然停止打印了,等待一段时间(就是wait millis 配置的大小)后,控制台日志打印这句话 。当时第一次遇到这个问题,检查发现在spring的application.xml中配置了数据源druid。里面的配置有这几个参数。当时maxactive 是 50。意思很明显,活动的连接数与最大连接数相同,连接用完了,在等待新的连接,却没有新连接可用,然后超时了。当时我没有意识到这点,只意识到数据库连接不够用,而且网上也有说连接不够用的,就把maxactive 调大,就没有出现这个问题了。 近日,在开发环境部署后,发现数据量太大,这个问题又出现了,maxactive 调的越大,这个问题出现的越晚,但是肯定会出现,说明问题没有根本解决。之后我就详细了解下druid的配置参数都是什么意思,又参考此文:https://www.cnblogs.com/netcorner/p/4380949.html 。 【 使用druid连接池的超时回收机制排查连接泄露问题  https://www.cnblogs.com