我编写了一个 Java 程序来执行以下操作,并希望对我的设计提出意见:
- 从 CSV 文件中读取数据。该文件是一个包含 6 列的数据库转储。
- 将数据写入 MySQL 数据库表。
数据库表如下:
CREATE TABLE MYTABLE
(
ID int PRIMARY KEY not null auto_increment,
ARTICLEID int,
ATTRIBUTE varchar(20),
VALUE text,
LANGUAGE smallint,
TYPE smallint
);
- 我创建了一个对象来存储每一行。
- 我使用 OpenCSV 将每一行读入 1 中创建的对象列表。
- 迭代这个对象列表并使用 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!");
}
}