Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算SQLite数据库中的表数_Java_Sql_Jdbc - Fatal编程技术网

Java 计算SQLite数据库中的表数

Java 计算SQLite数据库中的表数,java,sql,jdbc,Java,Sql,Jdbc,我正在创建一个备份系统,它记录使用Java创建预先存在的数据库所需的SQL查询。我知道它有查询,但是我一辈子都不能让它在开始时列出所有的表创建查询,我有一个想法,得到数据库中表的数量,然后将创建表部分放在一个循环中,该循环运行数据库中表的运行次数,但是我遇到了一个障碍。使用JDBC实现这一点的最佳方法是什么?下面是我想循环的部分 while (/*loop contents here */) { ResultSet columns = da

我正在创建一个备份系统,它记录使用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.
            }
我认为这个问题可以解决,但让我详细说明如何使用它,以防我错了,或者我没有正确回答你的问题:

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数据库,使用SQLITE3命令行工具提供的<>代码>备份>代码>或<代码>。有关更多详细信息,请参阅

这有用吗?顺便说一句,如果您使用“.dump tablename”命令,如果我没有弄错的话,sqlite将返回所有的create命令,就像您手动编写的命令一样。@vefthym不是特别的,因为我想要的是表的数量而不是名称?除非你在暗示什么,而我太蠢/太累了以至于没有注意到?如果我正确理解你的问题,那么你需要查找表的数量,这样你就可以遍历每一个表,获取它们的名称并在create语句中使用它。我建议的链接提供的是一种遍历每个表名的方法,而不需要知道有多少个表。我看不到您的代码中有任何部分本身使用了表的数量。@vefthym我的代码当前输出一个创建表,然后为相关表插入所有表,然后移动到下一个创建表,等等。我希望它先创建每个表,然后在创建完所有表后输入所有内容。