java mysql连接中的错误

时间:2012-12-24 08:40:02

标签: java mysql

我一直在尝试编写一个Java程序,它连接到mysql db并从中检索数据。

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

摘录如下:

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 个答案:

答案 0 :(得分:1)

使你的变量成为STATIC。

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

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

可能你正在制作common errors in Java之一。也许你可以通过其他类型的常见错误来避免它们。

答案 1 :(得分:1)

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

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

或将它们移到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调用中使用它,或者完全删除它。

答案 2 :(得分:0)

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

将它们声明为静态。

答案 3 :(得分:-2)

尝试在其遇到问题的变量前面弄乱“静态”,以便解释静态和非静态对象:this might help