[英]Is this database dump design ok?
我已經編寫了一個Java程序來執行以下操作,並希望對我的設計發表意見:
數據庫表如下:
CREATE TABLE MYTABLE
(
ID int PRIMARY KEY not null auto_increment,
ARTICLEID int,
ATTRIBUTE varchar(20),
VALUE text,
LANGUAGE smallint,
TYPE smallint
);
該解決方案應高度適應需求的變化,並具有良好的方法,魯棒性和代碼質量。
這樣的設計看起來還可以嗎?
我嘗試的另一種方法是使用“ 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文件很小,否則最好這樣做
這樣,您可以避免將整個轉儲加載到內存中。
但基本上,您最好使用LOAD DATA
。
如果沒有。 行數很大,則代碼將在步驟2中失敗,並顯示內存不足錯誤。 您需要找出一種方法來獲取大塊中的行,並使用該塊的准備好的語句執行批處理,然后繼續直到處理完所有行。 這將適用於任何否。 行和批處理將提高性能。 除此之外,我認為設計沒有任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.