使用java将csv文件中的数据导入到访问数据库中

问题描述:

我需要使用java将csv导入到访问数据库中。我试着用下面的代码使用java将csv文件中的数据导入到访问数据库中

我的代码:

public static void main (String args[]) 
{ 
    String dbFileSpec = "C:\\Documents and Settings\\admin\\My Documents\\NetBeansProjects\\AutomateExcelDatabase\\Centre.accdb"; 
// String accessTableName = "Centre"; 
    String csvDirPath = "C:\\Documents and Settings\\admin\\My Documents\\NetBeansProjects\\AutomateExcelDatabase"; 
    String csvFileName = "myjdbcfile.csv"; 
    try (Connection conn = DriverManager.getConnection(
      "jdbc:ucanaccess://" + dbFileSpec 
    //  + ";newdatabaseversion=V2007" 
    )) { 
     try 
     { 
      String strSQL = "SELECT * INTO " + dbFileSpec + " FROM [Text;HDR=YES;DATABASE=" + csvDirPath + ";].[" + csvFileName + "]"; 
      System.err.println("SQL --> "+strSQL); 
      PreparedStatement selectPrepSt = conn.prepareStatement(strSQL); 
      boolean result = selectPrepSt.execute(); 
      System.out.println("result = " + result); 
     } 
     catch(SQLException ex) 
     { 
      System.err.println("Error --->"+ex.toString()); 
     } 
     conn.commit(); 
     conn.close(); 
    } catch (SQLException ex) { 
     Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

}

但它抛出错误为 “net.ucanaccess.jdbc.UcanaccessSQLException:意外的标记:成所需要的:FROM”。

你打错这里查询,

String strSQL = "SELECT * INTO " + dbFileSpec + " FROM 
[Text;HDR=YES;DATABASE=" + csvDirPath + ";].[" + csvFileName + "]"; 

应该是,

String strSQL = "SELECT *" + dbFileSpec + " FROM [Text;HDR=YES;DATABASE=" + csvDirPath + ";].[" + csvFileName + "]"; 
+0

通过使用它produceserror“net.ucanaccess.jdbc.UcanaccessSQLException:意外的令牌::” – Dhinakar 2014-10-30 09:37:41

+0

我很担心。为什么你让你的简单的'select'语句如此复杂 – 2014-10-30 09:39:53

+0

它并不复杂,但它是抛出错误 – Dhinakar 2014-10-30 09:48:16

这两个问题,试图在这种情况下使用

SELECT ... INTO NewTableName FROM [Text; ...].[csvFileName] 

是:

  1. SELECT ... INTO NewTableName FROM OldTableName是一个访问SQL构造,UCanAccess不支持(至少不是现在),以及

  2. ... FROM [Text; ...].[csvFileName]是一个ODBC“绝招”和UCanAccess不使用ODBC。

然而,UCanAccess使用HSQLDB和HSQLDB提供了阅读像这样CSV文件的支持:

final String csvFolder = "C:/__tmp/zzzTest/"; 
final String csvFileName = "myjdbcfile.csv"; 
final String csvDbName = "hsqldbTemp"; 
try (Connection hconn = DriverManager.getConnection(
     "jdbc:hsqldb:file:" + csvFolder + "/" + csvDbName, 
     "SA", 
     "")) { 
    try (Statement s = hconn.createStatement()) { 
     s.executeUpdate("CREATE TEXT TABLE fromcsv (id int, textcol varchar(50))"); 
     s.executeUpdate("SET TABLE fromcsv SOURCE \"" + csvFileName + "\" DESC"); 
     try (ResultSet rs = s.executeQuery("SELECT * FROM fromcsv")) { 
      while (rs.next()) { 
       System.out.println(rs.getString("textcol")); 
      } 
     } 
     s.executeUpdate("SHUTDOWN"); 
     File f = null; 
     f = new File(csvFolder + "/" + csvDbName + ".properties"); 
     f.delete(); 
     f = new File(csvFolder + "/" + csvDbName + ".script"); 
     f.delete(); 
    } 
} catch (Exception e) { 
    e.printStackTrace(System.out); 
} 

,所以你可以使用两个连接,

  • 一个jdbc:ucanaccess连接到访问数据库和

  • 另一个jdbc:hsqldb连接到CSV文件,

然后将CSV文件中的行插入到Access数据库的表中。