多线程之模拟数据库连接

学习持久化之前,肯定会去连接数据库来进行数据的各种操作,如增、删、改、查,所以对此咋们直接写了一个工具类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 }

多线程模拟连接数据库工具类

如果大家还有其他的方式,用多线程的方式来实现模拟连接数据库的工具类,欢迎共享一下,谢谢。

时间: 2024-12-28 20:42:18

多线程之模拟数据库连接的相关文章

在wpf中利用异步lambda编程,模拟数据库连接,防止界面假死

参考<图解C#>第20章异步编程第五节程序,解决在wpf中连接数据库,界面假死问题. public partial class MainWindow : Window { private bool isConnected = false; public MainWindow() { InitializeComponent(); startWorkButton.Click += async (sender, e) => { SetGuiValues(false, "正在连接数据库

Java多线程(三)模拟龟兔赛跑

用Runnable接口实现多线程 public class ThreadDemo { public static void main(String[] args) throws InterruptedException { Racer racer = new Racer(); new Thread(racer, "乌龟").start(); new Thread(racer, "兔子").start(); } } class Racer implements Run

java 22 - 11 多线程之模拟电影院售票口售票

使用多线程实现的第二种方式: 首先创建自定义类 1 public class SellTicket implements Runnable { 2 // 定义100张票 3 private int ticket = 100; 4 5 public void run() { 6 7 //假设一直在售票 8 while(true){ 9 //现实中买票时,都会有延迟的,所以让线程休息下 10 try { 11 Thread.sleep(100); 12 } catch (InterruptedExc

多线程技术模拟并行计算之二:数组前缀和(Prefix Sum)

一.前缀和(Prefix Sum)定义: 给定一个数组A[1..n],前缀和数组PrefixSum[1..n]定义为:PrefixSum[i] = A[0]+A[1]+...+A[i-1]: 例如:A[5,6,7,8] --> PrefixSum[5,11,18,26] PrefixSum[0] =A[0] ; PrefixSum[1] =A[0] + A[1] ; PrefixSum[2] =A[0] + A[1] + A[2] ; PrefixSum[3] =A[0] + A[1] + A[

java多线程下模拟抢票

我们设置三个对象分别同时抢20张票,利用多线程实现. 1 public class Web123506 implements Runnable{ 2 private int ticteksNums=20;//票数 3 4 @Override 5 public void run() { 6 while (true){ 7 if(ticteksNums<0){ 8 break; 9 } 10 /* try { 11 //睡眠 12 Thread.sleep(200); 13 } catch (Int

重构 Rafy 在多线程环境下数据库连接与事务的构建逻辑

用java多线程操作模拟售票系统

class Threadsale implements Runnable{ int tickets = 100; public void run(){ while(true){ if(tickets>0){ System.out.println(Thread.currentThread().getName()+"售车票第"+tickets--+"号"); } else System.exit(0); } } } public class DemoThread

多线程:模拟多个人通过一个山洞.............

package Thread11; public class MountTest { public static void main(String[] args) { // TODO 自动生成的方法存根 Mount cave = new Mount(); new Thread(cave,"李三1").start(); new Thread(cave,"李三2").start(); new Thread(cave,"李三3").start(); n

PHP模拟发送POST请求之五curl基本使用和多线程优化

今天来介绍PHP模拟发送POST请求的重型武器——cURL函数库的使用和其多线程的优化方法. 说起cURL函数,可谓是老生常谈,但网上许多资料都在关键部分语焉不详,列出一大堆手册上的东西,搞得我入门时也万分痛苦,我翻了些资料,结合自己的笔记,总结了这篇博文,希望能给初次接触cURL的开发者提供一些帮助. cURL的基本使用步骤 首先来介绍cURL: cURL按照HTTP头信息来模拟浏览器传输数据,它支持FTP, FTPS, HTTP, HTTPS, DICT, FILE等协议,拥有HTTPS认证