2017-04-17 10 views
0

私は3つのクラスを作成し、それらをデータベースに接続してメインクラスを通して値を設定しようとしました。それから私はルールを発射しようとしていますが、出力が得られません。私はデータベースから値をフェッチし、それらを3つのクラスの変数に設定する必要があります。データベース(MySql)をdroolsプロジェクトに接続するにはどうすればいいですか?

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(); 
    } 

答えて

0

クエリの結果ごとに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を市と税に使用すると簡単にエラーにつながる可能性があります)。

+0

しかし、ループ内でksessionを使用することはできません。それは解決できないと言います。 –

+0

DBからデータを取得する前に、セッションを宣言して作成する必要があります。問題はどこですか? – laune

関連する問題