0

好吧,我有点卡在我必须问的地方

我有 2 个名为 main 和 dbconnect 的类

在我的 dbconnect 中,我拥有连接到数据库的所有必要方法,在我的主类中我创建了 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;
}
}

有人可以帮忙吗?

4

6 回答 6

2

要么声明变量,要么为主类中的变量public创建访问器方法。您需要将主类实例传递给DBCONNECT该类,以便引用它。

于 2012-10-22T05:47:44.270 回答
1

使它们成为静态的,这将完成您的工作。

于 2012-10-22T05:49:31.720 回答
1

是否可以将这些变量设为公共和静态?然后,您可以通过使用 Main 类引用它们来使用它们。
例如:
Main.drivelD

于 2012-10-22T05:50:33.253 回答
1

将所需的变量作为方法调用的参数传递是非常容易的。即您的 writeToDB() 方法将类似于 writeToDB(String drivId, ...)。

但是,如果你有额外的逻辑,比如你想验证 drivId 的格式是否正确等。那么你应该创建一个单独的类来保存你想要保存在数据库中的属性。因此,从您的文本小部件中,您将更新此对象,然后调用 validate 方法等,然后将其传递给数据库处理程序。这将从视图中隔离模型相关数据。

于 2012-10-22T05:51:49.040 回答
1

将两个类放在同一个文件夹中,并使用代码将它们放在同一个包中。

package <package_name>;

然后您可以在主类中使用公共和受保护的变量。

于 2012-10-22T05:52:53.873 回答
0

执行此操作的常用方法是将每条信息从 Main 传递给 dbconnect 方法,或者创建一个保存数据的对象并将其传递给 dbconnect 方法。然后,您可以通过 getter 访问所需的内容。您不应该直接从 dbconnect 直接引用 Main,因为它引入了循环依赖。

于 2012-10-22T06:04:11.427 回答