2012-10-22 63 views
0

好吧我有點停留在一個地步,我不得不問在其他類中聲明使用變量

我有2類稱爲主和數據庫連接

在我DBCONNECT我所有的neccesary方法連接到一個數據庫,並在我的主類我創建的GUI,但問題是我宣佈我的主要變量(因爲它們由文本框代表),現在想要在我的dbconnect類中使用它們

我的dbconnect類看起來像跟隨

import javax.swing.*; 
import java.sql.*; 

public class DBCONNECT 
{ 
Connection conn; 
public void connect() 
{ 

    try 
    { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     conn = DriverManager.getConnection("jdbc:odbc:DriverConn"); 
    } 
    catch(Exception se) 
    { 
     JOptionPane.showMessageDialog(null, "Error: Could not load driver " + se.getMessage()); 
    } 
} 
public void dissconect() 
{ 
    try 
    { 
     conn.close(); 
    } 
    catch(Exception e) 
    { 
     JOptionPane.showMessageDialog(null, "Error : Could not close Database " + e.getMessage()); 
    } 
} 
public void writeToDB() 
{ 
    try 
    { 
     MAIN main = new MAIN(); 
     Statement st = conn.createStatement(); 
     String command1 = ("INSERT INTO Drivers (IDNumber, FirstName, LastName) VALUES" + drivID + FName + LName); 
     String command2 = "INSERT INTO Offences(IDNumber, SpeedLimit, DriverSpeed, SeatBelt, DrunkenDriving, DriversLicense) VALUES" + drivID + intspeed + intDSpeed + strSeat + strDrunk + strLicense; 
     String command3 = "INSERT INTO DriverPoints(IDNumber, Points) VALUES" + drivID + intpoints; 
    } 
} 
public ResultSet select(String sql) 
{ 
    try 
    { 
     Statement st = conn.createStatement(); 
     return st.executeQuery(sql); 
    } 
    catch(Exception e) 
    { 
     JOptionPane.showMessageDialog(null, "Error: Could not read from database"); 
    } 
    return null; 
} 
public int change (String sql) 
{ 
    try 
    { 
     Statement st = conn.createStatement(); 
     return st.executeUpdate(sql); 
    } 
    catch(Exception e) 
    { 
     JOptionPane.showMessageDialog(null, "Error: Could not Update Database"); 
    } 
    return -1; 
} 
} 

有人可以幫忙嗎?

+1

將它們作爲參數傳遞? - 哪些變量特別? – John3136

+0

這些:+ drivID + intspeed + intDSpeed + strSeat + strDrunk + strLicense;他們都在我的主要貴班 –

回答

1

這是很容易通過所需的變量作爲方法調用的參數。即你的writeToDB()方法就像writeToDB(String drivId,...)。

但是,如果您有其他的邏輯好比說要驗證是否drivId是正確的格式等等,那麼你應該創建一個單獨的類控股要在數據庫中保存的屬性。所以從你的文本小部件,你將更新這個對象,然後調用驗證方法等,然後將其傳遞給數據庫處理程序。這將從視圖中分離模型相關數據。

2

聲明變量public或爲主類中的變量創建Accessor Methods。您需要將主類實例傳遞給DBCONNECT類,以便引用它。

+1

你應該使用訪問器方法。公共變量是可能的,但它是不好的做法,違反數據封裝(變量只在自己的類中可見)的原則。 – 1r0n1k

+0

我知道,我給了選擇... –

1

使它們靜止,這將做你的工作。

1

是否有可能使這些變量公開和靜態?然後,您可以通過使用Main類引用它們來使用它們。
例如:
Main.drivlD

1

把兩隻在同一個文件夾中的類,並使用代碼把它們放在同一PAKAGE。

package <package_name>; 

然後你可以在主類中使用public和protected變量。

0

這樣做將是要麼通過從主的DBCONNECT方法的每條信息通過,或以創建包含數據的對象,並傳遞到DBCONNECT方法本一種常見的方法。然後你可以通過getter訪問你需要的東西。您不應該直接從dbconnect引用Main,因爲它引入了循環依賴性。