gpt4 book ai didi

mysql - 这个数据库转储设计好吗?

转载 作者:行者123 更新时间:2023-11-29 14:05:15 26 4
gpt4 key购买 nike

我编写了一个 Java 程序来执行以下操作,并希望对我的设计提出意见:

  1. 从 CSV 文件读取数据。该文件是一个包含 6 列的数据库转储。
  2. 将数据写入 MySQL 数据库表。

数据库表如下:

    CREATE TABLE MYTABLE
(
ID int PRIMARY KEY not null auto_increment,
ARTICLEID int,
ATTRIBUTE varchar(20),
VALUE text,
LANGUAGE smallint,
TYPE smallint
);
  1. 我创建了一个对象来存储每一行​​。
  2. 我使用 OpenCSV 将每一行读入在 1 中创建的对象列表中。
  3. 迭代此对象列表并使用PreparedStatements,将每一行写入数据库。

该解决方案应该能够很好地适应需求的变化,并展示出良好的方法、稳健性和代码质量。

这个设计看起来不错吗?

我尝试的另一种方法是使用“LOAD DATA LOCAL INFILE”sql 语句。这是一个更好的选择吗?

编辑:我现在使用 OpenCSV,它正在处理实际字段中包含逗号的问题。现在的问题是没有任何内容写入数据库。谁能告诉我为什么?

public static void exportDataToDb(List<Object> data) {
Connection conn = connect("jdbc:mysql://localhost:3306/datadb","myuser","password");

try{
PreparedStatement preparedStatement = null;
String query = "INSERT into mytable (ID, X, Y, Z) VALUES(?,?,?,?);";
preparedStatement = conn.prepareStatement(query);

for(Object o : data){
preparedStatement.setString(1, o.getId());
preparedStatement.setString(2, o.getX());
preparedStatement.setString(3, o.getY());
preparedStatement.setString(4, o.getZ());
}
preparedStatement.executeBatch();

}catch (SQLException s){
System.out.println("SQL statement is not executed!");
}
}

最佳答案

从纯粹的算法角度来看,除非您的源 CSV 文件很小,否则最好

  1. 准备插入语句
  2. 开始交易
  3. 从中加载一行(或几行)
  4. 将小批量数据插入数据库
  5. 当还剩下一些行时返回到 3
  6. 提交

这样,您就可以避免将整个转储加载到内存中。

但基本上,您可能最好使用LOAD DATA

关于mysql - 这个数据库转储设计好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14475193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com