在子线程中以回调方式查询数据库中的表单数据。

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、 将查询结果在控制台中打印出来:

 

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值