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

我是java编程的新手

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

  1. 我可以读取带有分隔符的 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"

但我希望它显示在单行

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

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

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

【问题讨论】:

    标签: java csv 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。

    有两种不同的方式:

    1. 使用 HSQLDB 的 TEXT TABLE 功能。您的文件不需要任何特殊设置,因为分隔符是默认设置。
    2. 使用 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

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

    阿南德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多