错误处理
正如错误处理页面中所解释的那样,Java 类方法可能不返回任何值(void)、返回一个表示对象自动 ID 的长整型值,或者返回一个表示成功或失败的布尔值。这些返回代码的常规处理方式很简单。例如:
if (cursor.search(Cursor.Operation.GreaterThan, search_value))
{
for (Obj o : cursor)
{
Console.Write("(" + o.value + ") ");
}
}
这里,由 Cursor 方法 search() 返回的布尔值 true 使得 for() 循环得以执行。以及:
@Persistent(autoid = true)
class Department
{
@Indexable(Type=Database.IndexType.BTree, unique=true)] // Declare unique tree index by "code" field
public String code;
public String name;
}
...
long autoid = con.insert(dept);
这里,带有属性 @Persistent(autoid = true) 的类 Department 的定义表明,对象 autoid 将从 Connection 方法 insert() 中返回。
处理致命的错误
然而,每当出现致命错误时,都会抛出一个异常,指示错误的来源。在适当的地方,应使用 try-catch 块来管理这些异常,将其作为 DatabaseError 对象,其 errorCode 属性包含整数错误代码。这些返回代码的含义在 mco.h 中定义。(请参阅 C API 返回代码以获取完整列表。) 例如,以下是一个典型的 try-catch 块,用于处理打开数据库时可能出现的错误:
try
{
db.open("opendb", params, devs); // Open In-Memory database.
showRuntimeInfo(db2);
}
catch (DatabaseError dbe)
{
// Code 66 means duplicate instance. Valid case for SHM configuration
if (dbe.errorCode != 66)
{
throw dbe;
}
}