-3

SQL データベースへの書き込みを高速化できますか? より少ない時間で TestLetturaScritturaDatabase.sqlite を取得したいと思います。読むことは問題ではありませんが、書くことは私の目標にはあまり適していません。私のソフトウェアは毎秒何度も小さな部分を書き込みます。これらのパーツの数を減らし、各パーツのレコード数を増やすことはできませんか?

package sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestLetturaScritturaDatabase {

    public static void main(String[] args) throws ClassNotFoundException,
            SQLException {
        double tempoPRINCIPALE = System.nanoTime();
        double tempo = System.nanoTime();
        int i;
        int j;
        int k;
        int CAMPI = 100;
        int RECORD = 100000;
        Double[][] MATRICE = new Double[RECORD][CAMPI];
        for (j = 0; j < RECORD; j++) {
            for (k = 0; k < CAMPI; k++) {
                MATRICE[j][k] = (double) (j - k);
            }
        }
        Class.forName("org.sqlite.JDBC").getInterfaces();
        String nome = "jdbc:sqlite:TestLetturaScritturaDatabase.sqlite";
        Connection conn = DriverManager.getConnection(nome);
        Statement stat = conn.createStatement();
        stat.executeUpdate("DROP TABLE IF EXISTS matrice");
        String TABELLA = "CREATE TABLE matrice (id INTEGER PRIMARY KEY AUTOINCREMENT";
        for (i = 0; i < CAMPI; i++) {
            TABELLA = TABELLA + ", '" + i + "' REAL";
        }
        TABELLA = TABELLA + ")";
        String Inserisci = "INSERT INTO matrice ('";
        stat.executeUpdate(TABELLA);
        for (j = 0; j < RECORD; j++) {
            for (k = 0; k < CAMPI; k++) {
                if (k < CAMPI - 1) {
                    Inserisci = Inserisci + k + "', '";
                } else {
                    Inserisci = Inserisci + k + "') VALUES ('";
                }
            }
            for (k = 0; k < CAMPI; k++) {
                if (k < CAMPI - 1) {
                    Inserisci = Inserisci + MATRICE[j][k] + "', '";
                } else {
                    Inserisci = Inserisci + MATRICE[j][k] + "')";
                }
            }
            stat.executeUpdate(Inserisci);
            Inserisci = "INSERT INTO matrice ('";
        }
        System.out.println("Database creato con successo!\n");
        ResultSet rs = stat.executeQuery("SELECT * FROM matrice");
        System.out.println("Contenuto matrice:\n");
        while (rs.next()) {
            for (k = 1; k <= CAMPI + 1; k++) {
                if (k <= CAMPI) {
                    System.out.print(rs.getString(k) + " ");
                } else {
                    System.out.println(rs.getString(k));
                }
            }
        }
        conn.close();
        stat.close();
        rs.close();
    }
}

バグのある新しいコード:

public static void main(String[] args) throws ClassNotFoundException,
            SQLException {
        Class.forName("org.sqlite.JDBC").getInterfaces();
        Connection conn = DriverManager
                .getConnection("jdbc:sqlite:test.sqlite");
        conn.setAutoCommit(false);
        Statement stat = conn.createStatement();
        stat.executeUpdate("DROP TABLE IF EXISTS people");
        stat.addBatch("CREATE TABLE people (id INTEGER PRIMARY KEY AUTOINCREMENT, nome TEXT NOT NULL, occupation, vote NULL)");
        stat.addBatch("INSERT INTO people (nome, occupation) VALUES ('Peruzzo','Unable')");
        stat.addBatch("INSERT INTO people (nome, occupation) VALUES ('Piyush','Clever')");
        stat.addBatch("INSERT INTO people (nome, occupation,vote) VALUES ('Stackoverflow', 'Professionals','10')");
        stat.addBatch("UPDATE people SET nome = 'Mario Peruzzo' WHERE nome = 'Peruzzo';");
        stat.executeBatch();
        ResultSet rs = stat.executeQuery("SELECT * FROM people");
        while (rs.next()) {
            System.out.println("Nome: " + rs.getString("nome"));
            System.out.println("Lavoro: " + rs.getString("occupation"));
            System.out.println("Voto: " + (rs.getDouble("vote") * 2));
        }
        conn.close();
        stat.close();
        rs.close();
    }
4

1 に答える 1

3

Sun のドキュメントに記載されているBatch Updatesと組み合わせて使用​​できます。を使用してバッチ更新を行う前に、 をオフにします。PreparedStatementsAuto Commitconn.setAutoCommit(false)

于 2013-04-02T20:49:24.110 に答える