2014-11-03 88 views
0

我想要实现的程序,其中有访问数据库连接对象:从另一个类

  1. 甲的MySqlConnection类处理该数据库连接
  2. 要被存储为取得输入的GUI屏A类在DB
  3. 主类

我想打电话给在从Screen类的主要方法创建的MySqlConnection对象。

我到目前为止尝试过的 - 错误的 - 如下。非常感谢解决这个问题的指针。

提前致谢!

主类:

public class Main { 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        //Start main screen 
        Screen start = new Screen(); 
        start.setVisible(true); 
        //create db connection 
        **MySQLConnection sqlConn = new MySQLConnection(); 
        Connection con=sqlConn.connectToDatabase();** 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

MySQL连接类:

public class MySQLConnection { 
    public Connection connectToDatabase() {//connect to db } 
    public void addToDatabase(String tableName, ArrayList<String> columns, ArrayList<String> values) {//add a row to table in db} 
    public void closeConnection() {//close db connection} 
} 

AddScreen类:

public class Screen extends JFrame{ 
    ArrayList<String> mainValues= new ArrayList<String>(); 

    //Create GUI 
    public Screen(){ 
     ... 
     ArrayList<String> mainValues= new ArrayList<String>(); 
     String mainId = mainI.getText(); 
     String mainName = mainN.getText(); 
     mainValues.add(mainId); 
     mainValues.add(mainName); 
    } 

    public void saveToDatabase() { 
     String[] mainColumns= {"mid", "mname"}; 
     **con.addToDatabase("main_category", mainColumns, mainValues);** 
    } 
} 

回答

2

问题是Screen类无权访问MySQLConnection对象。有几种方法可以解决这个问题,最简单的方法是简单地将MySQLConnection对象传递给Screen类。

主营:

MySQLConnection sqlConn = new MySQLConnection(); 
Screen start = new Screen(sqlConn); 
start.setVisible(true); 

的MySqlConnection

private Connection con; 

public MySQLConnection() { 
    this.connectToDatabase(); 
} 

public void connectToDatabase() { 
    this.con = //connect to db 
} 

public void addToDatabase(String tableName, ArrayList<String> columns, ArrayList<String> values) {...} 

public void closeConnection() {...} 

屏幕:

private MySQLConnection sqlConn ; 

public Screen(MySQLConnection sqlConn){ 
    ... 
    this.sqlConn = sqlConn; 
    String mainId = mainI.getText(); 
    String mainName = mainN.getText(); 
    mainValues.add(mainId); 
    mainValues.add(mainName); 
} 

public void saveToDatabase() { 
    String[] mainColumns= {"mid", "mname"}; 
    sqlConn.addToDatabase("main_category", mainColumns, mainValues); 
} 
+0

谢谢!这工作,解释清楚。我得到一个新的错误“方法addToDatabase(...)是未定义的类型连接”,可以解析与铸造到MySQlConnection。有没有办法管理这个没有演员?谢谢! – dshgna 2014-11-03 11:31:28

+1

不确定您的要求。但是你可能想通过在'MySQLConnection'中包装'Connection'来改变设计。查看更新后的答案。 – Khalid 2014-11-03 12:07:35

+0

是的,这种方法的作品!谢谢! – dshgna 2014-11-04 08:18:30

1

在你的主类,你需要在Connection对象来获取返回值,

Connection con=sqlConn.connectToDatabase(); 

现在,con将持有连接对象。以便您可以使用它来正常查询数据库。

+0

尝试。但是,当试图使用con.addToDatabase(...)从屏幕内调用con时,仍然会得到“con无法解析” – dshgna 2014-11-03 10:38:41

+0

编辑的问题以反映更改 – dshgna 2014-11-03 10:40:58

+0

请确保已导入'java.sql.connection'类 – 2014-11-03 11:13:25