
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.07.2012, 18:20:24
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
Здравствуйте. Происходит совсем непонятная для меня вещь. Код: java 1. 2. 3. В итоге к India и Pune добавляются пробелы! INSERT INTO server_connections(account_id,ip_address,version,direct_port,local_ip_address,mac_address,country,city) VALUES(1,'1.1.1.1','3.0.2.9',3478,'192.168.0.2',' ',' India',' Pune') В чем дело? Заранее огромное спасибо за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2012, 19:27:35
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
Скорее всего тип столбцов char. Нужен varchar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2012, 20:14:50
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
Йуный джавистЪСкорее всего тип столбцов char. Нужен varchar.даскуяле :) строка после формата ещё не вставляется никуда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2012, 20:18:28
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavel, http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax вкратце - %1s и %1$s отличаются друг от друга и почему не просто %s? и почему String.format, а не StringBuilder? и почему String.format, а не connection.prepareStatement("insert ... (account_id, ..., country, city) values (?, ..., ?, ?)") и далее statement.setLong(1, 1), statement.setString(7, "India"), statement.setString(8, "Pune") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 11:15:27
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
grasoff.netGorloPavel, http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax вкратце - %1s и %1$s отличаются друг от друга и почему не просто %s? и почему String.format, а не StringBuilder? и почему String.format, а не connection.prepareStatement("insert ... (account_id, ..., country, city) values (?, ..., ?, ?)") и далее statement.setLong(1, 1), statement.setString(7, "India"), statement.setString(8, "Pune") Помогло %s Хм... не совсем понял про... Я использую коннектор Mysql. И разве у StringBuilder есть format? Или вы предлагали сформировать строку запроса, а потом выполнить ее? Спасибо. Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 14:06:06
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelconnection.prepareStatement("insert ... (account_id, ..., country, city) values (?, ..., ?, ?)") и далее statement.setLong(1, 1) только так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 14:10:18
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha, Что только так? У меня даже такого метода нет *.setLong... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 14:23:34
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelchpasha, Что только так? только так и можно делать инсерты, в которых участвуют параметры типа string. GorloPavelУ меня даже такого метода нет *.setLong... поищи получше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 14:35:39
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha, Ок. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Используется mysql connector 5.1.1.8 . Я что-то делаю не так? Заранее огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 14:40:20
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
Так что ли? Но в чем преимущество? Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 14:49:22
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelТак что ли? Но в чем преимущество? автор 1) "Query is rewritten and compiled once by the database server" If you don't use a prepared statement, the database server will have to parse, and compute an execution plan for the statement each time you run it. If you find that you'll run the same statement multiple times (with different parameters) then its worth preparing the statement once and resuing that prepared statement. If you are querying the database adhoc then there is probably little benifit to this. 2) "Protected against SQL injection" This is an advantage you almost always want hence a good reason to use a PrepareStatement everytime. Its a consequence of having to parameterise the query but it does make running it a lot safer. The only time I can think of that this would not be useful is if you were allowing adhoc database queries; You might simply use the Statement object if you were prototyping the application and its quicker for you, or if the query contains no parameters ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 15:03:17
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha, Спасибо вам большое! Век живи - век учись! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 15:07:37
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha, И еще вопрос... Т.е правильнее будет сделать в самом начале один раз сохранив глобальную ссылку на объект... Код: java 1. Ну а потом каждый раз делать... Код: java 1. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 15:39:05
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelchpasha, Век живи - век учись! судя по приведенным кускам кода, ты не представляешь себе, на сколько ты в начале пути ;) GorloPavelИ еще вопрос... Т.е правильнее будет сделать в самом начале один раз сохранив глобальную ссылку на объект... нет. так делать не стоит, поимеешь больше проблем, чем выгоды. главный смысл использования preparedstatement именно разруливание проблем с параметрами (и это уже не мало) плюс еще кое-чего. остальные упомянутые ранее плюшки можно получить только если у тебя есть повторяющееся действия. если например твой инсерт нужно в цикле несколько раз выполнить. P.S. советую погуглить про connection pooling, spring-ioc , spring-jdbc, это для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 15:45:12
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha, Т.е если это у меня делается в synchronized методе, а этот метод вызывается примерно из ~3000 потоков, то придется обойтись String.Format? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:02:01
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelТ.е если это у меня делается в synchronized методе, а этот метод вызывается примерно из ~3000 потоков если у тебя 3000 потоков натыкаются на один synchronized метод, то какой смысл в 3000 потоков? либо каждому потоку нужен свой коннект и свой statement либо потоки занимаются основной работой, а результаты их деятельности мы кладем пачками в базу некоторым количеством других потоков, гораздо меньшим 3000. т.е. главное что? главное правильно организовать архитектуру. а многопоточность это вообще вещь в себе. GorloPavel, то придется обойтись String.Format? почти никогда. даже использование голого jdbc оправданно в довольно редких случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:17:52
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha, Ок. Мое приложение это TCP сервер и метод используется для авторизации. Помимо Insert-a перед ним выполняется Select. Он вызывается потоком один раз за всю его жизнь. Ранее было так, что в каждом потоке использовалось отдельное подключение к СУБД. Но возникала другая проблема... При практически одновременном подключении нескольких тысяч клиентов MYSQL сходил с ума и зависал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:30:08
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelchpasha, Он вызывается потоком один раз за всю его жизнь. это не важно. мы ведь не хотим авторизовать пользователя drop tables; ты пытаешься наступить здесь на грабли именуемые преждевременная оптимизация, т.е. сэкономить на спичках отказываясь от prepared statement. GorloPavel Ранее было так, что в каждом потоке испо льзовалось отдельное подключение к СУБД. Но возникала другая проблема... При практически одновременном подключении нескольких тысяч клиентов MYSQL сходил с ума и зависал...и тут мы добрались до темы connection pooling. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:34:37
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpashaGorloPavelchpasha, Он вызывается потоком один раз за всю его жизнь. это не важно. мы ведь не хотим авторизовать пользователя drop tables; ты пытаешься наступить здесь на грабли именуемые преждевременная оптимизация, т.е. сэкономить на спичках отказываясь от prepared statement. GorloPavel Ранее было так, что в каждом потоке испо льзовалось отдельное подключение к СУБД. Но возникала другая проблема... При практически одновременном подключении нескольких тысяч клиентов MYSQL сходил с ума и зависал...и тут мы добрались до темы connection pooling. Не понял причем тут drop tables ? Разве можно удалить таблицу запросом вида select что-то from таблица where drop tables? К тому же если использовать prepared statement, то мне придется каждый раз создавать объект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:36:08
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha, connection pooling. Соединение мне нужно дважды. При авторизации и отключении клиента. Зачем мне держать подключение в пуле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:49:47
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelРазве можно удалить таблицу запросом вида select что-то from таблица where drop tables? Код: sql 1. 2. 3. GorloPavelК тому же если использовать prepared statement, то мне придется каждый раз создавать объект? придется. и? GorloPavelconnection pooling. Соединение мне нужно дважды. При авторизации и отключении клиента. у тебя общение с базой происходит только во время авторизации? потом посетитель в крестики-нолики с сервером играет? GorloPavelЗачем мне держать подключение в пуле? потому что установка соединения дорогостоящая операция. а удержание соединения оборачивается тем, что коннектов на всех не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:56:33
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
chpasha потом посетитель в крестики-нолики с сервером играет? Да. Типо того. Операций с БД не производится. Т.е сейчас так. Подключился клиент... Объект сессии добавляется в synchronizedList(необходимо для связи с другими объектами-соединениями) ,вызвает synchronized функцию в которой делается select с drop table и если все нормально, то клиент играет в "крестики-нолики". Как только ему надоело играть, то он отключается... При отключении вызывается опять же synchronized функция которая пишет в лог. Далее объект удаляется из synchronizedList. При этом все работает довольно быстро и с одним соединением к СУБД. Плоха реализация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 16:58:28
|
|||
|---|---|---|---|
|
|||
Бага Java или недостаток знаний? |
|||
|
#18+
Да... Соединение с СУБД создается при старте программы один раз и до конца ее работы. Так как же избавится от инъекций? Только через PrepareStatement? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 17:01:23
|
|||
|---|---|---|---|
Бага Java или недостаток знаний? |
|||
|
#18+
GorloPavelПлоха реализация?ну если база нужна только для этого...но все равно не спортивно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2131336]: |
0ms |
get settings: |
14ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
101ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 309ms |
| total: | 551ms |

| 0 / 0 |
