如何从服务器发送数据?当前SQL查询结果仅输出至System.out.println()
嘿,要把SQL查询结果从服务器发送出去,得看你具体要发送到哪里,但最常见的场景是做成HTTP接口返回给客户端,我给你几个实用的方案:
方案1:用Spring Boot快速搭建HTTP接口(最常用)
如果是Web项目,Spring Boot是最省心的选择,能快速把查询结果转成JSON返回给客户端:
- 先创建一个
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; } }
- 写一个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,提问作者Олег Котенко
相关产品推荐
相关产品推荐

