如何从 CSV 文件的某些字段创建 h2 数据库
我想从 CSV 文件创建一个新的嵌入式 h2 数据库。 这是 csv 文件的片段
国家、城市、口音城市、地区、人口、纬度、经度
广告,aixovall,Aixovall,06,,42.4666667,1.4833333
广告,安道尔,安道尔,07,,42.5,1.5166667
广告,安道尔城,安道尔城,07,20430,42.5,1.5166667
广告,安道尔老城,安道尔老城,07,,42.5,1.5166667
广告,安道尔,安道尔,07,,42.5,1.5166667
我不想检索 csv 文件的所有字段。实际上,我想要除 City 和 Region 字段之外的所有内容。
此外,我想仅当 POPULATION 的内容不为空时才将 csv 文件的内容插入数据库。
因此,在上面的 csv 示例中,我们只能将第三行插入到 h2 表 WORLDCITIES 中,因为它的“population”字段已被指示。
这是我写的一段代码。但是,正如您所看到的,这还不够:
conn = DriverManager.getConnection(connectionURL, connectionProps);
Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE WORLDCITIES"
+ " AS SELECT COUNTRY, ACCENTCITY, POPULATION, LATITUDE, LONGITUDE"
+ " FROM CSVREAD('snippet.csv'));
如果我理解正确,CSVREAD 使用 VARCHAR 类型创建字段,但我想要这样的东西:
COUNTRY VARCHAR(3)、ACCENTCITY VARCHAR(40)、POPULATION FLOAT ,纬度浮点,经度浮点
预先感谢您的帮助。
i would like to create a new embedded h2 database from a CSV file.
Here is the snippet of the csv file
Country,City,AccentCity,Region,Population,Latitude,Longitude
ad,aixovall,Aixovall,06,,42.4666667,1.4833333
ad,andorra,Andorra,07,,42.5,1.5166667
ad,andorra la vella,Andorra la Vella,07,20430,42.5,1.5166667
ad,andorra-vieille,Andorra-Vieille,07,,42.5,1.5166667
ad,andorre,Andorre,07,,42.5,1.5166667
I don't want to retrieve all the fields of the csv file. Actually, i want them all except the City and Region fields.
And further, i want to insert the content of the csv file into the database ONLY IF the content of POPULATION is not empty.
Thus, in the csv example above, we must only insert the 3rd row into the h2 table WORLDCITIES because its 'population' field is indicated.
Here is a snippet of code i wrote. But, as you can see, it is not enough yet:
conn = DriverManager.getConnection(connectionURL, connectionProps);
Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE WORLDCITIES"
+ " AS SELECT COUNTRY, ACCENTCITY, POPULATION, LATITUDE, LONGITUDE"
+ " FROM CSVREAD('snippet.csv'));
And if i understand correctly, CSVREAD create the fields using the VARCHAR type, but i want the things like this:
COUNTRY VARCHAR(3), ACCENTCITY VARCHAR(40), POPULATION FLOAT, LATITUDE FLOAT, LONGITUDE FLOAT
Thanks in advance for helping.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以在 CREATE TABLE as 记录 并将其与 WHERE 子句结合起来。请注意,使用 CREATE TABLE AS SELECT 比单独的 CREATE TABLE 和 INSERT INTO 语句要快一些(不确定速度对您来说是否非常重要):
You can add the column definitions in the CREATE TABLE as documented and combine this with a WHERE clause. Please note using CREATE TABLE AS SELECT is a bit faster than separate CREATE TABLE and INSERT INTO statements (not sure if speed is very important for you):
最后,我按照你的建议进行了这样的操作。
我只放置了我认为与问题更相关的代码部分:)
`
....`
谢谢!
finally, i proceeded like this as you adviced.
I only put the parts of the code which i think is more related to the question :)
`
....`
Thanks!
使用H2类的
read()
方法Csv
,并迭代ResultSet
,在找到所需的行时插入它们。Use the
read()
method of the H2 classCsv
, and iterate through theResultSet
, inserting the desired rows as you find them.