2013-12-14 17 views
0

我有一些與Java應用程序和MySQL之間的連接問題。
這是我的文件(該文件很好地工作):如何在多個類上使用mysql連接?

import java.sql.*; 

import javax.swing.JFrame; 

public class MysqlConnect{ 

public static void main(String[] args) throws SQLException { 

    Connection conn = null; 
    String url = "jdbc:mysql://localhost:3306/"; 
    String dbName = "jdbctutorial"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "birthday"; 
    String password = "123456"; 
    try { 
     Class.forName(driver).newInstance(); 
     conn = DriverManager.getConnection(url+dbName,userName,password); 
     System.out.println("Connected to the database"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


} 
} 

可能「分離」主要和MySQL連接? 我的想法是這樣的:我有MysqlConnection文件和另一個GUI文件。 在GUi文件中我有一個按鈕(ADD),每當我點擊這個按鈕時,一些數據將被存儲到數據庫中。我的問題是我不知道如何運行查詢,因爲我需要Statement變量,Connection變量,等等。我想要做什麼?在同一個文件中執行mysqlConnection和GUI?我的另一個想法是做一個MysqlConnection類型的對象並使用該對象。並且這裏是問題:如果我刪除了(public void main .....)我在嘗試和捕捉時出錯。

對不起,如果我的英語不好,但我希望我說清楚。 在此先感謝。

+0

嘗試之前使用數據庫,也許學習的語言/公關的基礎知識系統會是一個好主意? –

回答

0

我從你的問題中瞭解到,你想製作一個應用程序來顯示GUI中數據庫的數據。也許你應該研究像MVC(模型 - 視圖 - 控制器)這樣的體系結構,在這種體系結構中,將模型表示爲數據庫中數據的表示形式,並將視圖作爲模型的圖形表示。

因爲它沒有想到應用某種架構,所以我建議您首先研究一下,做一點研究,然後實現您的系統。在研究MVC架構時,我建議您啓動here。這真的是你能想到的最簡單的例子。

關於您的數據庫連接:您的設置看起來不錯,但首先將它放在一個單獨的類中併爲其添加查詢功能。在執行該部分時,this會派上用場。之後,您可以讓Controller通過按鈕來調用數據庫來操作Model,它將更新MVC架構中的View(GUI)。

所以,不要把你的數據庫連接和你的Main或GUI放在同一個類中!這是一種糟糕的代碼風格,違反了Single Responsibility Principle,並且會在將來的開發中給您帶來更多麻煩!相反,請使用合適的架構

如果您需要進一步幫助,請隨時提問!我最近研究了這種東西,並提出了一個這樣的應用程序。

0

嗨RvanHeest非常感謝你爲你再寄一次嘗試做這樣的:
MysqlConnect.java

public class MysqlConnect{ 


    public Connection conn = null; 
    public String url = "jdbc:mysql://localhost:3306/"; 
    public String dbName = "jdbctutorial"; 
    public String driver = "com.mysql.jdbc.Driver"; 
    public String userName = "birthday"; 
    public String password = "123456"; 
    public String query="Select * From Person"; 
    public Statement stmt; 
    public ResultSet rs; 


    public void crearedatabase(){ 

     try { 

     Class.forName(driver).newInstance(); 
     conn = DriverManager.getConnection(url+dbName,userName,password); 
     System.out.println("Connected to the database"); 
     Statement stmt = conn.createStatement(); 

    } catch (Exception e) { 
     System.out.println("Error!!!"); 
    } 


    } 

} 和礦山桂類這樣的:
GUI文件:

................. 
    ................ 
MysqlConnect mysqlitem = new MysqlConnect(); 
     mysqlitem.crearedatabase(); 
     String query = "INSERT INTO persons(" 
      + "id" 
      + "name" 
      + "lastname" 
      + "date) " 
      + "VALUES(null,Maxim,Alexandru-Vasile,1990-12-28)"; 

     try{ 
      mysqlitem.rs=mysqlitem.stmt.executeQuery(query); 
     } 
     catch(Exception e1){ 
      System.out.println("Eroare"); 
     } 

關於「mysqlitem.rs = mysqlitem.stmt.executeQuery(query);」我有一個執行錯誤,我不知道如何解決.. 非常感謝你!

0

我遇到了同樣的問題。

我發現根本原因是你聲明stmt變量兩次。

你的代碼看起來應該像這樣:

public class MysqlConnect{ 
    public Connection conn = null; 
    public String url = "jdbc:mysql://localhost:3306/"; 
    public String dbName = "jdbctutorial"; 
    public String driver = "com.mysql.jdbc.Driver"; 
    public String userName = "birthday"; 
    public String password = "123456"; 
    public String query="Select * From Person"; 
    public Statement stmt; 
    public ResultSet rs; 


    public void crearedatabase(){ 
     try { 
      Class.forName(driver).newInstance(); 
      conn = DriverManager.getConnection(url+dbName,userName,password); 
      System.out.println("Connected to the database"); 
      stmt = conn.createStatement(); 
     } catch (Exception e) { 
      System.out.println("Error!!!"); 
     } 
    } 
} 

注意修改到行18 「語句= conn.createStatement();」

0

我寫了這段代碼,在單獨的java文件上創建一個單獨的dbconnection類,它對我來說工作正常。

public class dbConnection{ 

public Connection getConnection() 
{ 
    String url = "jdbc:mysql://localhost:88/shop"; 
    String username = "root"; 
    String password = ""; 
    Connection con = null; 
    try 
    { 
     Class.forName("com.mysql.jdbc.Driver"); 
    } 
    catch (ClassNotFoundException e1) 
    { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try 
    { 
     con = DriverManager.getConnection(url, username, password); 
    } 
    catch (Exception e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return con; 
    } 
} 

//使用上述連接上DIFF類

----------- 
Connection con=new dbConnection().getConnection(); 
------------ 

貸計算器...

0
public class LoadDriver { 

public static void sqlDriver(String[] args) throws InstantiationException, 
     IllegalAccessException, ClassNotFoundException { 
    // TODO Auto-generated method stub 

    try { 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 

,並在你的主類

try { 
LoadDriver.sqlDriver(null);