使用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 + "]";
答
这两个问题,试图在这种情况下使用
SELECT ... INTO NewTableName FROM [Text; ...].[csvFileName]
是:
SELECT ... INTO NewTableName FROM OldTableName
是一个访问SQL构造,UCanAccess不支持(至少不是现在),以及... 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数据库的表中。
通过使用它produceserror“net.ucanaccess.jdbc.UcanaccessSQLException:意外的令牌::” – Dhinakar 2014-10-30 09:37:41
我很担心。为什么你让你的简单的'select'语句如此复杂 – 2014-10-30 09:39:53
它并不复杂,但它是抛出错误 – Dhinakar 2014-10-30 09:48:16