0

我的错误在哪里?

我在课堂上运行此方法,但确实发生了异常。为什么?

public class d3 {

Connection con;
String dbName = "mydb";
String dbUsername = "root";
String dbPassword = "2323";
String dbUrl = "jdbc:mysql://localhost/";

public d3() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Find database successfuly");
    } catch (Exception e) {
        System.err.println("Unable to find and load driver");
        System.exit(1);
    }
}

public void connectToDB() {
    try {
        con = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
        System.out.println("Connect to database succesfully");
    } catch (SQLException e) {
        System.out.println("Can not connect to database");
        System.exit(1);
    }
}

public void excuteSQL() {
    try {
        Statement st1 = con.createStatement();
        ResultSet result1 = st1.executeQuery("select * from mytable");
        while(result1.next()){
            System.out.println(result1);
        }

    } catch (SQLException sqle) {
        System.out.println("Can not excute sql statement");
        sqle.printStackTrace();
    }
}

public static void main(String[] args) {
    d3 ddd = new d3();
    ddd.connectToDB();
    ddd.excuteSQL();
}
}

输出:

Can not excute sql statement

堆栈跟踪:

java.sql.SQLException: No database selected
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1557)
    at JDBCtest.d3.excuteSQL(d3.java:40)
    at JDBCtest.d3.main(d3.java:54)
4

4 回答 4

1

您需要在您的 url 中提供数据库名称

String dbUrl = "jdbc:mysql://localhost/mydb";

或者您可以在每个 sql 查询中完全限定您的表名

ResultSet result1 = st1.executeQuery("select * from mydb.mytable");
于 2013-06-24T11:37:04.023 回答
1

您的 dbUrl 变量应该是这样的:

 String dbUrl = "jdbc:mysql://localhost:3306/mydb";
于 2013-06-24T11:38:11.993 回答
1

SQLConnection 似乎有问题...请验证连接是否已成功建立。

你还没有选择数据库。

于 2013-06-24T11:29:08.117 回答
1

您需要在 url 中包含数据库名称:

String dbUrl = "jdbc:mysql://localhost/theDatabase"

或者你需要在连接后显式设置数据库:

try (Connection con = DriverManager.getConnection("jdbc:mysql://localhost/", 
        username, password)) {
   con.setCatalog("theDatabase");
   // querying etc
}

如果您已经知道您的数据库,并且只需要使用一个:只需在连接 URL 中指定它:这比setCatalog()每次调用更容易。

于 2013-06-24T18:41:15.083 回答