当前位置: 首页 > 知识库问答 >
问题:

计算SQLite DB中的表数

秦承安
2023-03-14

我正在创建一个备份系统,它记录使用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.
            }

共有1个答案

陈斌
2023-03-14

我认为我在评论中提供的链接可以解决问题,但让我详细说明如何使用它,以防我错了,或者我没有正确回答您的问题:

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命令行工具提供的。备份。转储命令。更多细节请看这篇文章。

 类似资料:
  • SQLiteDB 是基础的 SQLite 的 Swift 封装。SQLiteDB 非常简单,不提供任何高级的函数,不完全是 Swift 编写的,所以跟 Swift 调用 sqlite C API 的方法会有点不同。 SQL 查询示例:  let data = db.query("SELECT * FROM customers WHERE name='John'")    let row = dat

  • 问题内容: 我只想计算已经使用php在数据库中创建的表中的行数。我使用了mysqli()。我需要表中的行数作为输出。 问题答案: 实际上,这是一个常见问题,您可以在任何地方找到答案。 就像http://php.net/manual/en/mysqli-result.num- rows.php 您可以将这个问题分为两个 我想知道如何连接到mysql。 我想知道如何编写该sql指令。

  • 问题内容: 蟒蛇 我有一个清单清单。喜欢 我想计算每个列表在主列表中出现了多少次。 我的输出应该像 问题答案: 只需使用来自:

  • 问题内容: 例如 : 如何使用mysql计数此表的列? 问题答案:

  • 我正在用cypress做E2E测试。我必须计算表中的行数,每种情况都不同。 在正常的javascript中,我写这个只是为了得到列的总行数 不幸的是,在柏树我得到以下错误: 我试着这样数数但一无所获 我不知道它从哪里返回了行数

  • 问题内容: 我有一个布尔值列表: 并且我正在寻找一种方法来计算列表中的数量(因此,在上面的示例中,我希望返回值是。)我已经找到了一些示例,这些示例寻找特定元素的出现次数。因为我正在使用布尔运算,所以有效的方法吗?我在想类似或的东西。 问题答案: 等于。