2013-08-19 25 views
1

首先關閉它,這裏是我的代碼:獲取ResultSet是封閉的例外,但我沒有在代碼

public void getGK() 
{ 

add(p4); 
setSize(1200,700); 
setLocation(30,17); 
p4.setVisible(true); 
p4.setLayout(null); 

final CheckboxGroup cg=new CheckboxGroup(); 

final JLabel q=new JLabel(); 
final JButton b6=new JButton("Submit"); 


b6.setBounds(150,250,80,50); 
q.setBounds(40,40,1000,50); 
q.setForeground(Color.RED); 
q.setFont(new Font("Castellar",Font.BOLD,15)); 
p4.add(l1); 
try 
{ 

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    co=DriverManager.getConnection("jdbc:odbc:Quizdata","",""); 
    st=co.createStatement(); 



    final String s2="SELECT * FROM GK Where ID="+lx[n]; 
    re=st.executeQuery(s2); 



    q.setText(re.getString(2)); 
     p4.add(q); 
    final Checkbox c5=new Checkbox(); 
    final Checkbox c1=new Checkbox(re.getString(3),cg,false); 
    final Checkbox c2=new Checkbox(re.getString(4),cg,false); 
    final Checkbox c3=new Checkbox(re.getString(5),cg,false); 
    final Checkbox c4=new Checkbox(re.getString(6),cg,false); 
    c1.setBounds(40,100,400,20); 
     c2.setBounds(40,130,400,20); 
     c3.setBounds(40,160,400,20); 
     c4.setBounds(40,190,400,20); 
     p4.add(c1); 
     p4.add(c2); 
     p4.add(c3); 
     p4.add(c4); 
     p4.add(b6); 


    re.; 
    final String s3=re.getString("Answer"); 
    b6.addActionListener(new ActionListener() 
    { 
    @Override 
    public void actionPerformed(ActionEvent e) { 


     if(s3.equals(cg.getSelectedCheckbox().getLabel())) 
    { 
    System.out.println("THis is correct bwoy " +cg.getSelectedCheckbox().getLabel());  
    n++; 
    score++; 
    remove(p4); 
    p4.removeAll(); 
    if(n<10) 
    { 
     getGK(); 
    } 

    else 
    { 
     System.out.println("Thanks for playing"); 
    } 
    } 
    else 

    { 
    System.out.println("You are wrong"); 
    } 

    } 


    }); 

    co.close(); 
    st.close(); 



    } 
    catch(Exception z) 
    { 
     JOptionPane.showMessageDialog(null,z); 
    }  


    }  

正如你可以看到我並沒有關閉ResultSet重,但我仍然得到Resulset關閉例外。 如何解決它。代碼還有一個問題,當面板刪除所有組件並再次添加新組件時,複選框可以正常工作,但標籤不會更改,我必須將框架大小化以更改它。 PLZ儘快解決這個問題。

P.S.-這裏的LX [],n是通過這個代碼來:

ArrayList<Integer> num=new ArrayList<Integer>(); 
    for(int it=1;it<=10;it++) 
    { num.add(it);} 




    for(int jt=0;jt<lx.length;++jt) 
    { 
     int i=(int)(Math.random()*num.size()); 
    lx[jt]=num.get(i); 
     num.remove(i); 
    } 
+0

你可以請縮進你的代碼正確。這是不可讀的。 –

+0

@Himanshu你可以請發佈完整的錯誤堆棧跟蹤? – Rohan

回答

2

您要關閉陳述 - 將被關閉的結果集了。從docs for ResultSet

時生成它的Statement對象被關閉時,重新執行,或用於檢索從多個結果的序列中的下一結果的ResultSet對象將自動關閉。

你應該提取結果立即設置所有的相關數據,然後在finally塊關閉它(和語句和連接) - 或Java 7中我會使用在try-與資源聲明也強烈建議您將您的UI代碼與數據訪問代碼分開。 (你目前的「用戶界面」也似乎是一個控制檯應用程序(System.out.println)和奇怪的混合,這是奇怪的...)

+0

所以如果我不關閉聲明會影響我的程序嗎? – Himanshu

+0

@Himanshu:是的,你會有潛在的資源泄漏 - 就像打開文件句柄一樣。通過立即提取數據然後關閉數據庫相關資源來正確解決問題*。 –

+0

@John Skeet:標籤問題呢?在每一個遞歸調用它不能正常工作..你能幫助嗎.. PS-其實這只是我的代碼的一部分(或者你可以說原型)我不會使用UI和控制檯應用程序的混合..這只是爲了檢查我的代碼是否正常工作.. :) – Himanshu

相關問題