多线程之模拟数据库连接
Posted 瞿亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程之模拟数据库连接相关的知识,希望对你有一定的参考价值。
学习持久化之前,肯定会去连接数据库来进行数据的各种操作,如增、删、改、查,所以对此咋们直接写了一个工具类BaseDAO,今天学习了多线程,所以决定写一个多线程模拟工具类连接数据库。好吧,其实老师要求的。
1 import com.sun.org.apache.xpath.internal.SourceTree; 2 import jdk.internal.util.xml.impl.Input; 3 4 import java.sql.*; 5 import java.sql.Connection; 6 import java.util.ArrayList; 7 import java.util.List; 8 import java.util.Scanner; 9 10 /** 11 * Created by 123 on 2017/07/02. 12 */ 13 public class GetConnection { 14 15 static Scanner input = new Scanner(System.in); 16 static String url = null; 17 static String pwd = null; 18 static String name = null; 19 static Conn con = new Conn(); 20 static PreparedStatement ps = null; 21 static ResultSet rs = null; 22 23 public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException { 24 25 26 while (true) { 27 System.out.println("url:"); 28 url = input.next(); 29 30 System.out.println("name"); 31 name = input.next(); 32 33 System.out.println("pwd"); 34 pwd = input.next(); 35 36 Connection conn = getConnection(); 37 System.out.println(conn); 38 Fount(); 39 Thread.sleep(1000); 40 //先mian线程,再子线程 41 } 42 } 43 44 static Connection conn = null; 45 46 //获取连接 47 public static Connection getConnection() throws SQLException, ClassNotFoundException { 48 try { 49 if (conn == null || conn.isClosed()) { 50 Class.forName("com.mysql.jdbc.Driver"); 51 conn = DriverManager.getConnection(url, name, pwd); 52 } 53 } catch (ClassNotFoundException e) { 54 e.printStackTrace(); 55 } catch (SQLException e) { 56 e.printStackTrace(); 57 } finally { 58 return conn; 59 } 60 } 61 62 public static ResultSet executeQuery(String sql, Object... obj) throws ClassNotFoundException, SQLException { 63 conn = getConnection(); 64 ps = conn.prepareStatement(sql); 65 for (int i = 0; i < obj.length; i++) { 66 ps.setObject(i + 1, obj[i]); 67 } 68 return ps.executeQuery(); 69 } 70 71 private static void Fount() throws InterruptedException { 72 Thread t = new Thread(new Runnable() { //匿名类 73 public void run() { 74 List list = new ArrayList(); 75 try { 76 rs = executeQuery("select * from topic"); 77 if (rs != null) { 78 while (rs.next()) { 79 String name = rs.getString("tname"); 80 list.add(name); 81 } 82 } 83 84 for (Object item : list) { 85 System.out.println(item); 86 } 87 } catch (ClassNotFoundException e) { 88 e.printStackTrace(); 89 } catch (SQLException e) { 90 e.printStackTrace(); 91 } 92 } 93 94 }); 95 t.start(); 96 t.join(1000); 97 98 } 99 }
如果大家还有其他的方式,用多线程的方式来实现模拟连接数据库的工具类,欢迎共享一下,谢谢。
以上是关于多线程之模拟数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段