-2

我一直在尝试编写一个连接到mysqldb 并从中检索数据的 Java 程序。

我编写了一个成功运行的简单程序,但下面的代码片段引发了一些我什至没有听说过的错误。

片段如下:

public class test{
String rows,rows1;
String dbUrl = "jdbc:mysql://localhost:3306/login";
String dbClass = "com.mysql.jdbc.Driver";
public static void main(String args[]){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection (dbUrl,"root","");
Statement stmt = con.createStatement();

String query="select distinct(username) from tracking";
ResultSet rs=stmt.executeQuery(query);
while(rs.next())
{
rows=rs.getString("username");
System.out.println(rows);
String query1="select distinct(session_id) from tracking where username='"+rows+"'";
ResultSet rs1=stmt.executeQuery(query1);
while(rs1.next())
{
rows1=rs1.getString("session_id");
String query2="select * from tracking where username='"+rows+"' and session_id='"+rows1+"'";
ResultSet rs2=stmt.executeQuery(query2);
while(rs2.next())
{
System.out.println("Result"+rs2.getString("method"));
}
}
}
con.close();
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}

catch(SQLException e) {
e.printStackTrace();
}
};

错误如下

test.java:12: error: non-static variable dbUrl cannot be referenced from a stati
c context
Connection con = DriverManager.getConnection (dbUrl,"root","");
                                              ^
test.java:19: error: non-static variable rows cannot be referenced from a static
 context
rows=rs.getString("username");
^
test.java:20: error: non-static variable rows cannot be referenced from a static
 context
System.out.println(rows);
                   ^
test.java:21: error: non-static variable rows cannot be referenced from a static
 context
String query1="select distinct(session_id) from tracking where username='"+rows+
"'";
                                                                           ^
test.java:25: error: non-static variable rows1 cannot be referenced from a stati
c context
rows1=rs1.getString("session_id");
^
test.java:26: error: non-static variable rows cannot be referenced from a static
 context
String query2="select * from tracking where username='"+rows+"' and session_id='
"+rows1+"'";
                                                        ^
test.java:26: error: non-static variable rows1 cannot be referenced from a stati
c context
String query2="select * from tracking where username='"+rows+"' and session_id='
"+rows1+"'";

我无法理解这里的错误。

4

4 回答 4

1

使您的变量成为静态的。

static String rows,rows1;
static String dbUrl = "jdbc:mysql://localhost:3306/login";
static String dbClass = "com.mysql.jdbc.Driver";

您在静态的 MAIN 方法中使用变量 rows、rows1 等。每当您在静态方法中使用任何变量时,变量本身都必须是静态的。

您可能正在犯Java 中的常见错误之一。也许您可以通过其他类型的常见错误来避免它们。

于 2012-12-24T08:41:59.727 回答
1

可能这里最简单的解决方案是让你的变量静态:

static String rows,rows1;
static String dbUrl = "jdbc:mysql://localhost:3306/login";
static String dbClass = "com.mysql.jdbc.Driver";

或将它们移动到 inside main,假设您将坚持当前的“做所有事情main”策略)。

您遇到的问题是这main是一个静态类,因此在没有您的类实例的情况下运行。因此,它只能访问在类级别定义的成员(每个类一个,或跨类的所有实例一个)。

因为您的四个字符串当前是实例变量(类的每个实例一个),所以只能通过它们的实例引用它们。

以这种方式考虑区别可能会有所帮助:

+-----------------------------------------------+
| xyzzy class                                   |
|    (class variables here, shared amongst      |
|     all instances and static methods)         |
|                                               |
|  +------------------+   +------------------+  |
|  | xyzzy instance 1 |   | xyzzy instance 2 |  |
|  |    (instance 1   |   |    (instance 2   |  |
|  |     variables    |   |     variables    |  |
|  |     here only    |   |     here only    |  |
|  |     for this     |   |     for this     |  |
|  |     instance)    |   |     instance)    |  |
|  +------------------+   +------------------+  |
|                                               |
+-----------------------------------------------+

您也根本不需要dbClass,因为您实际上并没有使用它。您应该在通话中使用它forName,或者完全摆脱它。

于 2012-12-24T08:44:03.023 回答
0

dbURL、dbClass、row 和 row1 都应该是静态变量。

将它们声明为静态。

于 2012-12-24T08:44:27.967 回答
-2

尝试在它遇到问题的变量前面敲打“静态”,以解释静态和非静态对象是什么:这可能会有所帮助

于 2012-12-24T08:43:48.010 回答