2010-07-30 142 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