我正在尝试使用JDBC在Oracle 11g数据库上执行DDL语句。我是使用boolean execute(String SQL)
类的Statement
来完成的。
以下是执行查询并尝试确定查询结果的代码段:
// Create a SQL string
String dropSql = "DROP TABLE Reviews";
stmt = conn.createStatement();
// Execute the query
boolean result = stmt.execute(dropSql);
// Get the result of the drop operation
if(result)
{
// Its a result set
System.out.println("Atleast one result set has been returned. Loop through them");
}
else
{
// Its an update count or no result
Integer updateCnt = stmt.getUpdateCount();
if(updateCnt == -1)
{
// No results
System.out.println("No results returned by the query");
}
else
{
// Update Count
System.out.println("Update Count: " + updateCnt);
}
}
我不是数据库人,但是有一种情况是DDL语句无法执行而不会引发SQLException
吗?如果没有,那么我不需要捕获execute方法返回的内容。缺少SQLException
表示DDL语句已成功执行。
我所关注的tutorial建议将此方法用于DDL语句:
boolean execute(String SQL) : ....... Use this method to execute SQL DDL statements or when you need to use truly dynamic SQL.
虽然Jdbc documentation建议使用int executeUpdate(String sql)
来执行DDL语句。哪一个在两者中首选?
答案 0 :(得分:5)
失败的语句将始终引发SQLException
,无论使用哪种方法执行它。 executeUpdate
适用于任何无法生成ResultSet
的语句,这使得它非常适合DDL语句。
答案 1 :(得分:3)
除非你将DDL包装在PL / QSL中并捕获异常,否则它将冒泡到JDBC调用。
至于哪一个使用,任何一个都可以正常工作,因为对于DDL,你应该忽略返回值。
与DML不同,DDL不会注册为"行数"所以只需使用try / catch来捕获失败,并假设在没有异常的情况下,它就成功了。