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