2015-08-10 4 views
2

ниже метод заключается в том, чтобы вставить записи в таблицу базы данных sqlite, и я знаю, что этот метод будет называться много раз из внутренних циклов.Оптимальный способ вставки значений в sqlite DB

Мой вопрос в том, является ли приведенный ниже код оптимальным способом вставки значений в таблицу БД, или может быть лучший подход по мере того, как важно время и производительность.

просим пожалуйста совет.

код:

public void insertValues(String name, int age, String address, String gender) throws SQLException, ClassNotFoundException { 
    Connection conn = getConnection(); 
    PreparedStatement ps = conn.prepareStatement("insert into "+TABLE_NAME+" ("+COL_1+", "+COL_2+", "+COL_3+", "+COL_4+") values (?, ?, ?, ?)"); 

    ps.setString(1, name); 
    ps.setLong(2, age); 
    ps.setString(3, address); 
    ps.setString(4, gender); 

    ps.addBatch(); 
    ps.executeBatch(); 

    ps.close(); 
    conn.close(); 
} 
+0

Вы не используете партию должным образом. Либо вы передаете несколько значений, и подготовьте партию и выполните ее один раз. Теперь вы добавляете один запрос в пакетном режиме и выполняете его. –

+0

@NamanGala любезно, пожалуйста, представим вам пример. – rmaik

+0

Вместо того чтобы передавать одно имя, возраст, адрес, пол, перечислить список dto. И в этом dto вы можете установить эти 4 значения. Затем повторите этот список в своем методе и выполните addBatch на итерации, после чего итерация закончится, вы можете вызвать executeBatch. –

ответ

1

Вы должны использовать пул соединений, а не открывать новое соединение для каждой вставки. Создание нового соединения для каждого запроса добавляет значительные накладные расходы - в большинстве случаев открытие соединения займет больше времени, чем фактическое выполнение запроса.

Если вы используете Spring, рассмотрите возможность использования Spring Boot, а затем обратитесь к http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database.

Spring boot будет автоматически настраивать пул соединений для вас - вам просто нужно добавить банки в classpath. Подробное руководство см. В разделе https://spring.io/guides/gs/relational-data-access/ JdbcTemplate предлагает удобный способ доступа к базам данных SQL (вы также можете рассмотреть Spring Data, это еще проще).

+0

, пожалуйста, укажите пример? – rmaik

+0

Я использую sqlite java – rmaik

+0

Вы на Android? –