mid*_*nhk 26 java database derby
我是新手,apache derby似乎无法开展工作
CREATE TABLE IF NOT EXISTS table1 ...
Run Code Online (Sandbox Code Playgroud)
如可以在实现MySql等我收到'Syntax error: Encountered "NOT" at line 1, column 17.'的时候我尝试运行这个SQL在我的发言Java程序.
我查看了Derby Db Create Statements的文档页面,但找不到这样的替代方案.
Aar*_*lla 25
创建表,捕获SQLException并检查SQL状态代码.
完整的错误代码列表可以在这里 找到,但我找不到你需要的代码是Table <value> already exists; 它可能是X0Y68.X0Y32.
只需运行一次代码并打印错误代码即可.不要忘记添加测试以确保代码有效; 这样,您可以捕获错误代码中的更改(不应该发生...).
在我的项目中,我通常使用静态方法添加一个辅助类,所以我可以写:
} catch( SQLException e ) {
if( DerbyHelper.tableAlreadyExists( e ) ) {
return; // That's OK
}
throw e;
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是SELECT针对表运行并检查状态代码(应该是42X05).但这是您需要发送的第二个命令,它不提供任何其他信息.
更糟糕的是,它可能由于"表不存在"之外的其他原因而失败,因此"创建并忽略错误"是更好的IMO.
oer*_*ers 12
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());
}
}
Run Code Online (Sandbox Code Playgroud)
Derby 数据库不支持您正在执行的查询。相反,如果您知道表的名称,您可以很容易地找到表是否存在。
public boolean isTableExist(String sTablename) throws SQLException{
if(connection!=null)
{
DatabaseMetaData dbmd = connection.getMetaData();
ResultSet rs = dbmd.getTables(null, null, sTablename.toUpperCase(),null);
if(rs.next())
{
System.out.println("Table "+rs.getString("TABLE_NAME")+"already exists !!");
}
else
{
System.out.println("Write your create table function here !!!");
}
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
值得注意的是,要以大写形式指定表名称,否则您将无法在元数据中找到表名称。
检查表是否存在:
Connection con = DriverManager.getConnection(url);
ResultSet res = con.getMetaData().getTables(null, Schema_Name, table_name.toUpperCase(), null);//Default schema name is "APP"
if(res.next())
{
//do some thing;
}else{
JOptionPane.showMessageDialog(null, table_name +" not exist");
}
Run Code Online (Sandbox Code Playgroud)
显示所有表名称:
Connection con = DriverManager.getConnection(url);
ResultSet res = con.getMetaData().getTables(null, Schema_Name, "%", null);//Default schema name is "APP"
while(res.next())
{
JOptionPane.showMessageDialog(null, res.getString(3) + " is exist");//Show table name
}else{
JOptionPane.showMessageDialog(null, table_name +" not exist");
}
Run Code Online (Sandbox Code Playgroud)