2016-04-07 64 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

相关问题