Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Динамический Запрос MySQL


Автор: Felixx 14.4.2009, 09:13
Привет всем, каким образом лучше сделать несколько почти одинаковых запросов в СКЛ?

На данный момент имеем..

Код

ResultSet rs = null;
ThreadConnection con = null;
FiltredPreparedStatement offline = null;
FiltredPreparedStatement offline2 = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
offline = con.prepareStatement("DROP TABLE IF EXISTS `table_1`;");
offline2 = con.prepareStatement("DROP TABLE IF EXISTS `table_2`;");
rs = offline.executeQuery();
rs = offline2.executeQuery();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
DatabaseUtils.closeDatabaseCSR(con, offline, rs);
}


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

Автор: Platon 14.4.2009, 09:16
http://dev.mysql.com/doc/refman/5.1/en/drop-table.html
Цитата

DROP TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...

Автор: Felixx 14.4.2009, 09:30
ну я немного про другое спрашивал...

вот я переделал

Код

                    String tables[] = {"npc", "items", "characters"};
                    for(int i = 0; i <= tables.length; i++)
                    {
                        String tname = tables[i];
                        ResultSet rs = null;
                        ThreadConnection con = null;
                        FiltredPreparedStatement offline = null;
                        try
                        {
                            con = L2DatabaseFactory.getInstance().getConnection();
                            offline = con.prepareStatement("DROP TABLE IF EXISTS `" + tname + "`;");
                            rs = offline.executeQuery();
                        }
                        catch(Exception e)
                        {
                            e.printStackTrace();
                        }
                        finally
                        {
                            DatabaseUtils.closeDatabaseCSR(con, offline, rs);
                        }
                    }


Хочу узнать, можно ли вообще так делать, или может есть способы получше, или надежнее?

Автор: Platon 14.4.2009, 09:46
Цитата(Platon @ 14.4.2009,  10:16)
http://dev.mysql.com/doc/refman/5.1/en/drop-table.html
Цитата

DROP TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...

Лучше и надежней.

Автор: Felixx 14.4.2009, 09:50
я не знаю как это применить на яве, пример можно ?  smile 

Автор: Connie 14.4.2009, 10:11
Felixx, а при чем тут java?
Или вопрос в том, что бы сформировать нужную строку из уже существующих строк?

Код

String sql = "DROP TABLE IF EXISTS ";
for(String item:table_names){
sql += item + ", ";
}
sql +=";"

Примерно так, тут код с ошибкой, дошлифуйте сами.

А далее 
Код

con = L2DatabaseFactory.getInstance().getConnection();
offline = con.prepareStatement(sql);
rs = offline.executeQuery();

Автор: math64 14.4.2009, 10:16
Код

String tables[] = {"npc", "items", "characters"};
StringBuffer sb = new StringBuffer("DROP TABLE IF EXISTS ");
for(int i = 0; i < tables.length) {
  if (i > 0)
    sb.append(',');
  sb.append('`').append(tables[i]).append('`');
}
sb.append(';');
offline = con.prepareStatement(sb.toString());

Автор: goodday1941 14.4.2009, 10:21
как насчет http://www.java-tips.org/other-api-tips/jdbc/how-to-execute-a-batch-process-with-jdbc.html

Добавлено через 1 минуту и 17 секунд
по сути он то сделает тоже самое что и разделение запросов через ";", но в плане программирования почетабельней будет

Автор: Felixx 14.4.2009, 10:24
Всем спасибо, буду пробовать, но уже новые идеи появились, буду ещо строку парсить, чтобы название таблицы было во введенном тексте...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)