稍微修改了下,可能会好一些,建议还是听上面那哥们的,使用成熟的数据库连接池,没必要重复造轮子

使用单例,保证数据库连接的唯一性

修改synchronized关键字的用法,提高效率

增加volatile关键字,提高稳定性

package com.singleton;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* 功能:

*

* 完整路径: com.singleton.MySQLUtil

* 创建日期: 2017年6月15日 上午10:42:49

*

* @author pfyangf

* @version 1.0

*/

class MySQLUtil {

private MySQLUtil(){}

private static volatile Connection connection = null;

private static final String driver = "com.mysql.jdbc.Driver";

private static final String url = "jdbc:mysql://192.168.31.103:3306/";

private static final String character = "?useUnicode=true&characterEncoding=utf8";

private static final String ssl = "&useSSL=false";

private static final String user = "axtest";

private static final String password = "axtest123";

private static Statement statement = null;

private static PreparedStatement ps = null;

private static ResultSet rs = null;

public static void main(String[] args) {

/*Connection newConnection;

try {

newConnection = MySQLUtil.connectToDB("xxx");

System.out.println(newConnection.isClosed());

} catch (Exception e) {

//TODO 异常处理

e.printStackTrace();

}*/

try {

List> data = MySQLUtil.readData("xxx", "select now() from dual");

System.out.println(data.toString());

} catch (Exception e) {

e.printStackTrace();

}

}

boolean TestConnection(String db) {

try {

Class.forName(driver);

Connection connection = DriverManager.getConnection(url + db + character + ssl, user, password);

if (!connection.isClosed()) {

CloseConnection();

return true;

}

} catch (Exception e) {

e.printStackTrace();

}

return false;

}

/**

* 功能:获取DB连接

*

* @Author:pfyangf , 2017年6月15日

* @param db

* @return

* @throws Exception Connection

**/

public static Connection connectToDB(String db) throws Exception {

if(null == connection){

synchronized (MySQLUtil.class) {

if(null == connection){

Class.forName(driver);

connection = DriverManager.getConnection(url + db + character + ssl, user, password);

statement = connection.createStatement();

}

}

}

return connection;

}

private static void CloseConnection() {

try {

if (rs != null) {

rs.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

try {

if (ps != null) {

ps.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

try {

if (connection != null) {

connection.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void ModifyData(String db, String data) throws Exception {

connectToDB(db);

try {

statement.execute(data);

} catch (SQLException e) {

e.printStackTrace();

} finally {

CloseConnection();

}

}

public static List> readData(String db, String sql) throws Exception {

List> list = new ArrayList<>();

int count;

connectToDB(db);

try {

rs = statement.executeQuery(sql);

ResultSetMetaData rsmd;

rsmd = rs.getMetaData();

count = rsmd.getColumnCount();

while (rs.next()) {

Map map = null;

for (int i = 1; i <= count; i++) {

map = new HashMap<>();

map.put(rsmd.getColumnLabel(i), rs.getString(i));

list.add(map);

}

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

CloseConnection();

}

return list;

}

}

java mysql 线程安全_java连接mysql的线程安全问题相关推荐

  1. java 连接mysql工具类_java连接Mysql数据库的工具类

    一个封装好的链接Mysql数据库的工具类,可以方便的获取Connection对象关闭Statement.ResultSet.Statment对象等等 复制代码 代码如下: package myUtil ...

  2. java连接mysql时区修改_java连接mysql数据库时的时区设置问题(time_zone)

    java在连接mysql数据库时,会由于时区设置不正确导致报以下的错误: The server time zone value '???ú±ê×??±??' is unrecognized or re ...

  3. java连接mysql数据库方法_java连接mysql数据库的方法详解

    连接mysql数据库在java中有几种常用的方式有官方提供的JDBC连接MySQL数据库也有后面我们讲到的其它的方式连接数据库,具体如下. JDBC连接MySQL数据库 首先要下载Connector/ ...

  4. java连接mysql抛异常_Java 连接MySQL数据库 插入中文 抛出异常

    mysql数据库字符集设为默认: 下面解决好的代码,没乱码,我测试过的 String sContent = new String(request.getParameter("content1 ...

  5. java连接mysql 不推荐_java连接mysql

    看了一阵 spring 框架,不怎么好懂,最近脑子也有点不够用,于是乎来点简单的,用java连接数据库玩玩,顺便回顾一下数据库的增删改查~ 使用的是 eclipse .创建了个项目,然后网上找了篇教程 ...

  6. java链接mysql原始方法_java连接mysql数据库的方法

    看了一阵 spring 框架,不怎么好懂,最近脑子也有点不够用,于是乎来点简单的,用java连接数据库玩玩,顺便回顾一下数据库的增删改查~ 使用的是 eclipse .创建了个项目,然后网上找了篇教程 ...

  7. java链接mysql出问题_java连接MySQL出现问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNon ...

  8. c ibatis mysql实例_[Java教程]java程序中的ibatis连接mySql的基本实例

    [Java教程]java程序中的ibatis连接mySql的基本实例 0 2015-03-16 00:01:32 属性文件:SqlMap.properties1 driver=com.mysql.jd ...

  9. php设置mysql查询编码,php连接mysql时怎么设置编码方式

    php连接mysql时怎么设置编码方式 php连接mysql数据库时,也就是在mysql_connect()语句之后添加"mysql_query("set names utf8&q ...

最新文章

  1. io读取一个文件再写入socket技术_JAVA中IO与NIO面试题
  2. Documentum常见问题2—压力测试时一旦用户数超过一定数量就不能登录了
  3. 联通4g满格但是网速慢_手机信号明明满格?网速却非常慢,原来其中讲究这么大,涨知识了...
  4. 完整的WebApplication JSF EJB JPA JAAS –第1部分
  5. 计算机语法分析,电子科技大学-计算机学院-编译原理实验-语法分析.pdf
  6. linux怎么改程序图标,如何在Ubuntu Unity上修改应用程序图标
  7. 如果你不喜欢Windows 11开始菜单,还可以用注册表换回Windows 10样式
  8. php 0改成百 千_【面试题】小数转换为人民币大写形式,PHP实现。
  9. 洛谷回文数c语言,【普及-】洛谷P1015:回文数 一种解法
  10. Android之登录那点事
  11. gcc编译链中i686和x86-64有什么区别?
  12. iOS 模拟器调试web/h5代码
  13. 笔记本连接无线蓝牙缺少驱动解决方法
  14. No MyBatis mapper was found in ‘[xx.mapper]‘ package. Please check your configuration.特殊处理
  15. PDF header signature not found.
  16. ArcGIS API For Javascript之地图基本加载与显示,地图切换、缩放、定位、比例尺、鹰眼图、坐标显示、查询搜索功能实现
  17. iOS 开发者 2019 面试总结
  18. root_path运用python_Python current_app.root_path方法代碼示例
  19. 读书笔记(八)--货币战争 金权天下
  20. C#使用ODBC链接MySQL数据库

热门文章

  1. 【云炬大学生创业基础笔记】第1章第3节 什么是创业的讨论
  2. 科大星云诗社动态20210423
  3. 云炬WEB开发笔记 2-1开发环境搭建
  4. python中调用多进程加速处理文件
  5. 计算机组成原理试题2,计算机组成原理试题2.doc
  6. php ajax 弹窗修改,更改PHP/Ajax脚本来使用Meekrodb?
  7. delphi 中listview的右键菜单处理
  8. SqlDataAdapter隐式打开关闭connection
  9. 管道、通道、管程的区别
  10. 操作系统课设——吃水果问题