2014-10-30 143 views
2

我需要使用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」。

回答

1

你打錯這裏查詢,

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

1

這兩個問題,試圖在這種情況下使用

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數據庫的表中。

相關問題