1、数据库表单如下:
2、创建一个回调接口QueryCallback
,用于在查询完成后返回查询结果,代码如下:
package com.database;
import java.util.List;
import java.util.Map;
public interface QueryCallback {
void onSuccess(List<Map<String, Object>> result);
void onFailure(Throwable throwable);
}
3、创建一个查询类DatabaseQuery
,用于在子线程中执行数据库查询操作,并通过回调接口返回查询结果,代码如下:
package com.database;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DatabaseQuery implements Runnable {
private QueryCallback callback;
public DatabaseQuery(QueryCallback callback) {
this.callback = callback;
}
@Override
public void run() {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 连接数据库
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_data", "root", "admin");
// 创建查询语句
statement = connection.createStatement();
String query = "SELECT * FROM words_info";
// 执行查询
resultSet = statement.executeQuery(query);
// 解析查询结果
List<Map<String, Object>> result = new ArrayList<>();
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
Map<String, Object> row = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
Object columnValue = resultSet.getObject(i);
row.put(columnName, columnValue);
}
result.add(row);
}
// 调用回调接口返回查询结果
callback.onSuccess(result);
} catch (SQLException e) {
// 处理异常
callback.onFailure(e);
} finally {
// 关闭数据库连接
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4、在主线程中创建子线程,并传入回调接口来处理查询结果,代码如下:
package com.database;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
QueryCallback callback = new QueryCallback() {
@Override
public void onSuccess(List<Map<String, Object>> result) {
// 处理查询结果
for (Map<String, Object> row : result) {
System.out.println(row);
}
}
@Override
public void onFailure(Throwable throwable) {
// 处理异常
throwable.printStackTrace();
}
};
Thread queryThread = new Thread(new DatabaseQuery(callback));
queryThread.start();
}
}
5、 将查询结果在控制台中打印出来: