日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

java連接mysql的線程安全問題

瀏覽:154日期:2022-06-11 11:59:34

問題描述

我在網(wǎng)上搜索了N天,幾乎沒有關(guān)于線程安全的解決辦法,同樣的問題Redis就很好解決,改了一個(gè)網(wǎng)上找來的工具類,請(qǐng)懂的大神幫我修改一下或者給點(diǎn)指導(dǎo)意見.我現(xiàn)在的想法就是加了synchronized關(guān)鍵字,但是總覺得還是有問題,非常感謝!

class MySQLUtil { 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 = 'root'; private static final String password = '111111'; private static Connection connection = null; private static Statement statement = null; private static PreparedStatement ps = null; private static ResultSet rs = null; 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; } synchronized private void ConnectToDB(String db) { try { Class.forName(driver); Connection connection = DriverManager.getConnection(url + db + character + ssl, user, password); if (!connection.isClosed()) {statement = connection.createStatement(); } } catch (Exception e) { e.printStackTrace(); } } synchronized private 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(); } } synchronized void ModifyData(String db, String data) {ConnectToDB(db); try { statement.execute(data); } catch (SQLException e) { e.printStackTrace(); } finally { CloseConnection(); } } synchronized List ReadData(String db, String data) { List<String> list = new ArrayList<>(); int count; ConnectToDB(db);try { rs = statement.executeQuery(data); ResultSetMetaData rsmd; rsmd = rs.getMetaData(); count = rsmd.getColumnCount(); while (rs.next()) {for (int i = 1; i <= count; i++) { String label = rsmd.getColumnLabel(i); list.add(label); String value = rs.getString(i); list.add(value);} } } catch (SQLException e) { e.printStackTrace(); } finally { CloseConnection(); } return list; }}

問題解答

回答1:

為了保證連接間數(shù)據(jù)獨(dú)立(非共享),我猜你想實(shí)現(xiàn)連接池

ComboPooledDataSource cpds = new ComboPooledDataSource();cpds.setDriverClass( 'org.postgresql.Driver' );cpds.setJdbcUrl( 'jdbc:postgresql://localhost/testdb' );cpds.setUser('caiyongji');cpds.setPassword('test-password');cpds.setMinPoolSize(5);cpds.setAcquireIncrement(5);cpds.setMaxPoolSize(20);回答2:

稍微修改了下,可能會(huì)好一些,建議還是聽上面那哥們的,使用成熟的數(shù)據(jù)庫連接池,沒必要重復(fù)造輪子

使用單例,保證數(shù)據(jù)庫連接的唯一性

修改synchronized關(guān)鍵字的用法,提高效率

增加volatile 關(guān)鍵字,提高穩(wěn)定性

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;/** * <b>功能:</b><br> * <br> * <b>完整路徑:</b> com.singleton.MySQLUtil <br> * <b>創(chuàng)建日期:</b> 2017年6月15日 上午10:42:49 <br> * * @author pfyangf<br> * @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<Map<String, Object>> 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; } /** * <b>功能:獲取DB連接</b><br> * <br> * @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<Map<String, Object>> readData(String db, String sql) throws Exception {List<Map<String, Object>> list = new ArrayList<>();int count;connectToDB(db);try { rs = statement.executeQuery(sql); ResultSetMetaData rsmd; rsmd = rs.getMetaData(); count = rsmd.getColumnCount(); while (rs.next()) {Map<String, Object> 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; }}回答3:

沒必要同步吧, 多個(gè)連接也沒關(guān)系啊。 數(shù)據(jù)庫自己有鎖的。你也可以直接用連接池。

回答4:

多謝大家的回答,我把代碼改了一下,請(qǐng)大家?guī)臀铱纯从袥]有問題了,主要是沒做過java,我的處理方式就是:除了常量外,沒有類成員變量,全部用參數(shù)和返回值傳遞,所有變量都在方法里申明

class MySQLUtil {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 = 'root'; private static final String password = '111111';boolean TestConnection(String db) {try { Class.forName(driver); Connection connection = DriverManager.getConnection(url + db + character + ssl, user, password);if (!connection.isClosed()) {CloseConnection(connection, null);return true; }} catch (Exception e) { e.printStackTrace();}return false; }private List ConnectToDB(String db) {List<Object> list = new ArrayList<>();try { Class.forName(driver); Connection connection = DriverManager.getConnection(url + db + character + ssl, user, password);if (!connection.isClosed()) {Statement statement = connection.createStatement();list.add(1, connection);list.add(2, statement);return list; }} catch (Exception e) { e.printStackTrace();}return list; }private void CloseConnection(Connection connection, ResultSet rs) {try { if (rs != null) {rs.close(); }} catch (SQLException e) { e.printStackTrace();}try { if (connection != null) {connection.close(); }} catch (SQLException e) { e.printStackTrace();} }public void ModifyData(String db, String data) {List list = ConnectToDB(db);Connection connection = (Connection) list.get(1);Statement statement = (Statement) list.get(2);try { statement.execute(data);} catch (SQLException e) { e.printStackTrace();} finally { CloseConnection(connection, null);} }public List ReadData(String db, String data) {List<String> result = new ArrayList<>();ResultSet rs = null;int count;List list1 = ConnectToDB(db);Connection connection = (Connection) list1.get(1);Statement statement = (Statement) list1.get(2);try { rs = statement.executeQuery(data); ResultSetMetaData rsmd; rsmd = rs.getMetaData(); count = rsmd.getColumnCount();while (rs.next()) {for (int i = 1; i <= count; i++) { String label = rsmd.getColumnLabel(i); result.add(label); String value = rs.getString(i); result.add(value);} }} catch (SQLException e) { e.printStackTrace();} finally { CloseConnection(connection, rs);}return result; }}

相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品一本| 久久国际精品| 中文在线资源| 日韩理论视频| 91精品蜜臀一区二区三区在线| 黄色在线观看www| 美女网站视频一区| 欧美亚洲国产激情| 红桃视频国产精品| 久久国产精品99国产| 蜜臀精品一区二区三区在线观看 | 精品久久97| 成人日韩av| 亚洲不卡系列| 西西人体一区二区| 日韩一区免费| 欧美成人一二区| аⅴ资源天堂资源库在线| 成人羞羞在线观看网站| 欧美13videosex性极品| 九九久久电影| 日韩欧美三区| 毛片不卡一区二区| 女生影院久久| 婷婷久久一区| 日本高清久久| 国产videos久久| 女人天堂亚洲aⅴ在线观看| 热久久免费视频| 国产激情一区| 亚洲国内欧美| 综合在线一区| 色婷婷色综合| 美女国产一区| 国产伦理一区| 久久久久网站| 日韩精品视频中文字幕| 成人精品久久| 久久av在线| 国产美女视频一区二区| 国产精品久久久久久久免费软件 | 精品视频在线观看网站| 91精品国产调教在线观看| 美女福利一区二区三区| 欧美午夜不卡| 青草av.久久免费一区| 久久国产日韩欧美精品| 丁香婷婷久久| 欧美日韩国产综合网| 69精品国产久热在线观看| 中文在线а√在线8| 综合激情网站| 午夜精品成人av| 日韩毛片网站| 在线亚洲人成| 日本午夜免费一区二区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 黄色aa久久| 日韩在线a电影| 首页国产精品| 亚洲精品在线国产| www.com.cn成人| 日韩激情啪啪| 精品一区毛片| 国产va免费精品观看精品视频| 久久亚洲美女| 麻豆理论在线观看| 日韩中文字幕无砖| 日韩三区免费| 久久成人高清| 久久国产99| 四虎8848精品成人免费网站| 亚洲精品伊人| av一区二区高清| 国产一区日韩| 日韩国产欧美三级| 国产亚洲福利| 新版的欧美在线视频| 国产日产一区| 久久成人亚洲| 色老板在线视频一区二区| 国产欧美日韩| 亚洲三级精品| 亚洲国产日韩欧美在线| 精品网站aaa| 亚洲精一区二区三区| 精品日韩视频| 精品丝袜久久| 国产精品天堂蜜av在线播放| 影音先锋久久精品| 黄色国产精品| 999国产精品| 在线人成日本视频| 国产欧美亚洲一区| 久久免费福利| 欧美不卡高清一区二区三区| 国产66精品| 欧美日韩国产综合网| 91综合网人人| 国产精品videossex| 亚洲人成毛片在线播放女女| 成人国产精品一区二区网站| 91国内精品| 综合欧美精品| 丝瓜av网站精品一区二区| 国产综合婷婷| 国产99久久| 免费污视频在线一区| 裤袜国产欧美精品一区| 国产一区日韩| 捆绑调教美女网站视频一区| 日韩一区二区三免费高清在线观看 | 国产白浆在线免费观看| 国产精品1luya在线播放| 日韩国产在线观看| 亚洲精品系列| 一区二区精彩视频| 蜜臀av在线播放一区二区三区| 国产精品av久久久久久麻豆网| 久久久久欧美精品| 天堂资源在线亚洲| 九一成人免费视频| 99国产精品久久久久久久成人热| 久久一区二区三区喷水| 久久国产亚洲精品| jiujiure精品视频播放| 日韩中文影院| 极品日韩av| 亚洲免费观看| 性色一区二区| 亚洲va久久久噜噜噜久久| 一区二区三区四区日韩| 丝袜国产日韩另类美女| 亚洲一级淫片| 91九色综合| 国产精品久久久久久久久久白浆| 国产精品2023| 国产一区二区三区四区五区传媒 | 国产欧美一区二区三区精品观看| 日韩中文一区二区| 日韩精品91亚洲二区在线观看| 久久国产人妖系列| 国产一区福利| 婷婷成人在线| 亚洲在线网站| 日本不卡中文字幕| 麻豆国产精品777777在线| 精品中文字幕一区二区三区| 中文字幕在线免费观看视频| 香蕉久久精品| 蜜桃久久久久久| 国产乱码精品一区二区亚洲| 国产一区2区| 国产精品av一区二区| 一区二区不卡| 日韩不卡一区二区三区| 欧美国产先锋| 亚洲h色精品| 蜜桃视频在线观看一区| 欧美一区久久| 国产精品福利在线观看播放| 一区二区三区视频免费观看| 欧美在线综合| 国产精品密蕾丝视频下载| 日产精品一区二区| 99在线|亚洲一区二区| 青青草精品视频| 亚洲黄色网址| 视频一区在线视频| 国产精品夜夜夜| 黄色在线网站噜噜噜| 蘑菇福利视频一区播放| 国产精品美女在线观看直播| 精精国产xxxx视频在线播放| 免费国产亚洲视频| 精品国产亚洲一区二区三区| 欧美成人午夜| 欧美一区二区三区久久| 欧美aa一级| 性色av一区二区怡红| 麻豆精品视频在线| 在线视频免费在线观看一区二区| 日韩美女国产精品| 亚洲天堂1区| 日韩av影院| 国产美女高潮在线| 亚洲人成毛片在线播放女女| 97精品一区| 日本不卡视频在线| 久久精品国产68国产精品亚洲| 欧美日韩一区二区三区在线电影| 欧美黄色网页| 国产免费av一区二区三区| 免费国产自久久久久三四区久久| 国产精品主播| 免费久久精品视频| 国产亚洲一区二区手机在线观看| 日韩激情av在线| 欧美在线亚洲综合一区| 精品国产亚洲日本|