|
|
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Добрый день Нужно вставить в базу MySQL строку типа "1234\123\123'123232\n3434", как она есть, тобто экранировать \, \n, ' символы (все спец символы MySQL). PrepareStatement мне не пойдет, так уж сложилось... Может есть в JDBC есть готовая утилита для этого, или что-то другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 17:19 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
denis111111PrepareStatement мне не пойдет, так уж сложилось... Really? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 17:20 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
BlazkowiczReally? ага ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 17:22 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
так небывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 17:29 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Blazkowiczтак небывает Ошибка! Правильно "не бывает" :) Но вообще вдруг у человека обязательно использование API, которое принимает "строку запроса". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 17:59 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, Та я видел. Осечка. Был бы тут апдейт своих сообщений, исправил бы сразу. Любой даже чужой API можно перелопатить. Единственный сценарий, это если надо целиком SQL запрос с параметрами куда-то передавать удаленно через XML или другой недодуманный протокол и удаленно же исполнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 18:10 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Ок, припустим PreparedStatement можно использовать, но как мне вставить с его помощью много записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 18:33 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. Это правильный подход? делал еще так: Код: java 1. 2. 3. 4. Результат времени вставок 200 записей: Batch, size of records 100: 2422 Handle, size of records 100: 31 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 18:47 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
denis111111 Код: java 1. 2. 3. 4. 5. 6. 7. Это правильный подход? Нет. Вот пример правильного . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 08:46 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Alexey Tomindenis111111 Код: java 1. 2. 3. 4. 5. 6. 7. Это правильный подход? Нет. Вот пример правильного . Блин. С утра не заметил. Что за БД, что тормозит на батче? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 09:28 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
denis111111 Код: java 1. 2. 3. 4. 5. 6. 7. Это правильный подход? В общем- MySQL такая SQL, что везде надо напильник доставать. По медленной вставке в гуле немало есть, например вот . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 09:30 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
а кто мешает использовать такое? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 10:48 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
denis111111, Может поможет, не знаю работает ли. http://www.java2s.com/Code/Java/Data-Type/UnescapeanyMySQLescapesequences.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 11:12 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
0FD, В догонку, есть рекомендации http://stackoverflow.com/questions/2993251/jdbc-batch-insert-performance ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 11:17 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
из последней ссылки You can insert multiple rows with one insert statement, doing a few thousands at a time can greatly speed things up, that is, instead of doing e.g. 3 inserts of the form INSERT INTO tbl_name (a,b,c) VALUES(1,2,3); , you do INSERT INTO tbl_name (a,b,c) VALUES(1,2,3), (1,2,3),(1,2,3); (It might be JDBC .addBatch() does similar optimization now - though the mysql addBatch used to be entierly un-optimized and just issuing individual queries anyhow - I don't know if that's still the case with recent drivers) If you really need speed, load your data from a comma separated file with LOAD DATA INFILE , we get around 7-8 times speedup doing that vs doing tens of millions of inserts. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 11:25 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы Я так понял что MySQL драйвер не делает multiple insert, я тестировал скорость и вот что вышло: Handle, size of records 1000: 125 -- вставка происходит одним запросом типа INSERT INTO `parent` (`name`) VALUES (1), (1), (1)... Batch, size of records 1000: 26985 -- вставка через батч Simple, size of records 1000: 29218 -- вставка каждой записи оддельно 0FD На жаль это Unescape any MySQL escape sequences. не подходит , например из 'В\яче\слав' зделает 'Вячеслав', а должно быть 'В\\яче\\слав' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 12:15 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
denis111111, Ну а это пробовали? I had a similar performance issue with mysql and solved it by setting the useServerPrepStmts and the rewriteBatchedStatements properties in the connection url. пишут скорость увеличилась от 3 до 30 раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 12:40 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
0FD, Вот результат если прописать ?useServerPrepStmts=false&rewriteBatchedStatements=true: Handle, size of records 100: 47 Batch, size of records 100: 47 Simple, size of records 100: 2281 Это как раз то что нужно, спасибо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 12:48 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
Интересно с MariaDB такая же лажа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 12:49 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
как ни крути, а одним запросом типа INSERT INTO `parent` (`name`) VALUES (1), (1), (1)... будет быстрее, потому как все разделено, т.е. формирование sql строки через StringBuilder самое быстрое из возможных и выполнение полностью отдается серверу mysql. а Batch это дополнительная прослойка, требующая время. ну а чтоб экранировать можно воспользоваться регулярными выражениям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 13:14 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
denis1111110FD, Вот результат если прописать ?useServerPrepStmts=false&rewriteBatchedStatements=true: Handle, size of records 100: 47 Batch, size of records 100: 47 Simple, size of records 100: 2281 Это как раз то что нужно, спасибо) Не зря я не люблю мускл :) Я б попробовал insert into vvv (...) values (?),(?),(?) А потом навставлять параметров. Если ничего не треснет- может получится интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 14:09 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
а чем отличается insert into vvv (...) values (?),(?),(?) от одним запросом типа INSERT INTO `parent` (`name`) VALUES (1), (1), (1)... дополнительной прослойкой? второй вариант я даже реализовал в хранимке и выполнял с помощью PREPARE летает на ура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 14:23 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
вадяа чем отличается insert into vvv (...) values (?),(?),(?) от одним запросом типа INSERT INTO `parent` (`name`) VALUES (1), (1), (1)... Тем, что во тором варианте можно поиметь проблемы с sql-инъекциями, намеренными или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 14:41 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
а впервом, кто мешает вместо вопроса инъекцию вставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 14:45 |
|
||
|
Подготовка строки для SQL вставки
|
|||
|---|---|---|---|
|
#18+
вадяа чем отличается insert into vvv (...) values (?),(?),(?) от одним запросом типа INSERT INTO `parent` (`name`) VALUES (1), (1), (1)... дополнительной прослойкой? Собственно второй вариант не подходит автору, т.к. у него в строке всякие чудеса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2014, 14:45 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38580802&tid=2127543]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 452ms |

| 0 / 0 |
