0


ファイル「.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);
}

私を助けてくれてありがとう。

4

0 に答える 0