目前我正在尝试开发具有多个代理的JADE应用程序,每个代理都连接到一个公共数据库。我知道如何管理SQLite应用程序,我没有任何问题,例如在一个JADE代理中显示表。
问题是:
我创建了3个共享相同SQLite数据库的代理,让我们称它们为A,B,C。 我从另一个代理Z立即运行它们 - 这个代理仅用于启动代理A,B和C. 代理应在从数据库中选择或插入数据时结束其工作。有时候,例如,代理人A做了他的工作,B和C没有。另一次代理商A和C做了他们的工作而B没有(这就像永远挂起)。我让不同的代理人结束了,但从来没有所有代理人一起完成他们的工作。
代码非常简单,所有代理都很相似:
protected void setup()
{
Object args[] = getArguments();
if (args.length > 0) {
id = args[0].toString();
}
addBehaviour(new CyclicBehaviour(this)
{
@Override
public void action()
{
Statement stmt = null;
try {
stmt = connection.createStatement();
String sql = "DROP TABLE IF EXISTS TblTemp;";
stmt.executeUpdate(sql);
stmt.close();
stmt = connection.createStatement();
sql = "CREATE TABLE TblTemp" +
"(AdID INT PRIMARY KEY NOT NULL," +
" CategoryID INT NOT NULL, " +
" Title TEXT NOT NULL, " +
" IsContext INT);";
stmt.executeUpdate(sql);
stmt.close();
stmt = connection.createStatement();
sql = "INSERT INTO TblTemp SELECT AdID, CategoryID, Title, IsContext FROM TblWHERE CategoryID="+id+";";
stmt.executeUpdate(sql);
stmt.close();
doDelete();
} catch ( SQLException e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
block();
}
}
});
}
绝不会有任何例外。
我做错了什么?
答案 0 :(得分:0)
删除此说明:
doDelete();