2017-04-17 540 views
0

我已經創建了三個類,並試圖通過將它們連接到數據庫中來通過主類設置它們的值。然後我試圖解僱規則,但我沒有得到輸出。我必須從數據庫中獲取值並將它們設置爲三個類的變量。如何使用drools項目連接數據庫(MySql)?

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

您必須插入一個對象作爲每個查詢結果的事實,例如,

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

在從數據庫獲取數據之前,您必須先聲明並創建會話 - 問題在哪裏? – laune