2010-07-30 139 views
1

我正在試圖從mysql執行2個輸出數據到一個csv文件。 我的代碼如下:將mysql數據導出到csv文件

public void exportData(Connection conn,String filename) { 
     Statement stmt; 
     String query; 
     try { 
      stmt = conn.createStatement(); 

      //For comma separated file 
      query = "SELECT * into OUTFILE '/tmp/input.csv' FIELDS TERMINATED BY ',' FROM router "; 
      stmt.executeQuery(query); 

     } catch(Exception e) { 
      e.printStackTrace(); 
      stmt = null; 
     } 
    } 
}; 

我碰到下面的錯誤在哪裏stmt.executequery被稱爲線。

java.sql.SQLException: Access denied for user 'nxy'@'%' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2512) 
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1476) 
    at DBase.exportData(automateExport.java:50) 
    at automateExport.main(automateExport.java:18) 

我能夠正確地連接到數據庫,甚至執行基本查詢但無法將數據導出到.csv文件。 請幫忙。

謝謝

回答

2

你需要有FILE privilege您的用戶帳戶,以允許文件在服務器主機中創建,通過SELECT INTO ..命令OUTFILE。

+0

感謝您的快速響應。無論如何,我可以啓用它嗎? – JJunior 2010-07-30 22:22:09

+0

您需要在「*。*」上運行GRANT FILE至 @(刪除星形星號周圍的引號,因爲Stackoverflow正在吃掉它們)將其授予用戶(用適當的值替換用戶和主機標記爲你的情況)。由於GRANT FILE是一個管理特權,因此您需要以root身份連接才能執行它。 – 2010-07-30 22:29:59

+0

謝謝。但我不明白爲什麼我應該在服務器主機上創建文件?我只想在我的機器上創建一個文件並在這裏​​輸出數據。你能解釋一下嗎? – JJunior 2010-08-02 13:58:27