为什么我不能在构造函数外执行查询?我不能使用我在构造函数中声明的变量。为什么不?我是否必须将数据库连接放在带参数的方法中?
public class main extends javax.swing.JFrame
{
DefaultListModel model = new DefaultListModel();
public main()
{
initComponents();
try
{
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/project", "root", "password");
Statement stat = con.createStatement();
ResultSet resultaat = stat.executeQuery(query);
while (resultaat.next())
{
model.addElement(resultaat.getString(2));
}
}
catch (Exception ex)
{
System.out.println(ex);
}
}
}
答案 0 :(得分:2)
我无法使用构造函数中声明的变量。为什么不呢?
因为它们在构造函数中声明,所以仅限于该范围。你不能在构造函数之外访问它们。如果您想在构造函数之外使用它们,请将它们设置为实例变量,这应该是您应该首先进行的。
你的班级应该喜欢这样的东西:
public class DBConnection {
Connection con=null;
public DBConnection() {
initComponents();
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/project","root","password");
}
catch(SQLException ex) {
}
}
public void doDBOps() {
String yourQuey="whatever";
PreparedStatement stmnt = this.conn.preparedStatement(yourQuery);
ResultSet rs = stmnt.executeQuery();
//rest of your code
}
}
答案 1 :(得分:2)
con正在构建您的构造函数范围。使用
Connection con;
作为类变量和构造函数
con = DriverManager.getConnection("jdbc:mysql://localhost/project","root","password");
仅使用此功能。对所需变量执行相同操作。你需要在课堂上使用它。
答案 2 :(得分:0)
方法或构造函数中定义的变量仅限于该范围。如果您希望初始化变量并在整个类中使用它,您必须将其转换为类字段(因此,将其范围扩展到类本身),并按照惯例定义get
和/或set
方法。
答案 3 :(得分:0)
您看起来整体上看起来是数据库的Singleton类。您可以在其他类中使用此类来访问现有连接,而不是每次都使用DriverManager
工厂来获取新的连接对象。
下面的示例是从here
无耻地被盗的public class DBConnectionSingleton
{
private static DBConnectionSingleton instance = null;
private static Connection conn;
private DBConnectionSingleton()
{
String dbDriver = ..
String url = ..
String username= ..
String password = ..
try
{
Class.forName(dbDriver);
conn = DriverManager.getConnection(url, username, password);
}
catch (ClassNotFoundException cnfErr)
{
cnfErr.printStackTrace();
}
catch (SQLException err)
{
err.printStackTrace();
}
}
public static DBConnectionSingleton getInstance()
{
if (instance == null)
return new DBConnectionSingleton();
else
return instance;
}
public static Connection getConnection()
{
return conn;
}
}