我想为在线航空公司预订系统设计jbpm流程。作为第一步,我正在尝试为旅行者注册做进程,用户将注册他们的详细信息。当他们尝试注册它时,它必须将用户已经停止的详细信息存储在不同表中的db中。
我创建的流程。
开始节点 - >旅行者表格 - >注册任务 - >端
我在公共架构下的h2数据库中创建了名为ARS_traveller的表。
在自定义工作项处理程序中,我已经给出如下,但它通过错误找不到表。请建议连接数据库表的正确程序。
@Override
public void abortWorkItem(WorkItem arg0, WorkItemManager arg1) {
// TODO Auto-generated method stub
}
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
Context ctx;
try {
System.out.println("*********From direct connection**************");
Connection conn = this.getDirectConnection();
conn.setAutoCommit(true);
PreparedStatement stmt = conn
.prepareStatement("INSERT INTO ARS_TRAVELLER(NAME,EMAIL,USER_ID,PASSWORD,GENDER,"
+ "AGE,MOBILE_NO,ADDRESS,CREATED_ON,UNIQUECODE,VERIFIED) VALUES(?,?,?,?,?,?,?,?,?,?,?)");
stmt.setString(0, workItem.getParameter("Name").toString());
stmt.setString(1, workItem.getParameter("Email").toString());
stmt.setString(2, workItem.getParameter("UserId").toString());
stmt.setString(3, workItem.getParameter("Password").toString());
stmt.setString(4, workItem.getParameter("Gender").toString());
stmt.setInt(5,
Integer.parseInt(workItem.getParameter("Age").toString()));
stmt.setString(6, workItem.getParameter("MobileNo").toString());
stmt.setString(7, workItem.getParameter("Address").toString());
stmt.setDate(8, new Date((new java.util.Date()).getTime()));
stmt.setString(9, ((new java.util.Date()).getTime() + ""));
stmt.setBoolean(10, false);
stmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
manager.completeWorkItem(workItem.getId(), null);
}
private Connection getDirectConnection() {
Connection conn = null;
try {
String url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
Class.forName("org.h2.Driver");
conn = DriverManager.getConnection(url, "sa", "sa");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return conn;
}
答案 0 :(得分:1)
未找到表是一个直接错误,您要查找的表不存在。 1)您的连接信息可能不正确,并且您没有连接到预期的数据库。或2)如果您要连接到正确的数据库,则可能是表未创建,或者以某种方式删除了表。您是否有某种类型的应用程序来查看数据库中可用的表?如果不这样做,您可能需要查看JDBC DatabaseMetaData.getTables method以查看您的表是否存在。
这是我的理论。看起来您尝试使用的数据库与JBPM持久性数据库相同。我觉得每次重新部署JBPM环境时都会重新创建数据库,这会导致您的ARS_Traveller表被删除。我建议将您的应用程序数据保存到一个单独的数据库中。
除了使用单独的数据库,我还是会避免使用JDBC。它非常被弃用,并且比JPA更难维护。