Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过套接字查询时如何发送结果?_Java_Database_Sockets - Fatal编程技术网

Java 通过套接字查询时如何发送结果?

Java 通过套接字查询时如何发送结果?,java,database,sockets,Java,Database,Sockets,我有关于通过套接字查询数据库的代码,但我不知道如何接收结果,任何人都可以帮助我。这是我的密码: 服务器 private void server() throws IOException, SQLException { try { ServerSocket server = new ServerSocket(1994); System.out.println("Server is ready..."); socket = server.a

我有关于通过套接字查询数据库的代码,但我不知道如何接收结果,任何人都可以帮助我。这是我的密码:

服务器

private void server() throws IOException, SQLException {

    try {

        ServerSocket server = new ServerSocket(1994);
        System.out.println("Server is ready...");
        socket = server.accept();

        DataInputStream in = new DataInputStream(socket.getInputStream());

         DataOutputStream out = new DataOutputStream(socket.getOutputStream());
        String query = in.readUTF();
        pst = conn.prepareStatement(query);
        rs = pst.executeQuery();

        while(rs.next())
        {

            String ID = rs.getString("ID");
            out.writeUTF(ID);
            String Name= rs.getString("Name");
            out.writeUTF(Name);

        }


    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    socket.close();
}
客户

public class Client {

private void connect() throws ClassNotFoundException {
    ResultSet rs = null;
    try {

        Socket socket = new Socket("localhost", 1994);
        DataInputStream in = new DataInputStream(socket.getInputStream());
        DataOutputStream out = new DataOutputStream(socket.getOutputStream());
        out.writeUTF("Select * from sinhvientest");
        String ID = null;
        String Name = null;
        String s;
        while(!(s = in.readUTF()).equals(null))
        {
            ID = in.readUTF();
            System.out.print(ID + " ");
            Name = in.readUTF();
            System.out.println(Name);
        }

    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

连接到数据库是好的,从数据库的查询是好的,我想把结果发送给clent,但我不知道如何。它只发送了一行。有人能帮我吗?非常感谢

您可以编写两个字符串值:

        String ID = rs.getString("ID");
        out.writeUTF(ID);
        String Name= rs.getString("Name");
        out.writeUTF(Name);
但你读了三篇:

    while(!(s = in.readUTF()).equals(null))
    {
        ID = in.readUTF();
        System.out.print(ID + " ");
        Name = in.readUTF();
        System.out.println(Name);
    }
更好地利用

    try {
        while( true )
        {
            String ID = in.readUTF();
            String Name = in.readUTF();
            System.out.println(ID + " " + Name);
        }
     } catch( EOFException eof ){
        // handle regular end of file
     } catch( IOException ioe ){
        // error
     } catch( UTFDataFormatException dfe ){
        // error
     }
稍后这里是一个非常不雅观的使用readUTF的客户机/服务器连接示例

public class Client {

public Client( String host, int port ) throws Exception {
    Socket socket = new Socket(host, port);
    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
    DataInputStream dis = new DataInputStream(socket.getInputStream() );
    dos.writeUTF( "a line from client" );
    try {
         while( true ){
            String line = dis.readUTF();
            System.out.println( "got: " + line );
         }
    } catch( Exception e ){
    }
    dis.close();
    dos.close();
}

public static void main(String args[]) throws Exception {
    String host = args[0];
    int port = Integer.parseInt( args[1] );
    Socket socket = null;
    Client client = new Client( host, port );
}
}

public class Server {
public static void main(String[] args) throws Exception {
    int portNumber = Integer.parseInt(args[0]);

    while (true) {
        try {
            new Server(portNumber);
        } catch (java.net.SocketException se) {
        } catch (IOException ioe) {
        } catch (ClassNotFoundException cnf) {
        }
    }
}

public Server( int port ) throws Exception {
ServerSocket serverSocket = new ServerSocket(port );
    Socket socket = serverSocket.accept();

    DataInputStream dis = new DataInputStream(socket.getInputStream());
    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
    System.out.println("...connected...waiting for data...");
    String line = dis.readUTF();
    System.out.println( "got:" + line );
    for( int i = 1; i <= 3; i++ ){
        dos.writeUTF( "line " + i + " from server" );
    }
    dis.close();
    dos.close();
}
}
公共类客户端{
公共客户端(字符串主机,int端口)引发异常{
套接字=新的套接字(主机、端口);
DataOutputStream dos=新的DataOutputStream(socket.getOutputStream());
DataInputStream dis=新的DataInputStream(socket.getInputStream());
dos.writeUTF(“来自客户的线路”);
试一试{
while(true){
字符串行=dis.readUTF();
System.out.println(“got:+行);
}
}捕获(例外e){
}
dis.close();
dos.close();
}
公共静态void main(字符串args[])引发异常{
字符串host=args[0];
int port=Integer.parseInt(args[1]);
套接字=空;
客户端=新客户端(主机、端口);
}
}
公共类服务器{
公共静态void main(字符串[]args)引发异常{
int portNumber=Integer.parseInt(args[0]);
while(true){
试一试{
新服务器(端口号);
}catch(java.net.SocketException se){
}捕获(ioe异常ioe){
}捕获(ClassNotFoundException cnf){
}
}
}
公共服务器(int端口)引发异常{
ServerSocket ServerSocket=新的ServerSocket(端口);
Socket=serverSocket.accept();
DataInputStream dis=新的DataInputStream(socket.getInputStream());
DataOutputStream dos=新的DataOutputStream(socket.getOutputStream());
System.out.println(“…已连接…正在等待数据…”);
字符串行=dis.readUTF();
System.out.println(“got:+行);

对于(int i=1;我感谢劳恩的回答!我使用while(!(s=in.readUTF()).equals(null))当服务器读到末尾时进行比较。但我知道它会发生错误。你能给我一个主意来检查何时读到表的末尾吗!谢谢!Oops-我信任你对文件结尾的测试,但readUTF不同。它在java.io.DataInputStream.readUnsignedShort处抛出java.io.EOFEException(DataInputStream.java:340)在java.io.DataInputStream.readUTF(DataInputStream.java:589)在java.io.DataInputStream.readUTF(DataInputStream.java:564)在simplesocket.Client.connect(Client.java:42)在simplesocket.Client.main(Client.java:60)在simplesocket(谢谢!那么在这种情况下哪一个是最好的解决方案?我只知道readUTF():(谢谢你的代码,Laune!我修复了它!我希望你能帮助我更多!再次非常感谢!:)相关:(1)你正在丢弃测试它是否为null的调用结果。(2)readUTF()方法在流结束时不返回null。实际上它根本不返回null。