diff --git a/src/main/java/com/bwie/lx/ClientHandler.java b/src/main/java/com/bwie/lx/ClientHandler.java index e842a13..792cd91 100644 --- a/src/main/java/com/bwie/lx/ClientHandler.java +++ b/src/main/java/com/bwie/lx/ClientHandler.java @@ -268,10 +268,141 @@ class ClientHandler implements Runnable { } public String insertBookInfo(String clientMessage){ - String substring = clientMessage.substring(clientMessage.indexOf("BookInfo(") + 9, clientMessage.indexOf(")")); - return null; + try { + String statsString = clientMessage.substring(clientMessage.indexOf("BookInfo(") + 9, clientMessage.indexOf(")")); + String[] statsSplit = statsString.split(","); + String valueString = clientMessage.substring(clientMessage.indexOf("values (") + 8, clientMessage.indexOf(");")); + String[] valueSplit = valueString.split(","); + BookInfo bookInfo = new BookInfo(); + Class aClass = bookInfo.getClass(); + if (statsSplit.length!=valueSplit.length){ + return "error:属性:"+statsSplit.length+"位,属性值:"+valueSplit.length+"位"; + } + if (!clientMessage.contains("name")){ + return "error:name不能为空"; + } + if (!clientMessage.contains("id")){ + return "error:id不能为空"; + } + List bookList = getBookList(); + for (int i = 0; i < statsSplit.length; i++) { + if (statsSplit[i].equals("id")){ + Long id = Long.valueOf(valueSplit[i]); + for (BookInfo info : bookList) { + if (info.getId()==id){ + return "error:id已存在,无法重复添加"; + } + } + } + Field field = aClass.getDeclaredField(statsSplit[i]); + field.setAccessible(true); + Class type = field.getType(); + if (type == Double.class){ + Double aDouble = Double.valueOf(valueSplit[i]); + field.set(bookInfo,aDouble); + } + if (type == Long.class){ + Long aLong = Long.valueOf(valueSplit[i]); + field.set(bookInfo,aLong); + } + if (type == String.class){ + field.set(bookInfo,valueSplit[i]); + } + } + String string = bookInfo.getString(); + FileWriter fileWriter = new FileWriter(fileName,true); + BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true), "UTF-8")); + bufferedWriter.write(string); + bufferedWriter.newLine(); + bufferedWriter.close(); + } catch (NoSuchFieldException | IllegalAccessException | IOException e) { + throw new RuntimeException(e); + } + return "success:添加成功"; } + public String deleteBookInfo(String clientMessage){ + try { + if (!clientMessage.contains("where")){ + return "error:请输入删除条件"; + } + List bookList = getBookList(); + String substring = clientMessage.substring(clientMessage.indexOf("id=") + 3, clientMessage.indexOf(";")); + BookInfo book = null; + for (BookInfo bookInfo : bookList) { + if (bookInfo.getId()==Long.valueOf(substring)){ + book = bookInfo; + } + } + if (book==null){ + return "error:此信息不存在;"; + } + bookList.remove(book); + BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8")); + bufferedWriter.write("id|name|author|type|country|price"); + bufferedWriter.newLine(); + for (BookInfo bookInfo : bookList) { + bufferedWriter.write(bookInfo.getString()); + bufferedWriter.newLine(); + } + bufferedWriter.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return "success:删除成功"; + } + + public String updateBookInfo(String clientMessage){ + try { + String valueString = clientMessage.substring(clientMessage.indexOf("set ") + 4, clientMessage.indexOf(" where")); + String substring = clientMessage.substring(clientMessage.indexOf("id=") + 3, clientMessage.indexOf(";")); + String[] valueSplit = valueString.split(","); + BookInfo bookInfo = new BookInfo(); + Class aClass = bookInfo.getClass(); + List bookList = getBookList(); + boolean t=false; + for (BookInfo info : bookList) { + if (info.getId()==Long.valueOf(substring)){ + for (String s : valueSplit) { + t=true; + String[] split = s.split("="); + if (!hasField(bookInfo,split[0])){ + return "error:属性"+split[0]+"不存在"; + } + Field field = aClass.getDeclaredField(split[0]); + field.setAccessible(true); + Class type = field.getType(); + if (type == Double.class){ + Double aDouble = Double.valueOf(split[1]); + field.set(info,aDouble); + } + if (type == Long.class){ + Long aLong = Long.valueOf(split[1]); + field.set(info,aLong); + } + if (type == String.class){ + field.set(info,split[1]); + } + } + } + } + if (!t){ + return "error:此信息不存在"; + } + FileWriter fileWriter = new FileWriter(fileName,true); + BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8")); + bufferedWriter.write("id|name|author|type|country|price"); + bufferedWriter.newLine(); + for (BookInfo info : bookList) { + bufferedWriter.write(info.getString()); + bufferedWriter.newLine(); + } + bufferedWriter.close(); + } catch (NoSuchFieldException | IllegalAccessException | IOException e) { + throw new RuntimeException(e); + } + return "success:修改成功"; + } @Override public void run() { try { @@ -283,9 +414,8 @@ class ClientHandler implements Runnable { System.out.println("客户端名称:" + clientId); String clientMessage; // 创建一个FileWriter对象来写入文件 - FileWriter fileWriter = new FileWriter("D:\\work\\lx\\src\\main\\java\\com\\bwie\\lx\\txt\\log.txt"); // 创建一个BufferedWriter对象包装FileWriter,提高写入性能 - BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\work\\lx\\src\\main\\java\\com\\bwie\\lx\\txt\\log.txt", true), "UTF-8")); while ((clientMessage = br.readLine()) != null) { if (clientMessage.equals("exit")) { System.out.println(clientId + "已断开连接"); @@ -328,7 +458,7 @@ class ClientHandler implements Runnable { bufferedWriter.write(getDate()+": 匹配到的动作 -> 修改(update)"); bufferedWriter.newLine(); long staTime = new Date().getTime(); - String bookString=""; + String bookString=updateBookInfo(clientMessage); long endTime = new Date().getTime(); if (bookString.contains("error")){ bufferedWriter.write(getDate()+": 解析消息: "+bookString.substring(bookString.indexOf("error:")+6)); @@ -341,14 +471,14 @@ class ClientHandler implements Runnable { bufferedWriter.write(getDate()+": [修改]操作执行完成耗时: "+(endTime-staTime)+"MS, [修改]结果: 修改成功"); bufferedWriter.newLine(); } - pw.println("success:修改成功"); + pw.println(bookString); } else //判断请求是否为删除 if (clientMessage.startsWith("delete")){ bufferedWriter.write(getDate()+": 匹配到的动作 -> 删除(delete)"); bufferedWriter.newLine(); long staTime = new Date().getTime(); - String bookString=""; + String bookString= deleteBookInfo(clientMessage); long endTime = new Date().getTime(); if (bookString.contains("error")){ bufferedWriter.write(getDate()+": 解析消息: "+bookString.substring(bookString.indexOf("error:")+6)); @@ -361,7 +491,7 @@ class ClientHandler implements Runnable { bufferedWriter.write(getDate()+": [删除]操作执行完成耗时: "+(endTime-staTime)+"MS, [删除]结果: 删除成功"); bufferedWriter.newLine(); } - pw.println("success:删除成功"); + pw.println(bookString); } else //判断请求是否为添加 if (clientMessage.startsWith("insert")){ @@ -381,7 +511,7 @@ class ClientHandler implements Runnable { bufferedWriter.write(getDate()+": [添加]操作执行完成耗时: "+(endTime-staTime)+"MS, [添加]结果: 添加成功"); bufferedWriter.newLine(); } - pw.println("success:添加成功"); + pw.println(bookString); } else { bufferedWriter.write(getDate()+": 匹配到的动作 -> 无"); bufferedWriter.newLine(); @@ -389,6 +519,7 @@ class ClientHandler implements Runnable { bufferedWriter.write(getDate()+": 解析消息: -> error:请求格式错误"); bufferedWriter.newLine(); } + bufferedWriter.flush(); } br.close(); diff --git a/src/main/java/com/bwie/lx/txt/BookInfo.txt b/src/main/java/com/bwie/lx/txt/BookInfo.txt index e3a4bda..044647c 100644 --- a/src/main/java/com/bwie/lx/txt/BookInfo.txt +++ b/src/main/java/com/bwie/lx/txt/BookInfo.txt @@ -1,4 +1,5 @@ id|name|author|type|country|price -1|三国演义|罗贯中|四大名著|中国|19.68 +1|哈哈哈|罗贯中|四大名著|中国|19.68 2|java入门到高薪|张艺兴|技术书籍|中国|36.89 -3|javaweb|范雅婷|技术书籍|中国|65.32 \ No newline at end of file +3|javaweb|范雅婷|技术书籍|中国|65.32 +4|java|郝岩|技术书籍|中国|28.68 diff --git a/src/main/java/com/bwie/lx/txt/log.txt b/src/main/java/com/bwie/lx/txt/log.txt index 9ee85b8..0a083a8 100644 --- a/src/main/java/com/bwie/lx/txt/log.txt +++ b/src/main/java/com/bwie/lx/txt/log.txt @@ -1,12 +1,73 @@ -2024-04-18 16:48:07: յϢ -> select * from bookInfo; -2024-04-18 16:48:07: ƥ䵽Ķ -> ѯ(select) -2024-04-18 16:48:07: Ϣ: -2024-04-18 16:48:07: [ѯ]ִɺʱ: 40MS, [ѯ]: id|name|author|type|country|price;1||޹|Ĵ|й|19.68;2|javaŵн||鼮|й|36.89;3|javaweb||鼮|й|65.32; -2024-04-18 16:48:16: յϢ -> delete from bookInfo; -2024-04-18 16:48:16: ƥ䵽Ķ -> ɾ(delete) -2024-04-18 16:48:16: Ϣ: -2024-04-18 16:48:16: [ɾ]ִɺʱ: 0MS, [ɾ]: ɾɹ -2024-04-18 16:48:41: յϢ -> select * from bookInfo; -2024-04-18 16:48:41: ƥ䵽Ķ -> ѯ(select) -2024-04-18 16:48:41: Ϣ: -2024-04-18 16:48:41: [ѯ]ִɺʱ: 1MS, [ѯ]: id|name|author|type|country|price;1||޹|Ĵ|й|19.68;2|javaŵн||鼮|й|36.89;3|javaweb||鼮|й|65.32; + +2024-04-18 19:56:53: 接收到的消息 -> delete from bookInfo where id=4; +2024-04-18 19:56:53: 匹配到的动作 -> 删除(delete) +2024-04-18 19:56:53: 解析消息: 此信息不存在; +2024-04-18 19:56:53: [删除]操作执行完成耗时: 41MS, [删除结果: 此信息不存在; +2024-04-18 19:57:21: 接收到的消息 -> select * from bookInfo where name=三国演义; +2024-04-18 19:57:21: 匹配到的动作 -> 查询(select) +2024-04-18 19:57:21: 解析消息: 无问题 +2024-04-18 19:57:21: [查询]操作执行完成耗时: 1MS, [查询]结果: id|name|author|type|country|price;1|三国演义|罗贯中|四大名著|中国|19.68; +2024-04-18 19:57:32: 接收到的消息 -> select * from bookInfo; +2024-04-18 19:57:32: 匹配到的动作 -> 查询(select) +2024-04-18 19:57:32: 解析消息: 无问题 +2024-04-18 19:57:32: [查询]操作执行完成耗时: 1MS, [查询]结果: id|name|author|type|country|price;1|三国演义|罗贯中|四大名著|中国|19.68;2|java入门到高薪|张艺兴|技术书籍|中国|36.89;3|javaweb|范雅婷|技术书籍|中国|65.32; +2024-04-18 19:59:03: 接收到的消息 -> insert BookInfo(id,name,author,type,country,price) values (4,java,郝岩,技术书籍,中国,28.68); +2024-04-18 19:59:03: 匹配到的动作 -> 添加(insert) +2024-04-18 19:59:03: 解析消息: 无问题 +2024-04-18 19:59:03: [添加]操作执行完成耗时: 1MS, [添加]结果: 添加成功 +2024-04-18 19:59:37: 接收到的消息 -> insert BookInfo(id,name,author,type,country,price) values (4,java,郝岩,技术书籍,中国,28.68); +2024-04-18 19:59:37: 匹配到的动作 -> 添加(insert) +2024-04-18 19:59:37: 解析消息: 无问题 +2024-04-18 19:59:37: [添加]操作执行完成耗时: 1MS, [添加]结果: 添加成功 +2024-04-18 20:00:02: 接收到的消息 -> delete from bookInfo where id=4; +2024-04-18 20:00:02: 匹配到的动作 -> 删除(delete) +2024-04-18 20:00:02: 解析消息: 无问题 +2024-04-18 20:00:02: [删除]操作执行完成耗时: 0MS, [删除]结果: 删除成功 +2024-04-18 20:00:17: 接收到的消息 -> insert BookInfo(id,name,author,type,country,price) values (4,java,郝岩,技术书籍,中国,28.68); +2024-04-18 20:00:17: 匹配到的动作 -> 添加(insert) +2024-04-18 20:00:17: 解析消息: 无问题 +2024-04-18 20:00:17: [添加]操作执行完成耗时: 1MS, [添加]结果: 添加成功 +2024-04-18 20:00:38: 接收到的消息 -> delete from bookInfo where id=1; +2024-04-18 20:00:38: 匹配到的动作 -> 删除(delete) +2024-04-18 20:00:38: 解析消息: 无问题 +2024-04-18 20:00:38: [删除]操作执行完成耗时: 2MS, [删除]结果: 删除成功 +2024-04-18 20:14:51: 接收到的消息 -> update bookInfo set age=18,name=哈哈哈 where id=1; +2024-04-18 20:14:51: 匹配到的动作 -> 修改(update) +2024-04-18 20:14:51: 解析消息: 无问题 +2024-04-18 20:14:51: [修改]操作执行完成耗时: 0MS, [修改]结果: 修改成功 +2024-04-18 20:15:31: 接收到的消息 -> update bookInfo set age=18,name=哈哈哈 where id=1; +2024-04-18 20:15:31: 匹配到的动作 -> 修改(update) +2024-04-18 20:15:31: 解析消息: 无问题 +2024-04-18 20:15:31: [修改]操作执行完成耗时: 0MS, [修改]结果: 修改成功 +2024-04-18 20:16:30: 接收到的消息 -> update bookInfo set age=18,name=哈哈哈 where id=1; +2024-04-18 20:16:31: 匹配到的动作 -> 修改(update) +2024-04-18 20:16:31: 解析消息: 属性age不存在 +2024-04-18 20:16:31: [修改]操作执行完成耗时: 39MS, [修改]结果: 属性age不存在 +2024-04-18 20:16:41: 接收到的消息 -> update bookInfo set name=哈哈哈 where id=1; +2024-04-18 20:16:41: 匹配到的动作 -> 修改(update) +2024-04-18 20:16:41: 解析消息: 无问题 +2024-04-18 20:16:41: [修改]操作执行完成耗时: 2MS, [修改]结果: 修改成功 +2024-04-18 20:18:15: 接收到的消息 -> update bookInfo set name=哈哈哈 where id=1; +2024-04-18 20:18:15: 匹配到的动作 -> 修改(update) +2024-04-18 20:18:15: 解析消息: 无问题 +2024-04-18 20:18:15: [修改]操作执行完成耗时: 40MS, [修改]结果: 修改成功 +2024-04-18 20:18:28: 接收到的消息 -> insert BookInfo(id,name,author,type,country,price) values (4,java,郝岩,技术书籍,中国,28.68); +2024-04-18 20:18:28: 匹配到的动作 -> 添加(insert) +2024-04-18 20:18:28: 解析消息: 无问题 +2024-04-18 20:18:28: [添加]操作执行完成耗时: 1MS, [添加]结果: 添加成功 +2024-04-18 20:18:37: 接收到的消息 -> delete from bookInfo where id=4; +2024-04-18 20:18:37: 匹配到的动作 -> 删除(delete) +2024-04-18 20:18:37: 解析消息: 无问题 +2024-04-18 20:18:37: [删除]操作执行完成耗时: 1MS, [删除]结果: 删除成功 +2024-04-18 20:18:42: 接收到的消息 -> delete from bookInfo where id=4; +2024-04-18 20:18:42: 匹配到的动作 -> 删除(delete) +2024-04-18 20:18:42: 解析消息: 此信息不存在; +2024-04-18 20:18:42: [删除]操作执行完成耗时: 0MS, [删除结果: 此信息不存在; +2024-04-18 20:18:57: 接收到的消息 -> insert BookInfo(id,name,author,type,country,price) values (4,java,郝岩,技术书籍,中国,28.68); +2024-04-18 20:18:57: 匹配到的动作 -> 添加(insert) +2024-04-18 20:18:57: 解析消息: 无问题 +2024-04-18 20:18:57: [添加]操作执行完成耗时: 1MS, [添加]结果: 添加成功 +2024-04-18 20:18:58: 接收到的消息 -> insert BookInfo(id,name,author,type,country,price) values (4,java,郝岩,技术书籍,中国,28.68); +2024-04-18 20:18:58: 匹配到的动作 -> 添加(insert) +2024-04-18 20:18:58: 解析消息: id已存在,无法重复添加 +2024-04-18 20:18:58: [添加]操作执行完成耗时: 3MS, [添加]结果: id已存在,无法重复添加