我正在用Java创建一个程序,我需要比较csv文件中的数据是否与mysql表中的数据完全相同?我该怎么做?例如,我有一张桌子";Suplyers";其中列";Id、Name和Adress";。感谢
下面是我读取csv文件并连接到数据库并显示表中数据的代码。
您可以将CSV数据和DB数据收集到String的列表中,然后使用
equals
:比较列表public static List<String> readCsvData() { List<String> csvData = new ArrayList<>(); // use try-with-resources to auto close reader try (BufferedReader csvReader = new BufferedReader(new FileReader("C:\Users\User\Desktop\ficheiros\fornecedores.csv"))){ String row; while ((row = csvReader.readLine()) != null) { String[] data = row.split(","); row = String.join("t", data[0], data[1], data[2]); System.out.println(row); csvData.add(row); } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } return csvData; } public static void initDb() { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } } public static List<String> readDbData(){ initDb(); String url = "jdbc:mysql://127.0.0.1:3306/database"; String user = "user"; String password = "password"; String sql = "SELECT * FROM SUPLYERS"; List<String> dbData = new ArrayList<>(); // use try-with-resources to auto close SQL connection, etc. try (Connection conn = DriverManager.getConnection(url, user, password); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); ) { while (rs.next()) { String row = String.join("t", rs.getString(1), rs.getString(2), rs.getString(3)); System.out.println(row); dbData.add(row); } } catch (Exception exc) { exc.printStackTrace(); throw new RuntimeException(exc); } return dbData; } public static boolean areCsvDataSameAsDb() { List<String> csvData = readCsvData(); List<String> dbData = readDbData(); return csvData.equals(dbData); }
或者,您可以逐行读取数据,以便在检测到任何差异时立即进行快捷检查。