有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用CSV文件而不是SQL语句创建Java结果集

我想使用结果集保存我的用户数据。只有一个问题——数据是CSV(逗号分隔)格式的,而不是在数据库中

CSV文件在顶部包含一个标题行,然后是数据行。我想动态创建一个结果集,但不使用SQL查询。输入将是CSV文件

我希望(根据我的Java经验)会有rs.newRowrs.newColumnrs.updateRow等方法,这样我就可以使用结果集的结构,而不用先进行任何数据库查询

在结果集上有这样的方法吗?我看了文件,没有找到任何办法。从CSV生成一个结果集,然后像使用SQL查询一样使用它,这将非常有用。我发现很难使用java bean、bean数组列表等等,因为我想读取具有不同结构的CSV文件,这相当于SQL中的SELECT * FROM

我不知道会提前列出哪些栏目的名称或编号。所以像“手动向Java结果集添加数据”这样的其他问题并不能满足我的需求。在这种情况下,他已经有了一个SQL创建的结果集,并希望添加行

在我的例子中,我想从头创建一个结果集,并在读入第一行时添加列。现在考虑一下,我可以从第一行创建一个查询,使用类似SELECT COL1, COL2, COL3 ... FROMDUMMY的语句。然后使用INSERT ROW语句读取并插入其余部分。(稍后:)但在尝试时,它失败了,因为没有关联的实际表


共 (2) 个答案

  1. # 1 楼答案

    开源项目应该做到这一点:

    // Load the driver.
    Class.forName("org.relique.jdbc.csv.CsvDriver");
    
    // Create a connection using the directory containing the file(s)
    Connection conn = DriverManager.getConnection("jdbc:relique:csv:/path/to/files");
    
    // Create a Statement object to execute the query with.
    Statement stmt = conn.createStatement();
    
    // Query the table. The name of the table is the name of the file without ".csv"
    ResultSet results = stmt.executeQuery("SELECT col1, col2 FROM myfile");
    
  2. # 2 楼答案

    只是另一个补充@Mureinik的想法,我觉得非常好

    或者,您可以使用任何CSV读取器库(其中很多),并使用任何内存数据库(如H2HyperSQLDerby)将文件加载到内存表中。这些库为您提供了一个完整的SQL引擎,您可以在其中运行高端/复杂的查询

    这需要更多的工作,但你可以在事后灵活地使用数据

    在尝试内存解决方案后,切换到持久数据库非常容易(只需更改URL)。通过这种方式,您只能将CSV文件加载到数据库中一次。在第二次执行时,数据库将准备好使用;无需再次加载CSV