计算SQLite数据库中的表数

问题描述 投票:0回答:1

我正在创建一个备份系统,该系统记录使用Java创建现有数据库所需的SQL查询。我要指出的是它具有查询,但是我一生都无法获得它来一开始就列出所有表创建查询,而且我有一个想法要获取数据库中的表数,然后将其放置在数据库中。在运行数据库中存在表的次数的循环中创建表部分,但是我遇到了障碍。使用JDBC实现此目标的最佳方法是什么?以下是我要循环的部分。

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.
            }
java sql jdbc
1个回答
0
投票

[我以为link I provided in comments可以解决问题,但是如果我错了,或者我没有正确回答您的问题,让我详细说明如何使用它:

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
}

就是如果引用您的问题,您的问题是:

我一生都无法从一开始就列出所有表创建查询

Suggestion:您可能想要考虑一种更简单且错误较少的方式来备份sqlite数据库,例如使用sqlite3命令行工具提供的.backup.dump命令。有关更多详细信息,请参见this post

© www.soinside.com 2019 - 2024. All rights reserved.