我需要用java从客户机发送服务器命令的语法

30byixjq  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(255)

很明显,我在网络编程方面遗漏了一些东西。我正在尝试编写一个程序,向服务器发送一个命令,以便对服务器端维护的sqlite数据库执行特定的查询。我也希望所有的sql查询都在服务器端。
我需要不同的方法通过向服务器发送命令来执行不同的功能。我从客户端建立连接的唯一方法是在方法中创建一个新的套接字和输入/输出流,但是我将有许多方法对应于从客户端单击gui上的每个按钮。
有没有一种方法可以使用一个套接字和一组输入/输出流将这些命令写入服务器并重用它们?如果没有,我该怎么做才能让每一个按钮点击一遍又一遍地工作呢。
我已经开始工作了,但它看起来是这样的:
客户端
调用方法调用以构建公寓租户表,命令可能为“1”:

buildData(command)

在builddata中:

public void buildData(String command, TableView table){
        try {
            Socket socket = new Socket("localHost", 5000);
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            out.flush();
            ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

            out.writeUTF(command);

            System.out.println("Build Data Success");
            System.out.println(in.readObject());

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

服务器端

private static String tenantQuery = "SELECT * FROM tenants;";
public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(5000);
        Socket conn = server.accept();
        System.out.println("Connected");
        DataInputStream input = new DataInputStream(new BufferedInputStream(conn.getInputStream()));
        ObjectOutputStream out = new ObjectOutputStream(conn.getOutputStream());
        while(true){
            command = input.readUTF();
            switch (command){
                case "1":
                    returned = buildData(tenantQuery);
                    out.writeObject(returned);

            }
        }

    }

然后在相应的服务器方法builddata(query)中:

public static ArrayList<String> buildData(String query){
    try {
        Class.forName("org.sqlite.JDBC").newInstance();
        c = DriverManager.getConnection("jdbc:sqlite:FinalRental.db");
        data = new ArrayList<>();
        ResultSet rs = c.createStatement().executeQuery(query);
        while (rs.next()) {
            //Iterate Row
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                //Iterate Column
                data.add(rs.getString(i));
            }
            }
        System.out.println("SUCCESS!!!");
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
        e.printStackTrace();
    }
    return data;
}

据我所知,如果我要这样做,并且需要有将租户添加到租户表中的功能,那么我需要创建一个新的套接字,输入/输出流,当在gui中按下一个假想的“add tenant”按钮时,它将成为一个addtenant()方法。
只是重申一下
我试过的:
创建一个套接字和一组输出/输入流,但我不能在代码中的任何地方使用输入/输出流。
问题是:
我不知道如何使用一个套接字和一组输入/输出流来做很多事情,或者这是否是可能的。
问题:
如何设置客户机/服务器关系,以便从服务器上的数据库获取数据并将其返回给客户机,以便在客户机端动态填充gui显示?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题