Java 如何将结果集的所有行返回给客户端?
我正在编写一个java应用程序,其中客户端发送一个查询,服务器获取结果并将其发送回客户端 代码如下:Java 如何将结果集的所有行返回给客户端?,java,mysql,database,Java,Mysql,Database,我正在编写一个java应用程序,其中客户端发送一个查询,服务器获取结果并将其发送回客户端 代码如下: private ServerSocket serverSocket; private Socket socket; private BufferedReader bufferedReader; private PrintWriter printWriter; private String message; private Connection c
private ServerSocket serverSocket;
private Socket socket;
private BufferedReader bufferedReader;
private PrintWriter printWriter;
private String message;
private Connection connection; //rappresenta la connessione col database
private ResultSet resultSet; //rappresenta i risultati della query
private Statement stmt; //rappresenta la query
public ServerSql() throws IOException, ClassNotFoundException, SQLException {
serverSocket = new ServerSocket(5000);
Class.forName("com.mysql.cj.jdbc.Driver");
//connessione al database
connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");
}
@Override
public void run() {
try {
while(true){
socket = serverSocket.accept();
printWriter = new PrintWriter(socket.getOutputStream(),true);
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
message = bufferedReader.readLine();
stmt = (Statement) connection.createStatement();
resultSet = stmt.executeQuery(message);
while (resultSet.next()) {
String id = resultSet.getString(1);
String nome = resultSet.getString(2);
String cognome = resultSet.getString(3);
String result = id + nome + cognome;
printWriter.println(result);
}
}
} catch (IOException | SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException {
new Thread(new ServerSql()).start();
}
}
正如您在服务器代码中看到的,我将每行的所有3列保存在3个变量中,然后生成一个字符串并将其发送给客户机,它可以工作,但客户机只收到一个字符串,如果我将readline放入循环中,我如何知道何时停止它?我应该做一根线让它一直听吗?
我想知道做这件事的最佳方法是什么,起初我想序列化resultset,但它没有实现serializable;那么我应该使用二维数组吗?如果是,将每个记录放在其位置的代码是什么
我到处都搜索了,但我不明白正确的方法是什么,请帮助。如何迭代服务器上的结果集,并将其保存到列表中,然后将列表作为字符串进行jsonify并发送给客户端。客户端可以再次将json字符串转换为列表。有一些库可用于json转换 如果您不喜欢json,还可以尝试其他现有的数据类型。或者只是创建自己的数据类型,实现可序列化,因为客户机和服务器都使用java 如果数据量很大,您可以在服务器端控制一次发送多少条记录,例如每批10000条记录。每10000,您将以json字符串的形式发送数据。您的客户机必须一直在侦听,直到它在整个会话结束时从服务器读取某些内容,例如,您从服务器收到一个字符串:“end”,然后停止读取 在您的情况下,若要逐行从服务器读取数据,可以让一个循环不断读取数据,直到服务器发送“再见”。服务器可以在发送结果集的最后发送“再见”
while(true){
String receiveMessage = bufferedReader.readLine();//receive from server
if(receiveMessage.equals("bye"))
break;
System.out.println(receiveMessage);
}
我仍然对json一无所知,所以我更喜欢另一种方法。明天,我将尝试在服务器上的hashmap中记住所有内容,然后将其发送到客户端。你不必非得这么做,它应该会起作用的。您只需要一个循环不断读取缓冲读取器,直到没有任何内容可读取为止。
while(true){
String receiveMessage = bufferedReader.readLine();//receive from server
if(receiveMessage.equals("bye"))
break;
System.out.println(receiveMessage);
}