You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从服务器发送数据?当前SQL查询结果仅输出至System.out.println()

嘿,要把SQL查询结果从服务器发送出去,得看你具体要发送到哪里,但最常见的场景是做成HTTP接口返回给客户端,我给你几个实用的方案:

方案1:用Spring Boot快速搭建HTTP接口(最常用)

如果是Web项目,Spring Boot是最省心的选择,能快速把查询结果转成JSON返回给客户端:

  1. 先创建一个User实体类,对应users表的字段:
public class User {
    private String id; // 对应你查询的第一个字段
    private String name; // 对应第二个字段

    // 构造方法、getter
    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() { return id; }
    public String getName() { return name; }
}
  1. 写一个Controller类提供HTTP接口:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {

    @GetMapping("/users")
    public List<User> getUsers() throws Exception {
        // 用try-with-resources自动关闭数据库资源,避免内存泄漏
        try (Connection con = DriverManager.getConnection("jdbc:mysql://______8080/test-app","______","______");
             PreparedStatement statement = con.prepareStatement("SELECT * FROM users");
             ResultSet result = statement.executeQuery()) {
            
            List<User> userList = new ArrayList<>();
            while(result.next()){
                userList.add(new User(result.getString(1), result.getString(2)));
            }
            return userList; // Spring会自动把列表转成JSON返回
        }
    }
}

启动Spring Boot应用后,访问http://localhost:8080/users就能拿到JSON格式的用户列表了。

方案2:原生Java Servlet(不用框架的轻量方案)

如果不想用Spring,也可以用原生Servlet实现:

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/users")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("UTF-8");
        PrintWriter out = resp.getWriter();
        
        try (Connection con = DriverManager.getConnection("jdbc:mysql://______8080/test-app","______","______");
             PreparedStatement statement = con.prepareStatement("SELECT * FROM users");
             ResultSet result = statement.executeQuery()) {
            
            List<User> userList = new ArrayList<>();
            while(result.next()){
                userList.add(new User(result.getString(1), result.getString(2)));
            }
            
            // 手动拼接JSON(也可以用Jackson库简化这个过程)
            StringBuilder json = new StringBuilder("[");
            for(int i=0; i<userList.size(); i++){
                User u = userList.get(i);
                json.append("{\"id\":\"").append(u.getId()).append("\",\"name\":\"").append(u.getName()).append("\"}");
                if(i != userList.size()-1) json.append(",");
            }
            json.append("]");
            
            out.print(json.toString());
        } catch (Exception e) {
            e.printStackTrace();
            out.print("{\"error\":\"查询失败,请检查数据库连接\"}");
        } finally {
            out.close();
        }
    }
}

把这个Servlet部署到Tomcat之类的Web服务器,访问对应路径就能拿到结果。

方案3:发送到消息队列(给其他服务消费)

如果是要把结果发送给其他服务,比如用RabbitMQ/Kafka,以RabbitMQ为例:

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.sql.*;

public class MyMain{ 
    public static void main(String[] args) throws Exception { 
        try (Connection con = DriverManager.getConnection("jdbc:mysql://______8080/test-app","______","______");
             PreparedStatement statement = con.prepareStatement("SELECT * FROM users");
             ResultSet result = statement.executeQuery()) {
            
            // 初始化RabbitMQ连接
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost"); // 替换成你的RabbitMQ地址
            try (Connection rabbitCon = factory.newConnection();
                 Channel channel = rabbitCon.createChannel()) {
                
                String queueName = "user-data-queue";
                channel.queueDeclare(queueName, false, false, false, null);
                
                while(result.next()){
                    String userInfo = result.getString(1)+ " "+result.getString(2);
                    channel.basicPublish("", queueName, null, userInfo.getBytes());
                    System.out.println("已发送用户信息到队列: " + userInfo);
                }
            }
        }
    }
}

几个重要提醒

  • 永远不要硬编码数据库密码,用配置文件或环境变量存储更安全
  • 生产环境一定要用数据库连接池(比如HikariCP),避免频繁创建销毁连接浪费资源
  • 用try-with-resources语法自动关闭数据库、MQ等资源,避免内存泄漏

内容的提问来源于stack exchange,提问作者Олег Котенко

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:11:01