2013-07-10 38 views
0

MySQL的命令行客戶端以root身份登錄後,創建用戶在MySQL中,我輸入:用java

connect mydb; 
grant all privileges on mydb.* to 'admin'@'localhost' identified by 'pass'; 

現在內的Java, 我成功地使用使用管理用戶ID連接到數據庫驅動程序。

Statement put=connect.createStatement(); 

//**WORKS succesfully** 
put.execute("insert into mydb.emp values(100,joe)"); 

//**does NOT work** 
put.execute("grant all privileges on mydb.* to 'john'@'localhost' identified by 'pass'"); 

爲什麼插入命令可以工作,但授予命令永遠不能通過Java工作?

請幫忙。

+0

一兩件事,我立刻看到的是,你的INSERT查詢是一個字符串,而喲我們的GRANT查詢不是。 – BLaZuRE

+0

@Xperiaz X作爲根你的意思是從Linux終端爲例? –

+0

並非所有數據庫都通過JDBC支持DDL命令,所以您可能根本無法通過JDBC修改數據庫結構。 – beny23

回答

1
put.execute(MySQL query) 

在這裏你只能執行MySQL查詢,但

grant all privileges on mydb.* to 'admin'@'localhost' identified by 'pass'; 

不是一個MySQL查詢,這只是一個對MySQL命令。

+0

哦,我明白了。 那麼有可能通過java發送命令給MySQL? –

+0

你必須通過MySQL管理終端(命令行)設置用戶權限 –

+0

使用java不可能嗎? 我的應用程序正在添加一名員工(因此添加了一個數據庫用戶)。然後員工可以訪問數據庫中的其他表格 –

0

你只是忘了引號。

+0

我的不好,在代碼中我已經把引號,但在這裏我忘了輸入 –

+0

@XperiazX在這種情況下,你應該看看我的答案。檢查ExtendedAnsiSQL標誌 –

0

嘗試以下

put.execute("grant all privileges on mydb.* to 'john'@'localhost' identified by 'pass'"); 

,並且確保你有ExtendedAnsiSQL標誌爲1

+0

對不起,在我已經把引號的代碼,但在這裏我忘了在這裏鍵入它。 ExtendedAnsiSQL標誌?請告訴它是什麼? –

0

我試圖與查詢參數的工作 - 我發現有點混亂的是,你必須把之間的空白參數和@localhost例如 - 這在這裏爲我工作:(jpaEm是這裏的JpaEntityManager)

// Create user 
String sql = "CREATE USER ? @localhost"; 
Query query = jpaEm.createNativeQuery(sql); 
query.setParameter(1, user.getUserName()); 
jpaEm.getTransaction().begin(); 
query.executeUpdate(); 
jpaEm.getTransaction().commit(); 

// Set password 
sql = "SET PASSWORD FOR ? @localhost = PASSWORD(?)"; 
query = jpaEm.createNativeQuery(sql); 
query.setParameter(1, user.getUserName()); 
query.setParameter(2, user.getPassword()); 
jpaEm.getTransaction().begin(); 
query.executeUpdate(); 
jpaEm.getTransaction().commit();