【问题标题】:How to connect a Database(MySql) with drools project?如何将数据库(MySql)与 drools 项目连接?
【发布时间】:2017-04-17 05:18:24
【问题描述】:

我创建了三个类,并尝试通过将主类连接到数据库来设置它们的值。然后我试图触发规则,但我没有得到输出。我必须从数据库中获取值并将它们设置为三个类的变量。

static int pid;
static int mrp;
static int cid;
static float tax;
static String pname;
static String cname;
public static void main(String[] args)
{

    try
    {
    Class.forName("com.mysql.jdbc.Driver");
    Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/abhi","root","abhinav");
    Statement ps=cn.createStatement()   ;
    ResultSet rs=ps.executeQuery("select * from product ");
    while(rs.next())
    {
     pid=rs.getInt(1);
     pname=rs.getString(2);
    mrp=rs.getInt(3);
    }
    Statement ps1=cn.createStatement();
    ResultSet rs1=ps1.executeQuery("select * from city");


    while(rs1.next())
    {
        cid=rs1.getInt(1);
        cname=rs1.getString(2);
    }
    Statement ps2=cn.createStatement();
    ResultSet rs2=ps2.executeQuery("select * from tax");
    while(rs2.next())
    {
        cid=rs2.getInt(1);
        pid=rs2.getInt(2);
        tax=rs2.getFloat(3);
    }


    KnowledgeBase kbase = readKnowledgeBase();
    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
    Product p=new Product();
    p.setPid(pid);
    p.setPname(pname);
    p.setMrp(mrp);
    ksession.insert(p);
    City c=new City();
    c.setCid(cid);
    c.setCname(cname);
    ksession.insert(c);
    Tax t=new Tax();
    t.setCid(cid);
    t.setPid(pid);
    t.setTax(tax);
    ksession.insert(t);
    ksession.fireAllRules();
    }
    catch(Throwable t)
    {
        t.printStackTrace();
    }

【问题讨论】:

    标签: java mysql drools mysqlconnection


    【解决方案1】:

    您必须为查询的每个结果插入一个对象作为事实,例如

    ResultSet rs=ps.executeQuery("select * from product ");
    while(rs.next()){
      int pid = rs.getInt(1);
      String pname = rs.getString(2);
      int mrp = rs.getInt(3);
      Product p = new Product();
      p.setPid(pid);
      p.setPname(pname);
      p.setMrp(mrp);
      ksession.insert(p);
    }
    
    // same for City and Tax ...
    
    ksession.fireAllRules();
    

    在使用它们的地方声明变量。 (对城市和税收使用全局 cid 很容易导致错误。)

    【讨论】:

    • 但我不能在循环内使用 ksession。它说它无法解决。
    • 在从数据库获取数据之前,您必须声明并创建会话 - 问题出在哪里?
    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多