Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java mysql连接中的错误_Java_Mysql - Fatal编程技术网

java mysql连接中的错误

java mysql连接中的错误,java,mysql,Java,Mysql,我一直在尝试编写一个Java程序,它连接到mysqldb并从中检索数据 我已经写了一个简单的程序,它成功地工作了,但是下面的代码片段抛出了一些我甚至没有听说过的错误 片段如下所示: public class test{ String rows,rows1; String dbUrl = "jdbc:mysql://localhost:3306/login"; String dbClass = "com.mysql.jdbc.Driver"; public static void main(Str

我一直在尝试编写一个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+"'";

我无法理解这里的错误。

将变量设置为静态

static String rows,rows1;
static String dbUrl = "jdbc:mysql://localhost:3306/login";
static String dbClass = "com.mysql.jdbc.Driver";
您在MAIN方法中使用的是静态变量rows、rows1等。无论何时在静态方法中使用任何变量,变量本身都必须是静态的


也许你是在做一个。可能是您可以检查其他类型的常见错误,以便避免它们。

尝试在变量前摇动“静态”以了解静态和非静态对象之间的解释:

这里最简单的解决方案可能是将变量设为静态:

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
调用中使用它,也可以将其全部删除。

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


将它们声明为静态

我不想告诉你这些,但是你必须后退一步,忘记MySQL,做一些基本的Java教程。您遇到的问题与MySQL/JDBC无关,它们都是基本的Java错误。此外,如果您得到要编译的代码,它很容易受到攻击。从错误中学习从错误中学习非常简单从错误中你在基本层面上犯了错误检查你的代码关于你的错误你会找到你的答案实际上,最好的解决方案可能是使它们成为局部变量,而不是静态字段,因为它们只在
main
@Joachim中使用,所以这当然是另一个很好的选择,添加到答案中。