解决问题的方法竟然是:
把BufferWriter换成PrintWrite就可以了,哇靠~ 这是怎么回事??难道BufferWriter和BufferReader有冲突?在BufferReader进行readLine()时,BufferWriter无法flush()和close()?怪怪
程序改成这样就没问题了,我的数据同步平台也可以运作了。
public class ServerThread extends Thread { private int port; public ServerThread(int port) { this.port = port; }
private boolean stop = false;
public void run() { try { ServerSocket server = new ServerSocket(port); while (!stop) { Socket client = server.accept(); BufferedReader read = new BufferedReader(new InputStreamReader(client.getInputStream())); PrintWriter streamWriter = new PrintWriter(client.getOutputStream());//关键是这里 System.out.println("发送欢迎信息");
streamWriter.println("欢迎xx"); streamWriter.flush();//如果用BufferWriter这句话就不起作用,也发不出去,所以客户端也无法收到
String lineStr = read.readLine(); if ("开始".equals(lineStr)) { System.out.println("开始接受数据!");
while (true) { lineStr = read.readLine(); if ("结束".equals(lineStr)) { break; } else { System.out.println("数据是" + lineStr); } } }
streamWriter.close(); read.close(); client.close(); }
} catch (IOException ex) { ex.printStackTrace(); } }
public static void main(String[] args) { Thread server = new ServerThread(10020); server.start(); }
public boolean isStop() { return stop; }
public void setStop(boolean stop) { this.stop = stop; }}
现在还遇到一个问题就是用java的jdbc在数据库生成trigger,竟然会报语法出错,不过还是在数据库中生成了trigger,而手工的用PL/SQL工具一运行就好了,这是怎么回事,怪~
具体是这样的:
stmt.executeUpdate(String triggerSql);数据库schema中生成了trigger,但是报错状态(不是Disable状态)然后用PL/SQL工具运行这个trigger,竟然没有任何问题
根据出错的提示信息我们发现好像是jdbc的语法不支持比较复杂的SQL,那我们如何用程序生成trigger啊??