如果表不存在,如何使用 Derby Db 创建表
我是新手,我似乎不能工作apache derby
CREATE TABLE IF NOT EXISTS table1 ...
如可以在等中实现。当我尝试在我的程序中运行此语句时,我得到了一个。MySql
'Syntax error: Encountered "NOT" at line 1, column 17.'
SQL
Java
我在 Derby Db Create 语句的文档页面中进行了检查,但找不到这样的替代方案。
我是新手,我似乎不能工作apache derby
CREATE TABLE IF NOT EXISTS table1 ...
如可以在等中实现。当我尝试在我的程序中运行此语句时,我得到了一个。MySql
'Syntax error: Encountered "NOT" at line 1, column 17.'
SQL
Java
我在 Derby Db Create 语句的文档页面中进行了检查,但找不到这样的替代方案。
创建表,捕获并检查 SQL 状态代码。SQLException
可以在此处找到错误代码的完整列表,但我找不到您需要的代码是 。表<值>已经存在
;它可能是X0Y68
。X0Y32
只需运行一次代码并打印错误代码。不要忘记添加一个测试以确保代码正常工作;这样,您可以捕获错误代码中的更改(不应该发生...)。
在我的项目中,我通常使用静态方法添加一个帮助器类,以便我可以编写:
} catch( SQLException e ) {
if( DerbyHelper.tableAlreadyExists( e ) ) {
return; // That's OK
}
throw e;
}
另一种选择是对表运行 a 并检查状态代码(应该是 )。但这是您需要发送的第二个命令,它不会提供任何其他信息。SELECT
42X05
更糟糕的是,它可能由于“表不存在”以外的其他原因而失败,因此“创建并忽略错误”是更好的IMO。
Derby 不支持该 sql 语句。
在我的程序中,我将数据库中的所有表解析为一个集,并检查该表是否存在。喜欢这个:
private Set<String> getDBTables(Connection targetDBConn) throws SQLException
{
Set<String> set = new HashSet<String>();
DatabaseMetaData dbmeta = targetDBConn.getMetaData();
readDBTable(set, dbmeta, "TABLE", null);
readDBTable(set, dbmeta, "VIEW", null);
return set;
}
private void readDBTable(Set<String> set, DatabaseMetaData dbmeta, String searchCriteria, String schema)
throws SQLException
{
ResultSet rs = dbmeta.getTables(null, schema, null, new String[]
{ searchCriteria });
while (rs.next())
{
set.add(rs.getString("TABLE_NAME").toLowerCase());
}
}