2014-12-06 63 views
-1

我的代码的问题是它无法将数据库中的数据设置到我的jtextfield中。每次运行我的代码时,都会显示StackOverflowError。我怎样才能解决这个错误?将数据库记录设置为jtextfield

这里是我的代码

public class DataConnect extends DatabaseGUI { 
    private Connection dataCon; 
    private Statement dataStmt; 
    private ResultSet dataRS; 
    private String name, address; 
    int age; 


    public DataConnect(){ 
     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 
      dataCon = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentrec","root",""); 
      dataStmt = dataCon.createStatement(); 
      dataRS = dataStmt.executeQuery("Select * from studentrecords"); 
     }catch(Exception exc){ 
      System.out.println(exc.getMessage()); 
     } 
    } 

    public void setData(){ 
     try{ 
      dataRS.next(); 
      name = dataRS.getString("Name"); 
      age = dataRS.getInt("Age"); 
      address = dataRS.getString("Address"); 
      DatabaseGUI dbGui = new DatabaseGUI(); 

      dbGui.jtfData[0].setText(name); 
      dbGui.jtfData[1].setText(Integer.toString(age)); 
      dbGui.jtfData[2].setText(address); 
      //System.out.println(name+" "+age+" "+address); 
     }catch(Exception exc){ 

     } 
    } 

} 
+0

...........你好? – 2014-12-09 22:31:12

回答

0

你的问题的一个可能的原因是在这里:

public class DataConnect extends DatabaseGUI { 
    //... 


    public DataConnect(){ 
     //... 
    } 

    public void setData(){ 
     try{ 

      DatabaseGUI dbGui = new DatabaseGUI(); //***** 

你正在创建一个扩展DatabaseGUI和风险无限递归类中的一个新的DatabaseGUI对象。解决方案:可能您不希望DataConnect扩展DatabaseGUI,或者您不想在DataConnect内部创建新的DatabaseGUI,或者两者都不是。如果您已经有一个显示的DatabaseGUI,那么您不想创建另一个未显示的数据库GUI,而是想要设置已显示的GUI组件的数据,而不是您在其上创建的新组件的数据点。

此外,我不得不怀疑 - 你是否在你的DatabaseGUI类中创建了一个DataConnect对象?您的问题可以通过进行一些调试来大大改善,以找出哪些代码特别会导致异常发生。

而且这个空catch块

catch(Exception exc){ 

} 

代码是不应该发生的。至少打印堆栈跟踪。