2016-04-07 63 views
-1

所以這裏是代碼:無法創建MySQL數據庫,使用JDBC驅動

**package com.install.main; 

import java.sql.*; 

public class Executor { 

    // JDBC driver name and database URL 
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://localhost/"; 

    // Database credentials 
    static final String USER = "eli"; 
    static final String PASS = null; 

    public static void main(String[] args) { 

     Connection conn = null; 
     Statement stmt = null; 
     try{ 
      //STEP 2: Register JDBC driver 
      Class.forName("com.mysql.jdbc.Driver"); 

      //STEP 3: Open a connection 
      System.out.println("Connecting to database..."); 
      conn = DriverManager.getConnection(DB_URL, USER, PASS); 

      //STEP 4: Execute a query 
      System.out.println("Creating database... "); 
      stmt = conn.createStatement(); 

      System.out.println("Connection: " + conn); 

      String sql = "CREATE DATABASE STUDENTS"; 
      stmt.executeUpdate(sql); 
      System.out.println("Database created successfully... "); 
     }catch(SQLException se){ 
      //Handle errors for JDBC 
      se.printStackTrace(); 
     }catch(Exception e){ 
      //Handle errors for Class.forName 
      e.printStackTrace(); 
     }finally{ 
      //finally block used to close resources 
      try{ 
      if(stmt!=null) 
       stmt.close(); 
      }catch(SQLException se2){ 
      }// nothing we can do 
      try{ 
      if(conn!=null) 
       conn.close(); 
      }catch(SQLException se){ 
      se.printStackTrace(); 
      }//end finally try 
     }//end try 
     System.out.println("Goodbye!"); 
    }//end main 
}//end JDBCExample** 

,這裏是輸出:

Connecting to database... 
Creating database... 
Connection: [email protected] 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'STUDENTS' 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
    at com.mysql.jdbc.Util.getInstance(Util.java:387) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) 
    at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541) 
    at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469) 
    at com.install.main.Executor.main(Executor.java:34) 
Goodbye! 

是否有人對你碰巧知道爲什麼它會嘗試連接到我剛剛創建的數據庫,爲什麼它實際上不創建數據庫?我沒有爲mysql設置任何密碼。

如果我執行thisstatement:

GRANT ALL PRIVILEGES ON . TO 'eli'@'localhost' IDENTIFIED BY 'eli' WITH GRANT OPTION;

在MySQL Wrokbench

,我也得到了同樣的錯誤,他說:

05:43:15 GRANT ALL PRIVILEGES ON . TO 'eli'@'localhost' IDENTIFIED BY 'eli' WITH GRANT OPTION Error Code: 1045. 

的思考是,如果我在控制檯輸入mysql命令 - 它會以[email protected]的身份登錄,而不會提供任何用戶名或密碼......我在Ubuntu上 - 這是指我在計算機上的用戶名,但錯誤仍在 - 我什麼也做不了。

如果在命令行中執行此mysql> select * from information_schema.user_privileges;

這是我所看到的:

+----------------+---------------+----------------+--------------+ | GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE | +----------------+---------------+----------------+--------------+ | ''@'localhost' | def | USAGE | NO | +----------------+---------------+----------------+--------------+ 1 row in set (0.00 sec)

...但如果我這樣做select user();

+---------------+ | user() | +---------------+ | [email protected] | +---------------+ 1 row in set (0.00 sec)

我試過使用sudo dpkg-reconfigure mysql-server-5.5但它從未要求我輸入新密碼 - 剛剛重新啓動我的服務器,就是這樣。

對不起,這是怎麼回事?

+2

'user''@'localhost''好像'USER'沒有保存你認爲它的值(「eli」) –

+0

@TylerSebastian不,更可能是''eli'@'localhost''確實不存在於MySQL服務器上,所以他以'''@'localhost''(any_user [at] localhost)登錄。 –

+0

如果我執行此聲明:「將所有特權授予*。*到'eli'@'localhost'IDENTIFIED BY'eli'WITH GRANT OPTION;」在MySQL Wrokbench中,我也遇到同樣的錯誤,說:「05:43:15 \t授予*。*到'eli'@'localhost'IDENTIFIED BY'eli'授予選項\t錯誤代碼:1045訪問權限拒絕用戶'@'本地主機'「 – user3253253

回答

0

您的問題是在這個輸出

Access denied for user ''@'localhost' to database 'STUDENTS' 

你已申報的用戶數據庫明確規定「禮」

static final String USER = "eli"; 

,但在輸出就可以看到該用戶沒有設置這個數據庫,而我可以直接看到的一個原因是,你實際上並沒有指向你的數據庫。

你應該有什麼是

static final String DB_URL = "jdbc:mysql://localhost/STUDENTS"; 
+0

如果我執行此聲明: '授予所有特權。 TO'eli'@'localhost'IDENTIFIED BY'eli'WITH GRANT OPTION;' 在MySQL Wrokbench中,我也得到了同樣的錯誤,說: '05:43:15授予所有特權。 TO'eli'@'localhost'IDENTIFIED BY'eli'WITH GRANT OPTION錯誤代碼:1045.' – user3253253

+0

想象一下,如果我在控制檯中鍵入mysql命令 - 它會將我以'eli @ localhost'的身份登錄,而不給出任何用戶名或密碼...我在Ubuntu上 - 這是指我的用戶名在計算機上。 – user3253253

+0

我試過使用'sudo dpkg-reconfigure mysql-server-5.5',但它從來沒有要求我輸入新的密碼 - 只需重新啓動服務器即可。 – user3253253

0

它看起來像您尚未創建主機localhost'eli'@'localhost')命名eli用戶,因此MySQL在登錄你的''@'localhost'(ANY_USER [在]本地主機),並且該用戶在MySQL服務器上沒有CREATE權限。

因此,在MySQL中建立了'eli'@'localhost''eli'@'%')的用戶,並授予該用戶創建權限。

+0

想象一下,如果我在y控制檯中鍵入mysql命令 - 它會將我以'eli @ localhost'的身份登錄而不提供任何用戶名或密碼...我在Ubuntu上 - 這指的是我在計算機上的用戶名,但錯誤仍在 - 我什麼都做不了。 – user3253253

+0

我試過使用'sudo dpkg-reconfigure mysql-server-5.5',但它從來沒有要求我輸入新的密碼 - 只需重新啓動我的服務器,就是這樣。 – user3253253

相關問題