[英]Cannot create mysql database, using jdbc driver
所以這里是代碼:
**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: com.mysql.jdbc.JDBC4Connection@5e265ba4
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設置任何密碼。
如果我執行這個語句:
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 命令 - 它以eli@localhost
身份登錄我而不提供任何用戶名或密碼......我在 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() | +---------------+ | eli@localhost | +---------------+ 1 row in set (0.00 sec)
我嘗試使用sudo dpkg-reconfigure mysql-server-5.5
但它從未要求我輸入新密碼 - 只是重新啟動了我的服務器,僅此而已。
抱歉,這里發生了什么?
您的問題在此輸出中明確定義
Access denied for user ''@'localhost' to database 'STUDENTS'
您已為數據庫“eli”聲明用戶
static final String USER = "eli";
但是在輸出中,您可以看到該數據庫沒有設置用戶,我可以立即看到的一個原因是您實際上根本沒有指向您的數據庫。
你應該擁有的是
static final String DB_URL = "jdbc:mysql://localhost/STUDENTS";
看起來您還沒有為主機localhost
( 'eli'@'localhost'
) 創建一個名為eli
的用戶,因此 MySQL 將您以''@'localhost'
(any_user [at] localhost) 的身份登錄,而該用戶確實如此在 MySQL 服務器上沒有 CREATE 權限。
因此,在 MySQL 中為'eli'@'localhost'
(不是'eli'@'%'
)創建一個用戶並授予該用戶 CREATE 權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.