powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Бага Java или недостаток знаний?
42 сообщений из 42, показаны все 2 страниц
Бага Java или недостаток знаний?
    #37878790
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Происходит совсем непонятная для меня вещь.

Код: java
1.
2.
3.
country="India";
city ="Pune";
String str=String.format("INSERT INTO server_connections(account_id,ip_address,version,direct_port,local_ip_address,mac_address,country,city) VALUES(%1s,'%2s','%3s',%4s,'%5s','%6s','%7s','%8s')",1, "1.1.1.1","3.0.2.9",3478,"192.168.0.2","",country,city);



В итоге к 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')

В чем дело? Заранее огромное спасибо за ответы!
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37878851
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего тип столбцов char. Нужен varchar.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37878909
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪСкорее всего тип столбцов char. Нужен varchar.даскуяле :)
строка после формата ещё не вставляется никуда
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37878917
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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")
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879178
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
connection.prepareStatement("insert ... (account_id, ..., country, city) values (?, ..., ?, ?)") и далее statement.setLong(1, 1)
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879232
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelconnection.prepareStatement("insert ... (account_id, ..., country, city) values (?, ..., ?, ?)") и далее statement.setLong(1, 1)
только так
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879233
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Что только так? У меня даже такого метода нет *.setLong...
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879240
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelchpasha,
Что только так?
только так и можно делать инсерты, в которых участвуют параметры типа string.

GorloPavelУ меня даже такого метода нет *.setLong...
поищи получше
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879242
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Ок.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Connection hub_DB_Connection=null;

Class.forName("com.mysql.jdbc.Driver");

HUB_DB_URL= "jdbc:mysql://"+HUB_DB_HOST+"/"+HUB_DB_NAME+"?autoReconnect=true";
hub_DB_Connection = DriverManager.getConnection(HUB_DB_URL, HUB_USER_NAME, HUB_PASSWORD);
................................................


Statement command = hub_DB_Connection.createStatement();

command.нет_таких_методов



Используется mysql connector 5.1.1.8 . Я что-то делаю не так? Заранее огромное спасибо.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879245
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что ли? Но в чем преимущество?
Код: java
1.
2.
PreparedStatement cmd =(PreparedStatement) hub_DB_Connection.prepareStatement("", new String[] {"1"});
cmd.execute();
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879251
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879259
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Спасибо вам большое! Век живи - век учись!
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879264
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

И еще вопрос... Т.е правильнее будет сделать в самом начале один раз сохранив глобальную ссылку на объект...

Код: java
1.
cmd =(PreparedStatement) hub_DB_Connection.prepareStatement("...", new String[] {"1"});



Ну а потом каждый раз делать...
Код: java
1.
statement.setString(x, str);



Так?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879277
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelchpasha,
Век живи - век учись!
судя по приведенным кускам кода, ты не представляешь себе, на сколько ты в начале пути ;)

GorloPavelИ еще вопрос... Т.е правильнее будет сделать в самом начале один раз сохранив глобальную ссылку на объект...
нет. так делать не стоит, поимеешь больше проблем, чем выгоды. главный смысл использования preparedstatement именно разруливание проблем с параметрами (и это уже не мало) плюс еще кое-чего. остальные упомянутые ранее плюшки можно получить только если у тебя есть повторяющееся действия. если например твой инсерт нужно в цикле несколько раз выполнить.


P.S. советую погуглить про connection pooling, spring-ioc , spring-jdbc, это для начала.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879280
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Т.е если это у меня делается в synchronized методе, а этот метод вызывается примерно из ~3000 потоков, то придется обойтись String.Format?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879299
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelТ.е если это у меня делается в synchronized методе, а этот метод вызывается примерно из ~3000 потоков
если у тебя 3000 потоков натыкаются на один synchronized метод, то какой смысл в 3000 потоков? либо каждому потоку нужен свой коннект и свой statement либо потоки занимаются основной работой, а результаты их деятельности мы кладем пачками в базу некоторым количеством других потоков, гораздо меньшим 3000.

т.е. главное что? главное правильно организовать архитектуру. а многопоточность это вообще вещь в себе.

GorloPavel, то придется обойтись String.Format?
почти никогда. даже использование голого jdbc оправданно в довольно редких случаях.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879308
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Ок. Мое приложение это TCP сервер и метод используется для авторизации. Помимо Insert-a перед ним выполняется Select. Он вызывается потоком один раз за всю его жизнь. Ранее было так, что в каждом потоке использовалось отдельное подключение к СУБД. Но возникала другая проблема... При практически одновременном подключении нескольких тысяч клиентов MYSQL сходил с ума и зависал...
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879323
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelchpasha,
Он вызывается потоком один раз за всю его жизнь.
это не важно. мы ведь не хотим авторизовать пользователя drop tables; ты пытаешься наступить здесь на грабли именуемые преждевременная оптимизация, т.е. сэкономить на спичках отказываясь от prepared statement.

GorloPavel Ранее было так, что в каждом потоке испо
льзовалось отдельное подключение к СУБД. Но возникала другая проблема... При практически одновременном подключении нескольких тысяч клиентов MYSQL сходил с ума и зависал...и тут мы добрались до темы connection pooling.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879328
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaGorloPavelchpasha,
Он вызывается потоком один раз за всю его жизнь.
это не важно. мы ведь не хотим авторизовать пользователя drop tables; ты пытаешься наступить здесь на грабли именуемые преждевременная оптимизация, т.е. сэкономить на спичках отказываясь от prepared statement.

GorloPavel Ранее было так, что в каждом потоке испо
льзовалось отдельное подключение к СУБД. Но возникала другая проблема... При практически одновременном подключении нескольких тысяч клиентов MYSQL сходил с ума и зависал...и тут мы добрались до темы connection pooling.

Не понял причем тут drop tables ? Разве можно удалить таблицу запросом вида select что-то from таблица where drop tables?

К тому же если использовать prepared statement, то мне придется каждый раз создавать объект?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879329
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

connection pooling. Соединение мне нужно дважды. При авторизации и отключении клиента. Зачем мне держать подключение в пуле?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879338
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelРазве можно удалить таблицу запросом вида select что-то from таблица where drop tables?


Код: sql
1.
2.
3.
select * from users a where a.source='%s'
%s = admin';drop table test;select '1
%s = admin' or '1'='1



GorloPavelК тому же если использовать prepared statement, то мне придется каждый раз создавать объект?
придется. и?


GorloPavelconnection pooling. Соединение мне нужно дважды. При авторизации и отключении клиента.
у тебя общение с базой происходит только во время авторизации? потом посетитель в крестики-нолики с сервером играет?

GorloPavelЗачем мне держать подключение в пуле?

потому что установка соединения дорогостоящая операция. а удержание соединения оборачивается тем, что коннектов на всех не хватает.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879345
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha потом посетитель в крестики-нолики с сервером играет?
Да. Типо того. Операций с БД не производится. Т.е сейчас так. Подключился клиент... Объект сессии добавляется в synchronizedList(необходимо для связи с другими объектами-соединениями) ,вызвает synchronized функцию в которой делается select с drop table и если все нормально, то клиент играет в "крестики-нолики". Как только ему надоело играть, то он отключается... При отключении вызывается опять же synchronized функция которая пишет в лог. Далее объект удаляется из synchronizedList. При этом все работает довольно быстро и с одним соединением к СУБД. Плоха реализация?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879346
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да... Соединение с СУБД создается при старте программы один раз и до конца ее работы. Так как же избавится от инъекций? Только через PrepareStatement?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879347
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelПлоха реализация?ну если база нужна только для этого...но все равно не спортивно.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879348
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelТак как же избавится от инъекций? Только через PrepareStatement?проще всего так.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879350
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaGorloPavelТак как же избавится от инъекций? Только через PrepareStatement?проще всего так.

А что мешает вставить в statement.setString(1, "admin';drop table test;select '1")?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879370
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelА что мешает вставить в statement.setString(1, "admin';drop table test;select '1")?
действительно, что мешает? попробуй ;)
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879377
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Попробовал! Еще раз спасибО! :)
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879511
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelИли вы предлагали сформировать строку запросане. я ниче не предлагаю.
я показываю направление, или задаю вопросы :)
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879667
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал использовать PreparedStatement и сервер упал в Out of memory :(
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37879705
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНачал использовать PreparedStatement и сервер упал в Out of memory :(
Скорее всего не закрываете всё что нужно. Слишком много разных SQL операций на один метод, поэтому вам сложно проконтролировтаь все закрываемые ресурсы в одном методе.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37880282
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНачал использовать PreparedStatement и сервер упал в Out of memory :(

возьми spring-jdbc
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37881370
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Penkov VladimirGorloPavelНачал использовать PreparedStatement и сервер упал в Out of memory :(

возьми spring-jdbcили jdbi, что ещё приятнее )
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37882264
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaGorloPavelchpasha,
Век живи - век учись!
судя по приведенным кускам кода, ты не представляешь себе, на сколько ты в начале пути ;)

GorloPavelИ еще вопрос... Т.е правильнее будет сделать в самом начале один раз сохранив глобальную ссылку на объект...
нет. так делать не стоит, поимеешь больше проблем, чем выгоды. главный смысл использования preparedstatement именно разруливание проблем с параметрами (и это уже не мало) плюс еще кое-чего. остальные упомянутые ранее плюшки можно получить только если у тебя есть повторяющееся действия. если например твой инсерт нужно в цикле несколько раз выполнить.

P.S. советую погуглить про connection pooling, spring-ioc , spring-jdbc, это для начала.
А если селекты делать со связанными переменными, то выборка происходит обычно быстрее. Только бывает в жизни всякое, вот у нас, после обновления версии Оракла, если не ошибаюсь, что-то начудачили, и уже год, как все запросы в моих приложениях, переделаны без использования связанных переменных, потому-что так работает быстрее, как бы странно это ни звучало. Админы представления не имеют, что с этим делать.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37882300
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoАдмины представления не имеют, что с этим делать. - так оно всегда и бывает. когда никто не знает в чем дело, зачастую, решается абы как.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37882304
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczXDiaBLoАдмины представления не имеют, что с этим делать. - так оно всегда и бывает. когда никто не знает в чем дело, зачастую, решается абы как.
У меня были чёткие указания от начальника. Убрать использование связанных переменных. Решать проблему, задача мне не ставилась. :)
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37882487
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoА если селекты делать со связанными переменными, то выборка происходит обычно быстрее. Только бывает в жизни всякое, вот у нас, после обновления версии Оракла, если не ошибаюсь, что-то начудачили, и уже год, как все запросы в моих приложениях, переделаны без использования связанных переменных, потому-что так работает быстрее, как бы странно это ни звучало. Админы представления не имеют, что с этим делать.
Аналогично влетел при обновлении оракла у одного заказчика (админ там ... как бы сказать... самоучка предпенсионного возраста).
Если количество запросов относительно невелико, но они "тяжелые", то затраты на prepare Statment несущественны.

А количество открытых курсоров в оракле смотрел, которые соответствуют запросам а-ля executeSql("select filed from table") ?
Не напрягает?
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37882676
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу PreparedStatement. У меня был случай, когда НЕ prepared запрос выполнялся за секунды, а Prepared - оооочень долго (по 10 минут ждал).

MS SQL Server 2008 + jtds.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37883081
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBezXDiaBLoА если селекты делать со связанными переменными, то выборка происходит обычно быстрее. Только бывает в жизни всякое, вот у нас, после обновления версии Оракла, если не ошибаюсь, что-то начудачили, и уже год, как все запросы в моих приложениях, переделаны без использования связанных переменных, потому-что так работает быстрее, как бы странно это ни звучало. Админы представления не имеют, что с этим делать.
Аналогично влетел при обновлении оракла у одного заказчика (админ там ... как бы сказать... самоучка предпенсионного возраста).
Если количество запросов относительно невелико, но они "тяжелые", то затраты на prepare Statment несущественны.

А количество открытых курсоров в оракле смотрел, которые соответствуют запросам а-ля executeSql("select filed from table") ?
Не напрягает?
Ну да, вроде как раз что-то такое было, куча каких-то левых запросов возникало, пока не убрали связанные переменные.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37883082
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvПо поводу PreparedStatement. У меня был случай, когда НЕ prepared запрос выполнялся за секунды, а Prepared - оооочень долго (по 10 минут ждал).

MS SQL Server 2008 + jtds.
Точно такой случай у нас с Ораклом вышел. Отчего я и убрал связанные переменные из программ. Хотя когда-то вводил с совершенно противоположными целями, для ускорения.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37884732
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvПо поводу PreparedStatement. У меня был случай, когда НЕ prepared запрос выполнялся за секунды, а Prepared - оооочень долго (по 10 минут ждал).

MS SQL Server 2008 + jtds.
Разные запросы, поэтому и выполняются по разному. Для
Код: sql
1.
SELECT * FROM A WHERE A.B = ?

и партаметром "abc", эквивалентный SQL
Код: sql
1.
SELECT * FROM A WHERE A.B = N'abc'



С MS SQL проблема известная и легко излечимая. Java пользует unicode, и драйвер отправляет значения параметров как NVARCHAR. Если в запросе сравнивается поле CHAR/VARCHAR с значением из параметра, то сервер по тихому делает неявное преобразование. Только не параметра к типу поля, а наоборот. Оптимизатор индекса для Unicode значений не находит ( есть только для ASCII ) и сканирует всю таблицу.
Лечится переводом всех строк в базе к Unicode ( NCHAR/NVARCHAR ), принудительным CAST в запросе или параметром соединения для передачи всех строковых параметров как ASCII.

Безотносительно к PreparedStatement, с типами надо обращаться аккуратно, на те же проблемы легко нарваться и просто в SQL запросе или хранимой процедуре.
...
Рейтинг: 0 / 0
Бага Java или недостаток знаний?
    #37884871
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пролетевшийJava пользует unicode, и драйвер отправляет значения параметров как NVARCHAR. Если в запросе сравнивается поле CHAR/VARCHAR с значением из параметра, то сервер по тихому делает неявное преобразование. Только не параметра к типу поля, а наоборот. Оптимизатор индекса для Unicode значений не находит ( есть только для ASCII ) и сканирует всю таблицу.
Лечится переводом всех строк в базе к Unicode ( NCHAR/NVARCHAR ), принудительным CAST в запросе или параметром соединения для передачи всех строковых параметров как ASCII.

Я подсоединялся к сессии и явно видел что не работает индекс по дате. В маппинге было java.util.Date, в оракле поле типа Date.
Маппинг топлинка. Не могу понять, как тогда в принципе заставить это работать с датой? Не подскажете?
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Бага Java или недостаток знаний?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]