LINUX.ORG.RU

sqlite java


0

0

имеется следующий код (java)

ToDayCallDB.open("C:\\CALL_DB\\" +frmt.format(ToDay)+".db", 0 );

for( int i =0; i <1000; i++) {

String req_string = new String("insert into SRC_TBL values(");

req_string =req_string.concat(Integer.toString(i));

req_string =req_string.concat(",'");

req_string =req_string.concat("NNNNNNN");

req_string =req_string.concat("');");

request.execute(req_string);

ToDayCallDB.exec(req_string, null);

}

Просто пример. Добавляю в простую таблицу 1000 записей это занимает почти 2 минуты и заметил что диск постоянно активный. У кого какие соображения ? Почему так долго? Аналогичная программа

на Си меньше 2 секунд работает. Или потамучто это JAVA мать её .... ??

anonymous

Возможно, проблема с драйвером. Еще посоветую заменить String на StringBuffer, создать его перед циклом, потом очищать когда нужно. Java медленно работает со String конкантенациями, лучше использовать StringBuffer.

lexius ★★
()

[я зануда]

а в каком месте пересекаются "программирование и разработка ПО под Linux/Unix" и "C:\\CALL_DB\\" +frmt.format(ToDay)+".db"?

[хинт]

"C:\\CALL_DB\\" обычно выносится в properties файл - и прицепиться будет не к чему.

Pi ★★★★★
()
Ответ на: комментарий от Pi

====>

[я зануда]

а в каком месте пересекаются "программирование и разработка ПО под Linux/Unix" и "C:\\CALL_DB\\" +frmt.format(ToDay)+".db"?

[хинт]

=======>

В линуксе таже проблема

anonymous
()

> заметил что диск постоянно активный. У кого какие соображения ?

Может быть, у тебя в драйвере БД стоит что-то вроде autocommit, и SQLite считает каждый INSERT транзакцией и фиксирует ее. Это объяснило бы дисковую активность. Попробуй отключить autocommit или объявлять начало/конец транзакции явно - методами драйвера или "BEGIN TRANSACTION"/"COMMIT".

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.