文章目录
- 任务10
- 【任务10.1.1】安装Mysql数据库,创建项目所需的数据库dms_学号、表及用户名、密码等,并搭建数据访问的基础环境(JDBC)
- 【任务10.1.2】加载JDBC包
- 【任务10.1.3】编写mysql.properties文件
- 【任务10.1.4】编写Config类
- 【任务10.2】编写访问数据库的工具类DBUtil.java
- 任务11
- 【任务11.1】根据项目需求,设计数据库表,用于存储匹配物流数据,要求明确表达出三个匹配物流对象的关系。即发货中、送货中、已签收的对应关系。
- 【任务11.2】实现匹配日志信息的数据库保存和查询功能,修改日志业务类LogRecService,在该类中增加两个方法,分别用于保存匹配的日志信息和查询匹配的日志信息
- 【任务11.3】实现匹配物流信息的数据库保存和查询功能,修改物流业务类TransportService,在该类中增加两个方法,分别用于保存匹配的物流信息和查询匹配的物流信息
- 【任务11.4】在com.qst.dms.dos下创建测试类DBDemo,测试匹配的日志、物流信息的数据库保存和读写功能
- 【任务11.5】将数据的数据库保存和读取功能,集成到MenuDriver,并进行测试
任务10
【任务10.1.1】安装Mysql数据库,创建项目所需的数据库dms_学号、表及用户名、密码等,并搭建数据访问的基础环境(JDBC)
根据项目需求,设计数据库表,用于存储匹配日志,要求明确表达出两个匹配日志的关系。及如果知道一个登入日志,需要能够查到对应的登出日志。
【任务10.1.2】加载JDBC包
【任务10.1.3】编写mysql.properties文件
在config子目录下创建文件mysql.properties
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
user = root
password = 123456
【任务10.1.4】编写Config类
在com.qst.dms.util包下创建Config.java//属性文件
private static Properties p = null;static {try {p = new Properties();//加载配置类p.load(new FileInputStream("config/mysql.properties"));} catch (Exception e) {e.printStackTrace();}}//获取配置类的参数public static String getValue(String key) {return p.get(key).toString();}
【任务10.2】编写访问数据库的工具类DBUtil.java
Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;/*** 得到数据库连接*/ public Connection getConnection() throws ClassNotFoundException,SQLException, InstantiationException, IllegalAccessException {// 通过Config获取Mysql数据库配置信息String driver = Config.getValue("driver");String url = Config.getValue("url");String user = Config.getValue("user");String pwd = Config.getValue("password");try {// 指定驱动程序Class.forName(driver);// 建立数据库连结conn = DriverManager.getConnection(url, user, pwd);conn.setAutoCommit(false);return conn;} catch (Exception e) {// 如果连接过程出现异常,抛出异常信息throw new SQLException("驱动错误或连接失败!");}}
//手动提交事务
public void commitAll() {try {if(conn!=null&&!conn.isClosed())conn.commit();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//手动回滚事务public void rollbackAll() {try {if(conn!=null&&!conn.isClosed())conn.rollback();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 释放资源*/public void closeAll() {// 如果rs不空,关闭rsif (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}// 如果pstmt不空,关闭pstmtif (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}// 如果conn不空,关闭connif (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 执行SQL语句,可以进行查询*/public ResultSet executeQuery(String preparedSql, Object[] param) {// 处理SQL,执行SQLtry {// 得到PreparedStatement对象pstmt = conn.prepareStatement(preparedSql);if (param != null) {for (int i = 0; i < param.length; i++) {// 为预编译sql设置参数pstmt.setObject(i + 1, param[i]);}}// 执行SQL语句rs = pstmt.executeQuery();} catch (SQLException e) {// 处理SQLException异常e.printStackTrace();}return rs;}/*** 执行SQL语句,可以进行增、删、改的操作,不能执行查询*/public int executeUpdate(String preparedSql, Object[] param) {int num = 0;// 处理SQL,执行SQLtry {// 得到PreparedStatement对象pstmt = conn.prepareStatement(preparedSql);if (param != null) {for (int i = 0; i < param.length; i++) {// 为预编译sql设置参数pstmt.setObject(i + 1, param[i]);}}// 执行SQL语句num = pstmt.executeUpdate();} catch (SQLException e) {// 处理SQLException异常e.printStackTrace();}return num;}
程序设计
package com.qst.dms.util;import java.sql.*;public class DBUtil {static Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;/*** 得到数据库连接*/public static Connection getConnection() throws ClassNotFoundException,SQLException, InstantiationException, IllegalAccessException {// 通过Config获取Mysql数据库配置信息String driver = Config.getValue("driver");String url = Config.getValue("url");String user = Config.getValue("user");String pwd = Config.getValue("password");// 指定驱动程序Class.forName(driver);// 建立数据库连结conn = DriverManager.getConnection(url, user, pwd);conn.setAutoCommit(false);//----------return conn;}//手动提交事务public void commitAll() {try {if(conn!=null&&!conn.isClosed())conn.commit();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//手动回滚事务public void rollbackAll() {try {if(conn!=null&&!conn.isClosed())conn.rollback();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 释放资源*/public void closeAll() {// 如果rs不空,关闭rsif (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}// 如果pstmt不空,关闭pstmtif (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}// 如果conn不空,关闭connif (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 执行SQL语句,可以进行查询*/public ResultSet executeQuery(String preparedSql, Object[] param) {// 处理SQL,执行SQLtry {// 得到PreparedStatement对象pstmt = conn.prepareStatement(preparedSql);if (param != null) {for (int i = 0; i < param.length; i++) {// 为预编译sql设置参数pstmt.setObject(i + 1, param[i]);}}// 执行SQL语句rs = pstmt.executeQuery();} catch (SQLException e) {// 处理SQLException异常e.printStackTrace();}return rs;}/*** 执行SQL语句,可以进行增、删、改的操作,不能执行查询*/public int executeUpdate(String preparedSql, Object[] param) {int num = 0;// 处理SQL,执行SQLtry {// 得到PreparedStatement对象pstmt = conn.prepareStatement(preparedSql);if (param != null) {for (int i = 0; i < param.length; i++) {// 为预编译sql设置参数pstmt.setObject(i + 1, param[i]);}}// 执行SQL语句num = pstmt.executeUpdate();} catch (SQLException e) {if (e instanceof SQLIntegrityConstraintViolationException) {System.out.println("主键冲突,跳过当前记录");return 0;} else {// 处理其他SQL异常e.printStackTrace();}}return num;}
}
任务11
【任务11.1】根据项目需求,设计数据库表,用于存储匹配物流数据,要求明确表达出三个匹配物流对象的关系。即发货中、送货中、已签收的对应关系。
【任务11.2】实现匹配日志信息的数据库保存和查询功能,修改日志业务类LogRecService,在该类中增加两个方法,分别用于保存匹配的日志信息和查询匹配的日志信息
// 匹配日志信息保存到数据库,参数是集合
public void saveMatchLogToDB(ArrayList<MatchedLogRec> matchLogs) {
DBUtil db = new DBUtil();
// 获取数据库链接// 获取匹配的登录日志// 获取匹配的登出日志// 保存匹配记录中的登录日志// 保存匹配记录中的登出日志// 保存匹配日志的ID// 关闭数据库连接,释放资源}// 从数据库读匹配日志信息,返回匹配日志信息集合
public List<MatchedLogRec> readMatchedLogFromDB() {
DBUtil db = new DBUtil();
// 获取数据库链接// 查询匹配的日志// 获取登录记录// 获取登出记录// 添加匹配登录信息到匹配集合// 关闭数据库连接,释放资源}
程序设计
package com.qst.dms.service;import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;
import com.qst.dms.exception.DataAnalyseException;
import com.qst.dms.gather.LogRecAnalyse;
import com.qst.dms.util.AppendObjectOutputStream;
import com.qst.dms.util.DBUtil;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;public class LogRecService {private static final String saveFile = "MatchedLogRec.dat";private Scanner scanner;public LogRecService() {scanner = new Scanner(System.in);}public LogRec inputLog() {int id, type, logType;Date nowDate;String address;String user;String ip;while (true) {try {System.out.println("请输入ID标识:");id = scanner.nextInt();nowDate = new Date();System.out.println("请输入地址:");address = scanner.next();type = LogRec.GATHER;System.out.println("请输入登录用户名:");user = scanner.next();System.out.println("请输入主机IP:");ip = scanner.next();System.out.println("请输入登录状态(1表示登录,0表示登出):");logType = scanner.nextInt();if (logType == 0 || logType == 1) {break;} else {throw new IllegalArgumentException("非法的登录状态");}} catch (Exception e) {System.out.println("输入错误,请重新输入");scanner.nextLine();}}return new LogRec(id, nowDate, address, type, user, ip, logType);}public void showLog(List<LogRec> logRecs) {System.out.println("日志信息:");for (LogRec logRec : logRecs) {System.out.println(logRec);}}// 匹配日志信息输出,参数是集合public void showMatchLog(List<MatchedLogRec> matchLogs) {System.out.println("匹配日志信息:");for (MatchedLogRec matchLog : matchLogs) {System.out.println(matchLog);}}// 保存public static void saveLogRec(List<LogRec> matchLogs) {try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();FileOutputStream fileOut = new FileOutputStream(file, true);AppendObjectOutputStream objOut = new AppendObjectOutputStream(file);for (LogRec matchLog : matchLogs) {objOut.writeObject(matchLog);}objOut.close();fileOut.close();System.out.println("匹配日志信息保存成功\n");} catch (IOException e) {System.out.println("保存匹配日志信息发生异常:" + e.getMessage()+"\n");}}//匹配public static ArrayList<MatchedLogRec> readMatchLogRec() {ArrayList<MatchedLogRec> matchedLogs = new ArrayList<>();List<LogRec> logs = readLogRec();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 创建日志数据分析对象LogRecAnalyse logAnalyse = new LogRecAnalyse(logs);// 日志数据过滤logAnalyse.doFilter();// 日志数据匹配分析try {List<MatchedLogRec> objs = logAnalyse.matchData(); // 进行数据匹配// 处理匹配的日志数据// 判断objs集合是否是配置日志集合if (objs instanceof List<?>) {// 将集合强制类型转换成配置日志集合matchedLogs = (ArrayList<MatchedLogRec>) objs;}} catch (DataAnalyseException e) {System.out.println(e.getMessage());}objIn.close();fileIn.close();System.out.println("匹配日志信息读取完成\n");} catch (IOException e) {System.out.println("读取匹配日志信息发生异常:" + e.getMessage()+"\n");}return matchedLogs;}//显示public static List<LogRec> readLogRec() {List<LogRec> logs = new ArrayList<>();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 使用异常处理和EOFException异常处理读取结束try {while (true) {LogRec log = (LogRec) objIn.readObject();logs.add(log);}} catch (EOFException e) {// 读取结束,不做任何操作}objIn.close();fileIn.close();System.out.println("日志信息读取完成\n");} catch (IOException | ClassNotFoundException e) {System.out.println("读取日志信息发生异常:" + e.getMessage() +"\n");}return logs;}// 匹配日志信息保存到数据库,参数是集合public static void saveMatchLogToDB() {ArrayList<MatchedLogRec> matchLogs =readMatchLogRec();List<LogRec> login = new ArrayList<>();List<LogRec> logout = new ArrayList<>();List<LogRec> logs = readLogRec();Connection conn = null;try {DBUtil db = new DBUtil();conn = db.getConnection();for (MatchedLogRec matchlog : matchLogs) {int loginId = matchlog.getLogin().getId();int logoutId = matchlog.getLogout().getId();for (LogRec log : logs) {if (log.getId() == loginId) {login.add(log);} else if (log.getId() == logoutId) {logout.add(log);}}}// 保存匹配记录中的登录日志String querySqllogin = "INSERT INTO log_in VALUES (?, ?, ?, ?, ?, ?, ?)";for (LogRec log : login) {Object[] queryParams = {log.getId(), log.getTime(), log.getAddress(), log.getType(), log.getUser(), log.getIp(), log.getLogType()};db.executeUpdate(querySqllogin, queryParams);}System.out.println("保存匹配记录中的登录日志成功");// 保存匹配记录中的登出日志String querySqllogout = "INSERT INTO log_out VALUES (?, ?, ?, ?, ?, ?, ?)";for (LogRec log : logout) {Object[] queryParams = {log.getId(), log.getTime(), log.getAddress(), log.getType(), log.getUser(), log.getIp(), log.getLogType()};db.executeUpdate(querySqllogout, queryParams);}System.out.println("保存匹配记录中的登出日志成功");// 保存匹配日志的IDString querySqlmatch = "INSERT INTO log_match VALUES (?, ?)";for (MatchedLogRec matchlog : matchLogs) {Object[] queryParams = {matchlog.getLogin().getId(), matchlog.getLogout().getId()};db.executeUpdate(querySqlmatch, queryParams);}System.out.println("保存匹配日志的ID成功");db.commitAll();} catch (Exception e) {e.printStackTrace();} finally {// 关闭数据库连接,释放资源if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}public static ArrayList<MatchedLogRec> readMatchedLogFromDB() {DBUtil db = new DBUtil();Connection conn = null;ArrayList<MatchedLogRec> matchedLogs = new ArrayList<>();try {conn = db.getConnection();// 查询匹配的日志String querySqlMatchedLogs = "SELECT * FROM log_match";ResultSet matchedLogsResult = db.executeQuery(querySqlMatchedLogs,null);while (matchedLogsResult.next()) {int loginId = matchedLogsResult.getInt("login_id");int logoutId = matchedLogsResult.getInt("logout_id");// 获取登录记录LogRec login = new LogRec();String querySqlLogin = "SELECT * FROM log_in WHERE id = ?";Object[] loginParams = { loginId };ResultSet loginResult = db.executeQuery(querySqlLogin, loginParams);if (loginResult.next()) {// 设置登录记录的属性值login.setId(loginResult.getInt("id"));login.setTime(loginResult.getDate("time"));login.setAddress(loginResult.getString("address"));login.setType(loginResult.getInt("type"));login.setUser(loginResult.getString("user"));login.setIp(loginResult.getString("ip"));login.setLogType(loginResult.getInt("logtype"));// 获取登出记录LogRec logout = new LogRec();String querySqlLogout = "SELECT * FROM log_out WHERE id = ?";Object[] logoutParams = { logoutId };ResultSet logoutResult = db.executeQuery(querySqlLogout, logoutParams);if (logoutResult.next()) {// 设置登出记录的属性值logout.setId(logoutResult.getInt("id"));logout.setTime(logoutResult.getDate("time"));logout.setAddress(logoutResult.getString("address"));logout.setType(logoutResult.getInt("type"));logout.setUser(logoutResult.getString("user"));logout.setIp(logoutResult.getString("ip"));logout.setLogType(logoutResult.getInt("logtype"));// 添加匹配登录信息到匹配集合MatchedLogRec matchedLog = new MatchedLogRec( login, logout);matchedLogs.add(matchedLog);}logoutResult.close();}loginResult.close();}matchedLogsResult.close();} catch (Exception e) {e.printStackTrace();} finally {// 关闭数据库连接,释放资源if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}return matchedLogs;}
}
【任务11.3】实现匹配物流信息的数据库保存和查询功能,修改物流业务类TransportService,在该类中增加两个方法,分别用于保存匹配的物流信息和查询匹配的物流信息
// 匹配物流信息保存到数据库,参数是集合public void saveMatchTransportToDB(List<MatchedTransport> matchTrans) {}// 从数据库中读匹配物流信息,返回匹配物流信息集合
public List<MatchedTransport> readMatchedTransportFromDB() {}
程序设计
package com.qst.dms.service;import com.qst.dms.entity.MatchedTransport;
import com.qst.dms.entity.Transport;
import com.qst.dms.exception.DataAnalyseException;
import com.qst.dms.gather.TransportAnalyse;
import com.qst.dms.util.AppendObjectOutputStream;
import com.qst.dms.util.DBUtil;
import java.io.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;public class TransportService {private static final String saveFile = "MatchedTransport.dat";private Scanner scanner;public TransportService() {scanner = new Scanner(System.in);}public Transport inputTransport() {int transportType;int id, type;Date nowDate;String address, handler, receiver;while (true) {try {System.out.println("请输入ID标识:");id = scanner.nextInt();nowDate = new Date();System.out.println("请输入地址:");address = scanner.next();type = Transport.GATHER;System.out.println("请输入货物经手人:");handler = scanner.next();System.out.println("请输入收货人:");receiver = scanner.next();System.out.println("请输入物流状态(1表示发货中,2表示送货中,3表示已签收):");transportType = scanner.nextInt();if (transportType == 1 || transportType == 2 || transportType == 3) {break;} else {throw new IllegalArgumentException("非法的物流状态");}} catch (Exception e) {System.out.println("输入错误,请重新输入");scanner.nextLine();}}return new Transport(id, nowDate, address, type, handler, receiver, transportType);}public void showTransport(List<Transport> transports) {System.out.println("物流信息:");for (Transport transport : transports) {System.out.println(transport);}}// 匹配物流信息输出,参数是集合public void showMatchTransport(List<MatchedTransport> matchTrans) {System.out.println("匹配物流信息:");for (MatchedTransport matchTran : matchTrans) {System.out.println(matchTran);}}// 保存public static void saveTransport(List<Transport> transports) {try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();FileOutputStream fileOut = new FileOutputStream(file, true);AppendObjectOutputStream objOut = new AppendObjectOutputStream(file);for (Transport transport : transports) {objOut.writeObject(transport);}objOut.close();fileOut.close();System.out.println("匹配物流信息保存成功\n");} catch (IOException e) {System.out.println("保存匹配物流信息发生异常:" + e.getMessage() + "\n");}}//匹配public static ArrayList<MatchedTransport> readMatchTransport() {ArrayList<MatchedTransport> matchedTransports = new ArrayList<>();List<Transport> transports = readTransport();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 创建物流数据分析对象TransportAnalyse ta = new TransportAnalyse(transports);// 物流数据过滤ta.doFilter();try {// 物流数据分析List<MatchedTransport> objs = ta.matchData();// 判断objs集合是否是匹配物流集合if (objs instanceof List<?>) {// 将集合强制类型转换成匹配物流集合matchedTransports = (ArrayList<MatchedTransport>) objs;}} catch (DataAnalyseException e) {System.out.println(e.getMessage());}objIn.close();fileIn.close();System.out.println("匹配物流信息读取完成\n");} catch (IOException e) {System.out.println("读取匹配物流信息发生异常:" + e.getMessage() + "\n");}return matchedTransports;}//显示public static List<Transport> readTransport() {List<Transport> transports = new ArrayList<>();try {AppendObjectOutputStream.setFile(new File(saveFile));File file = AppendObjectOutputStream.getFile();if (!file.exists()) {file.createNewFile();}FileInputStream fileIn = new FileInputStream(file);// 创建一个ObjectInputStream对象输入流,并连接文件输入流ObjectInputStream objIn = new ObjectInputStream(fileIn);// 使用异常处理和EOFException异常处理读取结束try {while (true) {Transport transport = (Transport) objIn.readObject();transports.add(transport);}} catch (EOFException e) {// 读取结束,不做任何操作}objIn.close();fileIn.close();System.out.println("物流信息读取完成\n");} catch (IOException | ClassNotFoundException e) {System.out.println("读取物流信息发生异常:" + e.getMessage() + "\n");}return transports;}// 匹配日志信息保存到数据库,参数是集合public static void saveMatchTransportToDB() {ArrayList<MatchedTransport> matchTrans = readMatchTransport();List<Transport> sendList = new ArrayList<>();List<Transport> tranList = new ArrayList<>();List<Transport> recList = new ArrayList<>();List<Transport> transports = readTransport();Connection conn = null;try {DBUtil db = new DBUtil();conn = db.getConnection();for (MatchedTransport matchTran : matchTrans){int send = matchTran.getSend().getId();int tran = matchTran.getTrans().getId();int rec = matchTran.getReceive().getId();for (Transport transport : transports){if (transport.getId() == send){sendList.add(transport);}else if(transport.getId() == tran){tranList.add(transport);}else if(transport.getId() == rec){recList.add(transport);}}}String querySqllogsend = "INSERT INTO send VALUES (?, ?, ?, ?, ?, ?, ?)";for (Transport transport: sendList) {Object[] queryParams = {transport.getId(), transport.getTime(), transport.getAddress(), transport.getType(), transport.getHandler(), transport.getReciver(), transport.getTransportType()};db.executeUpdate(querySqllogsend, queryParams);}System.out.println("保存匹配物流中的发送日志成功");String querySqllogtran = "INSERT INTO tran VALUES (?, ?, ?, ?, ?, ?, ?)";for (Transport transport: tranList) {Object[] queryParams = {transport.getId(), transport.getTime(), transport.getAddress(), transport.getType(), transport.getHandler(), transport.getReciver(), transport.getTransportType()};db.executeUpdate(querySqllogtran, queryParams);}System.out.println("保存匹配物流中的运输日志成功");String querySqllogrec = "INSERT INTO receive VALUES (?, ?, ?, ?, ?, ?, ?)";for (Transport transport: recList) {Object[] queryParams = {transport.getId(), transport.getTime(), transport.getAddress(), transport.getType(), transport.getHandler(), transport.getReciver(), transport.getTransportType()};db.executeUpdate(querySqllogrec, queryParams);}System.out.println("保存匹配物流中的接收日志成功");// 保存匹配日志的IDString querySqlmatch = "INSERT INTO matchtrans VALUES (?, ?, ?)";for (MatchedTransport matchtran : matchTrans) {Object[] queryParams = {matchtran.getSend().getId(), matchtran.getTrans().getId(), matchtran.getReceive().getId()};db.executeUpdate(querySqlmatch, queryParams);}System.out.println("保存匹配物流的ID成功");db.commitAll();} catch (Exception e) {e.printStackTrace();} finally {// 关闭数据库连接,释放资源if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}public static ArrayList<MatchedTransport> readMatchedTransportFromDB() {DBUtil db = new DBUtil();Connection conn = null;ArrayList<MatchedTransport> matchedtrans = new ArrayList<>();try {conn = db.getConnection();// 查询匹配的日志String querySqlmatchedtrans = "SELECT * FROM matchtrans";ResultSet matchedtransResult = db.executeQuery(querySqlmatchedtrans,null);while (matchedtransResult.next()) {int sendId = matchedtransResult.getInt("sendid");int tranId = matchedtransResult.getInt("tranid");int recId = matchedtransResult.getInt("recid");Transport sendList = new Transport();String querySqlsendList = "SELECT * FROM send WHERE id = ?";Object[] sendListParams = { sendId };ResultSet sendResult = db.executeQuery(querySqlsendList, sendListParams);if (sendResult.next()) {sendList.setId(sendResult.getInt("id"));sendList.setTime(sendResult.getDate("time"));sendList.setAddress(sendResult.getString("address"));sendList.setType(sendResult.getInt("type"));sendList.setHandler(sendResult.getString("handler"));sendList.setReciver(sendResult.getString("receiver"));sendList.setTransportType(sendResult.getInt("trantype"));Transport tranList = new Transport();String querySqltranList = "SELECT * FROM tran WHERE id = ?";Object[] tranListParams = { tranId };ResultSet tranListResult = db.executeQuery(querySqltranList, tranListParams);if (tranListResult.next()) {// 设置登出记录的属性值tranList.setId(tranListResult.getInt("id"));tranList.setTime(tranListResult.getDate("time"));tranList.setAddress(tranListResult.getString("address"));tranList.setType(tranListResult.getInt("type"));tranList.setHandler(tranListResult.getString("handler"));tranList.setReciver(tranListResult.getString("receiver"));tranList.setTransportType(tranListResult.getInt("trantype"));Transport recList = new Transport();String querySqlrecList = "SELECT * FROM receive WHERE id = ?";Object[] recListParams = { recId };ResultSet recListResult = db.executeQuery(querySqlrecList, recListParams);if (recListResult.next()) {// 设置登出记录的属性值recList.setId(recListResult.getInt("id"));recList.setTime(recListResult.getDate("time"));recList.setAddress(recListResult.getString("address"));recList.setType(recListResult.getInt("type"));recList.setHandler(recListResult.getString("handler"));recList.setReciver(recListResult.getString("receiver"));recList.setTransportType(recListResult.getInt("trantype"));// 添加匹配登录信息到匹配集合MatchedTransport matchedLog = new MatchedTransport( sendList, tranList, recList);matchedtrans.add(matchedLog);}recListResult.close();}tranListResult.close();}sendResult.close();}matchedtransResult.close();} catch (Exception e) {e.printStackTrace();} finally {// 关闭数据库连接,释放资源if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}return matchedtrans;}
}
【任务11.4】在com.qst.dms.dos下创建测试类DBDemo,测试匹配的日志、物流信息的数据库保存和读写功能
测试数据如下:
new LogRec(1001, new Date(), "青島",DataBase.GATHER, "zhangsan", "192.168.1.1", 1),
new LogRec(1002, new Date(), "青島", DataBase.GATHER, "zhangsan", "192.168.1.1", 0)));
new LogRec(1003, new Date(), "北京",DataBase.GATHER, "lisi", "192.168.1.6", 1),
new LogRec(1004, new Date(), "北京", DataBase.GATHER, "lisi", "192.168.1.6", 0)));
new LogRec(1005, new Date(), "济南",DataBase.GATHER, "wangwu", "192.168.1.89", 1),
new LogRec(1006, new Date(), "济南", DataBase.GATHER, "wangwu", "192.168.1.89", 0)));new Transport(2001, new Date(), "青島",DataBase.GATHER,"zhangsan","zhaokel",1),
new Transport(2002, new Date(), "北京",DataBase.GATHER,"lisi","zhaokel",2),
new Transport(2003, new Date(), "北京",DataBase.GATHER,"wangwu","zhaokel",3)));
new Transport(2004, new Date(), "青島",DataBase.GATHER,"maliu","zhaokel",1),
new Transport(2005, new Date(), "北京",DataBase.GATHER,"sunqi","zhaokel",2),
new Transport(2006, new Date(), "北京",DataBase.GATHER,"fengba","zhaokel",3)))
程序设计
package com.qst.dms.dos;import com.qst.dms.entity.*;
import com.qst.dms.service.LogRecService;
import com.qst.dms.service.TransportService;import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class DBDemo {public static void main(String[] args) {// 测试数据List<LogRec> logs = new ArrayList<>();logs.add(new LogRec(1001, new Date(), "青島", DataBase.GATHER, "zhangsan", "192.168.1.1", 1));logs.add(new LogRec(1002, new Date(), "青島", DataBase.GATHER, "zhangsan", "192.168.1.1", 0));logs.add(new LogRec(1003, new Date(), "北京", DataBase.GATHER, "lisi", "192.168.1.6", 1));logs.add(new LogRec(1004, new Date(), "北京", DataBase.GATHER, "lisi", "192.168.1.6", 0));logs.add(new LogRec(1005, new Date(), "济南", DataBase.GATHER, "wangwu", "192.168.1.89", 1));logs.add(new LogRec(1006, new Date(), "济南", DataBase.GATHER, "wangwu", "192.168.1.89", 0));LogRecService.saveLogRec(logs);LogRecService.saveMatchLogToDB();// 从数据库读匹配日志信息ArrayList<MatchedLogRec> matchlogs = LogRecService.readMatchedLogFromDB();System.out.println("匹配日志信息如下:");for(MatchedLogRec matchlog :matchlogs){System.out.println(matchlog);}List<Transport> transports = new ArrayList<>();transports.add(new Transport(2001, new Date(), "青島", DataBase.GATHER, "zhangsan", "zhaokel", 1));transports.add(new Transport(2002, new Date(), "北京", DataBase.GATHER, "lisi", "zhaokel", 2));transports.add(new Transport(2003, new Date(), "北京", DataBase.GATHER, "wangwu", "zhaokel", 3));transports.add(new Transport(2004, new Date(), "青島", DataBase.GATHER, "maliu", "zhaokel", 1));transports.add(new Transport(2005, new Date(), "北京", DataBase.GATHER, "sunqi", "zhaokel", 2));transports.add(new Transport(2006, new Date(), "北京", DataBase.GATHER, "fengba", "zhaokel", 3));TransportService.saveTransport(transports);TransportService.saveMatchTransportToDB();ArrayList<MatchedTransport> matchtrans = TransportService.readMatchedTransportFromDB();System.out.println("匹配物流信息如下:");for (MatchedTransport matchtran : matchtrans){System.out.println(matchtran);}}
}
【任务11.5】将数据的数据库保存和读取功能,集成到MenuDriver,并进行测试
程序设计
package com.qst.dms.dos;import com.qst.dms.entity.LogRec;
import com.qst.dms.entity.MatchedLogRec;
import com.qst.dms.entity.MatchedTransport;
import com.qst.dms.entity.Transport;import com.qst.dms.service.LogRecService;
import com.qst.dms.service.TransportService;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class MenuDriver {public static void main(String[] args) {// 建立一个从键盘接收数据的扫描器Scanner scanner = new Scanner(System.in);// 创建一个泛型ArrayList集合存储日志数据List<LogRec> logRecList = new ArrayList<>();// 创建一个泛型ArrrayList集合存储物流数据List<Transport> transportList = new ArrayList<>();// 创建一个日志业务类LogRecService logService = new LogRecService();// 创建一个物流业务类TransportService tranService = new TransportService();// 日志数据匹配集合List<MatchedLogRec> matchedLogs = null;// 物流数据匹配集合List<MatchedTransport> matchedTrans = null;// 运行菜单选择while (true) {System.out.println("请选择操作:");System.out.println("1. 采集数据");System.out.println("2. 数据匹配");System.out.println("3. 显示数据");System.out.println("4. 退出");// 接收键盘输入的选项try {int choice = scanner.nextInt();int type;switch (choice) {case 1:System.out.println("请输入采集数据类型:1.日志 2.物流");// 接收键盘输入的选项type = scanner.nextInt();if (type == 1) {System.out.println("正在采集日志数据,请输入正确信息,确保数据的正常采集!");// 采集日志数据LogRec log = logService.inputLog();// 将采集的日志数据添加到logRecList集合中logRecList.add(log);LogRecService.saveLogRec(logRecList);LogRecService.saveMatchLogToDB();} else if (type == 2) {System.out.println("正在采集物流数据,请输入正确信息,确保数据的正常采集!");// 采集物流数据Transport tran = tranService.inputTransport();// 将采集的物流数据添加到transportList集合中transportList.add(tran);TransportService.saveTransport(transportList);TransportService.saveMatchTransportToDB();}break;case 2:System.out.println("请输入匹配数据类型:1.日志 2.物流");// 接收键盘输入的选项type = scanner.nextInt();if (type == 1) {System.out.println("匹配日志数据如下:");// 数据匹配LogRecService.readMatchedLogFromDB();} else if (type == 2) {System.out.println("匹配物流数据如下:");// 数据匹配TransportService.readMatchedTransportFromDB();}break;case 3:System.out.println("请输入显示原始数据类型:1.日志 2.物流");// 接收键盘输入的选项type = scanner.nextInt();if (type == 1) {// 显示日志数据LogRecService.readLogRec();} else if (type == 2) {// 显示物流数据TransportService.readTransport();}break;case 4:System.out.println("谢谢使用!");return;default:System.out.println("无效选项,请重新选择!");}} catch (Exception e) {System.out.println("非法输入,请重新输入!");scanner.nextLine();}}}
}
测试