ファイル「.xls」からデータを読み取り、それらをローカルデータベースsqliteに保存する簡単なJavaプログラムを作成しました。Ubuntu 12.04 と Mac OSX でこれらのデータを保存するのにかかる時間について、いくつかの問題が発生しています。これらの操作 (行の挿入) は、Mac OSX (約 32 秒) よりも Ubuntu の方がはるかに長く (約 15 分) かかることを確認しました。
誰かが問題を解決するのを手伝ってくれますか?
ここに私のコードを添付しました。PS: 私の英語で申し訳ありません。
Main.java
public static void main(String[] args)
throws IOException, BiffException, ClassNotFoundException, SQLException, WriteException {
Main obj = new Main();
if(!Database.access().exists()) {
Database.access().connect("Proteomic.db");
System.out.println("Uploading data from workSheets to database...");
obj.storeSheets("/Users/.../Desktop/File nurr1 vs ctrl-1"+".xls");
}
...
メソッド storeSheets
public void storeSheets(String path) throws IOException, BiffException, SQLException
{
Workbook workbook = Workbook.getWorkbook(new File(path));
String intestazione = new String();
number_sheets = workbook.getNumberOfSheets();
for(int k=0;k<number_sheets;k++)
{
Sheet sheet = workbook.getSheet(k);
String s_name = sheet.getName();
int numeroRighe = sheet.getRows();
int numeroColonne = sheet.getColumns();
...
...
Database.access().createTable(s_name);
for(int i=1;i<numeroRighe;i++) {
cond=false; //condizione necessaria per non inserire righe parzialmente vuote
for(int j = 0; j <= numeroColonne; j++) {
...
...
}
//query per l'inserimento
if(cond==true) {
val.add("NULL");
Database.access().insertRow(s_name,val); //insert operation
val.clear();
}
}
}
}
クラス Database.java
public class Database {
...
...
//other attributes and methods
public void insertRow(String name,ArrayList<String> vv) throws SQLException {
Statement stat=(Statement) con.createStatement();
String str1="INSERT INTO "+name+" "+"VALUES(";
for(int i=0;i<vv.size();i++) {
if(i==vv.size()-1)
str1+=vv.get(i);
else
str1+=vv.get(i)+",";
}
str1+=")";
stat.executeUpdate(str1);
}
私を助けてくれてありがとう。