Java 计算SQLite数据库中的表数
我正在创建一个备份系统,它记录使用Java创建预先存在的数据库所需的SQL查询。我知道它有查询,但是我一辈子都不能让它在开始时列出所有的表创建查询,我有一个想法,得到数据库中表的数量,然后将创建表部分放在一个循环中,该循环运行数据库中表的运行次数,但是我遇到了一个障碍。使用JDBC实现这一点的最佳方法是什么?下面是我想循环的部分Java 计算SQLite数据库中的表数,java,sql,jdbc,Java,Sql,Jdbc,我正在创建一个备份系统,它记录使用Java创建预先存在的数据库所需的SQL查询。我知道它有查询,但是我一辈子都不能让它在开始时列出所有的表创建查询,我有一个想法,得到数据库中表的数量,然后将创建表部分放在一个循环中,该循环运行数据库中表的运行次数,但是我遇到了一个障碍。使用JDBC实现这一点的最佳方法是什么?下面是我想循环的部分 while (/*loop contents here */) { ResultSet columns = da
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我的代码当前输出一个创建表,然后为相关表插入所有表,然后移动到下一个创建表,等等。我希望它先创建每个表,然后在创建完所有表后输入所有内容。