1、创建主线程:
package com.database.all;
import java.sql.Statement;
public class Main {
public Statement statement = null;
public String engName = null;
public static void main(String[] args) {
DatabaseInsertThread databaseInsertThread = DatabaseInsertThread.getInsertInstance();
SharedData sharedData = SharedData.getsharedDataInstance();
// 创建子线程并插入数据
Thread insertThread = new Thread(() -> {
// 需要插入的数据
String engName = "287kz...dfs";
sharedData.setSharedData(engName);
databaseInsertThread.insertData(engName);
});
insertThread.start();
// 主线程继续执行其他任务
System.out.println("Main thread continues executing.");
try {
// 创建子线程并比较数据
Thread quiteThread = new Thread(() -> {
databaseInsertThread.compareAndInsertWord(sharedData.getSharedData());
});
quiteThread.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、创建数据库操作类线程。
package com.database.all;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DatabaseInsertThread {
private static final String DB_URL = "jdbc:mysql://localhost:3306/test_data";
private static final String DB_USERNAME = "root";
private static final String DB_PASSWORD = "admin";
private static DatabaseInsertThread instance;
public Statement statement = null;
public Connection connection;
public DatabaseInsertThread() {
try {
connection = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
statement = connection.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static DatabaseInsertThread getInsertInstance() {
if (instance == null) {
synchronized (DatabaseInsertThread.class) {
if (instance == null) {
instance = new DatabaseInsertThread();
}
}
}
return instance;
}
public String insertData(String engName) {
try {
Connection connection = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
// 遍历eng_name字段,检查是否与待插入数据重复
String selectQuery = "SELECT eng_name FROM words_info";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(selectQuery);
while (resultSet.next()) {
String existingEngName = resultSet.getString("eng_name");
if (existingEngName != null && existingEngName.equalsIgnoreCase(engName)) {
// 如果存在相同的eng_name,则不插入数据
System.out.println("Data with same eng_name already exists. Skipping insertion.");
return existingEngName;
}
}
// 获取当前时间
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = dateFormat.format(new Date());
// 构建插入数据的SQL语句
String insertQuery = "INSERT INTO words_info (eng_name, chi_val, last_used_time, used_times, created_time, priority) VALUES (?, ?, ?, ?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);
preparedStatement.setString(1, engName);
preparedStatement.setNull(2, Types.VARCHAR);
preparedStatement.setString(3, currentTime);
preparedStatement.setInt(4, 1);
preparedStatement.setString(5, currentTime);
preparedStatement.setInt(6, 0);
// 执行插入操作
int rowsAffected = preparedStatement.executeUpdate();
if (rowsAffected > 0) {
System.out.println("Data inserted successfully.");
} else {
System.out.println("Failed to insert data.");
}
// 关闭连接和相关资源
preparedStatement.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
return engName;
}
public void compareAndInsertWord(String engName) {
try {
String sqlSelect = "SELECT chi_val FROM words_info WHERE eng_name='" + engName + "'";
ResultSet result = statement.executeQuery(sqlSelect);
if (result.next()) {
String chiVal = result.getString("chi_val");
System.out.println("中文意思:" + chiVal);
} else {
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public String getUserInput(String prompt) {
return prompt;
}
public void closeConnection() {
try {
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3、创建线程共享数据类:
package com.database.all;
public class SharedData {
private String message;
private static SharedData instance;
private SharedData() {}
public static SharedData getsharedDataInstance() {
if (instance == null) {
synchronized (SharedData.class) {
if (instance == null) {
instance = new SharedData();
}
}
}
return instance;
}
public synchronized void setSharedData(String sharedData) {
this.message = sharedData;
}
public synchronized String getSharedData() {
return message;
}
}
4、在控制台打印结果: