CSV , JAVA & HSQLDB

Posted

技术标签:

【中文标题】CSV , JAVA & HSQLDB【英文标题】: 【发布时间】:2012-10-26 05:01:46 【问题描述】:

我是java编程的新手

我想问一下如何在 java 中读取 CSV,然后将其上传到 HSQLDB。 我一直在阅读并通过教程尝试解决方案的示例,但仍然不太了解。 根据我的阅读,大多数人建议使用 OpenCSV,但是

    我可以读取带有分隔符的 csv 或带有 opencsv 的嵌套分隔符吗? opencsv 以不同的方式读取我的 *.csv 文件,在一列中有多行。我希望它在一行中被读取。

下面是例子

B03BB510001T2001,,儿童咀嚼多种维生素*,,""泛酸7.5MG," “对氨基苯甲酸 (PABA) 250MCG” “叶酸 30MCG” “生物素 50MCG” “硝酸硫胺 + B6 + B12 6.6MG,” “胆碱 1MG” “VIT A + VIT E + VIT C 参考文件” "INOSITOL 1MG"",""片剂,咀嚼片"",,,,B03,REGISTERED,75MG"

但我希望它显示在单行

    如何直接从 csv 文件插入数据库? 我目前必须使用 HSQLDB [独立服务器]。 我是否必须使用第三方工具才能做到这一点

**我只熟悉使用 phpmysql 从 csv 读取和上传到数据库,而不是 java &hsqldb

希望你能给我建议和帮助。

【问题讨论】:

【参考方案1】:

这是我用来将数据加载到每个 fredt 的 HSQL 的示例脚本。您需要有一个持久数据库才能使用文本表。如果您在数据库管理器中运行,只需复制并一次执行一条语句。也可以使用sqltool(sql脚本和DB在同一个文件夹):

\i demotexttable.sql

这里是 demotexttable.sql

/* file.txt needs to be in the same folder as the database
   first line of file is a header, others lines are data
--start file.txt
Col1|Col2|Col3
abcdef|My Company Name|0
--end file.txt
*/

--create the schema
create schema imp;

--create the normal table
create cached table imp.normalTable (
       Col1 char(6),
       Col2 nvarchar(200),
       Col3 int
);

--create the table that table
create text table imp.textfiletable (
       Col1 char(6),
       Col2 nvarchar(200),
       Col3 int
);

--setup the text file table
set table imp.textfiletable source "file.txt;ignore_first=true;fs=|";

--insert data from text file into the `normal` table
INSERT INTO imp.normalTable (Col1, Col2, Col3) select Col1, Col2, Col3 from imp.textfiletable;

--we are done with the text file table
drop table imp.textfiletable;
commit;

我在之前的帖子中发现了一些错误,我已经在这个最新的 mod 中清理了它们。

【讨论】:

对不起,从文本插入数据到普通表语法有错误..我需要在 sqltool 中运行它吗? 感谢您清理简单的错误,但我在使用我在latest post 中尝试过的 INSERT STATEMENT 时遇到了问题 使用这个set table imp.textfiletable source ... 清除源文件。有没有办法避免这种情况? @zigimantus 它不应该清除源文件,除非您从中删除。您还可以将 TEXT 表设为只读。【参考方案2】:

您可以将 CSV 文件直接加载到 HSQLDB。

有两种不同的方式:

    使用 HSQLDB 的 TEXT TABLE 功能。您的文件不需要任何特殊设置,因为分隔符是默认设置。 使用 HSQLDB 的普通表并使用 SqlTool 加载 CVS,SqlTool 是 HSQLDB 提供的附加 jar。 SqlTool 不仅可以与 HSLQLDB 一起使用,还可以与 MySQL 和其他数据库一起使用。

详情请看这里:

http://hsqldb.org/doc/2.0/guide/texttables-chapt.html

http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html#sqltool_csv-sect

【讨论】:

1.上次我尝试使用插入扩展上传数据 - hsqldb 的嵌套分隔符有问题,如(“,/”)。你的意思是,使用 .txt 而不是 .csv ? 2.我是唯一一个压力太大但不知道为什么的人,我不明白如何使用sqltool,甚至参考示例CSV导出+导入脚本:( 使用TEXT表,需要先创建表。试试这个并报告您的 CREATE TABLE 和 SET TABLE 语句以寻求帮助,如果它不起作用。 但是如果只查询数据,这两个选项哪个更好?有性能差异吗?磁盘缓存是否使查询 csv 文件的速度与查询内存表一样快?还有什么不同? 哪个选项更好取决于内存分配等。对于读取,您可以使 TEXT 表几乎与内存表一样快。否则内存表会更快。【参考方案3】:

如您所知,CSV 只不过是一个“逗号分隔值”。其他人建议 OpenCSV 的原因是因为它具有商业友好的许可证。虽然除此之外可以使用正常的方式来检索值。使用 FileInputStream 读取值。请找到链接:

http://www.roseindia.net/java/beginners/java-read-file-line-by-line.shtml

之后使用分隔符解析单个字符串。 例如:String[] tokens = wholeString.split(delimiter);

现在只需使用 java.sql 包的 jdbc 连接就可以轻松地将值存储在 hsql 数据库中。请查看链接:

http://www.hsqldb.org/doc/guide/apb.html

希望这对您有所帮助; 问候,

阿南德

【讨论】:

以上是关于CSV , JAVA & HSQLDB的主要内容,如果未能解决你的问题,请参考以下文章

使用java下载雅虎外汇报价

章节七:csv&excel

使用Apache POI基于csv表更新Excel工作表值

Playwright & NodeJs - 读取 CSV 并将数据推送到数组

Python - 网页抓取 - BeautifulSoup & CSV

我怎样才能忽略分号;在 & 当我从 .csv 文件创建 Hive 表时