当前位置:  开发笔记 > 编程语言 > 正文

用于将CSV导入Access的Java代码

如何解决《用于将CSV导入Access的Java代码》经验,为你挑选了1个好方法。

我将下面的代码发布到Sun开发人员论坛,因为我认为它是错误的(真正的错误是在此代码被击中之前).我得到的其中一个回答说它不起作用并把它扔掉.但实际上它正在发挥作用.它可能不是最好的代码(我是Java的新手),但它本身就存在"错误"吗?

=============

码:

private static void ImportFromCsvToAccessTable(String mdbFilePath, String accessTableName , String csvDirPath , String csvFileName ) throws ClassNotFoundException, SQLException { Connection msConn = getDestinationConnection(mdbFilePath); try{ String strSQL = "SELECT * INTO " + accessTableName + " FROM [Text;HDR=YES;DATABASE=" + csvDirPath + ";].[" + csvFileName + "]"; PreparedStatement selectPrepSt = msConn.prepareStatement(strSQL ); boolean result = selectPrepSt.execute(); System.out.println( "result = " + result ); } catch(Exception e) { System.out.println(e); } finally { msConn.close(); } }

Leigh Caldwe.. 5

字面上的答案是否定的 - 代码永远不存在任何"内在错误",它是否符合要求 - 可能包括也可能不包括可维护,安全,健壮或快速.

您运行的代码实际上是一个纯粹在Access中的JET查询 - 除了告诉Access运行查询之外,Java代码什么都不做.

一方面,如果没有破坏,请不要修理它.另一方面,它很有可能在不久的将来破裂,所以你可以提前修复它.

它可能破坏的两个可能原因是:

    SQL注入风险.根据csvDirPath和csvFileName的来源(例如csvFileName可能来自用户上传的文件的名称?),以及Access JDBC驱动程序的巧妙程度,您可以通过插入一个来打破或删除数据的人分号(或一些括号以生成子查询)和一些其他SQL命令进入查询.

    您依赖于CSV文件的列与Access表的列兼容.如果您正在上载未经检查的CSV,或者CSV生成器具有处理空值的特定方式,或者您有一天获得异常日期或数字格式,则可能会在插入Access表时出错.

说了这么多,我们都是关于实用主义的.如果上面的代码来自一个实用工作类,你将每周/每月/每年/手工使用几次,那么这不是一个真正的问题.

如果它是构成Web应用程序一部分的类,那么"官方"Java方法就是从CSV文件中读取记录(使用CSV解析器或CSV /文本JDBC驱动程序),得到记录集中的列,对它们执行一些验证或完整性检查,然后使用新的PreparedStatement将它们插入Access数据库.更麻烦但更强大.

您可以找到一些工具组合(例如对象关系层或其他数据访问工具),它们可以为您完成很多工作,但是设置工具将会像编写代码一样麻烦.然后,你会从任何一个中学到很多东西.



1> Leigh Caldwe..:

字面上的答案是否定的 - 代码永远不存在任何"内在错误",它是否符合要求 - 可能包括也可能不包括可维护,安全,健壮或快速.

您运行的代码实际上是一个纯粹在Access中的JET查询 - 除了告诉Access运行查询之外,Java代码什么都不做.

一方面,如果没有破坏,请不要修理它.另一方面,它很有可能在不久的将来破裂,所以你可以提前修复它.

它可能破坏的两个可能原因是:

    SQL注入风险.根据csvDirPath和csvFileName的来源(例如csvFileName可能来自用户上传的文件的名称?),以及Access JDBC驱动程序的巧妙程度,您可以通过插入一个来打破或删除数据的人分号(或一些括号以生成子查询)和一些其他SQL命令进入查询.

    您依赖于CSV文件的列与Access表的列兼容.如果您正在上载未经检查的CSV,或者CSV生成器具有处理空值的特定方式,或者您有一天获得异常日期或数字格式,则可能会在插入Access表时出错.

说了这么多,我们都是关于实用主义的.如果上面的代码来自一个实用工作类,你将每周/每月/每年/手工使用几次,那么这不是一个真正的问题.

如果它是构成Web应用程序一部分的类,那么"官方"Java方法就是从CSV文件中读取记录(使用CSV解析器或CSV /文本JDBC驱动程序),得到记录集中的列,对它们执行一些验证或完整性检查,然后使用新的PreparedStatement将它们插入Access数据库.更麻烦但更强大.

您可以找到一些工具组合(例如对象关系层或其他数据访问工具),它们可以为您完成很多工作,但是设置工具将会像编写代码一样麻烦.然后,你会从任何一个中学到很多东西.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有