Подсчет количества таблиц в БД SQLite - PullRequest
0 голосов
/ 28 февраля 2020

Я создаю систему резервного копирования, которая записывает SQL запросов, необходимых для создания ранее существующей базы данных, используя Java. У меня это до такой степени, что у него есть запросы, однако я не могу на всю жизнь заставить его перечислить все запросы на создание таблиц в начале, и у меня была идея получить количество таблиц в базе данных, а затем поместить создать часть таблицы в al oop, которая запускает количество раз, когда есть таблицы в базе данных, однако я нахожусь в затруднительном положении. Как лучше всего добиться этого, используя JDB C? Ниже приведен раздел, который я хочу l oop.

while (/*loop contents here */)
            {
                ResultSet columns = databaseMetaData.getColumns(null, null, currentTable, null);

                System.out.print("CREATE TABLE " + currentTable + " (");

                while(columns.next())
                {
                    String columnName = columns.getString("COLUMN_NAME");
                    String columnType = columns.getString("TYPE_NAME");
                    /*String selectCol = "SELECT * FROM " + currentTable;
                    ResultSet allColumns = statement.executeQuery(selectCol);*/
                    System.out.print(columnName + " " + columnType + ", ");
                }

                ResultSet PrimKey = databaseMetaData.getPrimaryKeys(null, null, currentTable);
                System.out.print("PRIMARY KEY (");

                while(PrimKey.next())
                    {
                        if(!PrimKey.isFirst())
                        {
                            System.out.print(", ");
                        }
                        System.out.print(PrimKey.getString("COLUMN_NAME"));
                    }

                    System.out.print(")");

                ResultSet ForKey = databaseMetaData.getImportedKeys(null, null, currentTable);

                while(ForKey.next())
                {
                    if(!ForKey.isFirst())
                    {
                        System.out.print("FOREIGN KEY (" + ForKey.getString("PKCOLUMN_NAME") + ")");
                        System.out.print(" REFERENCES " + ForKey.getString("FKTABLE_NAME") + "(" + ForKey.getString("FKCOLUMN_NAME") + ")");                
                    }
                }
                System.out.print("); \n");//Ends the sql query.
            }

1 Ответ

0 голосов
/ 28 февраля 2020

Я думал, что ссылка , которую я предоставил в комментариях , решит проблему, но позвольте мне подробнее рассказать о том, как ее использовать, в случае, если я ошибся или не понял ваш вопрос правильно:

ResultSet rs = databaseMetaData.getTables(null, null, "%", null);
while (rs.next()) {
    String currentTable = rs.getString(3));
    ResultSet columns = ...// the rest of your code goes here as is
}

Если, процитировав ваш вопрос, ваша проблема в том, что:

Я не могу заставить себя перечислить все запросы на создание таблицы в начале

Предложение: вы можете рассмотреть более простые и менее подверженные ошибкам способы резервного копирования базы данных sqlite, например, с помощью команд .backup или .dump, которые инструмент командной строки sqlite3 предлагает. Смотрите этот пост для более подробной информации.

...