如何从CSV文件的某些字段创建h2数据库

pai*_*sad 8 java database csv h2

我想从CSV文件创建一个新的嵌入式h2数据库.这是csv文件的片段

国家,城市,AccentCity,地区,人口,经纬度

广告,aixovall,Aixovall,06,42.4666667,1.4833333

广告,安道尔,安道尔,07,42.5,1.5166667

ad,andorra la vella,Andorra la Vella,07,20430,42.5,1.5166667

广告,安道尔 - VIEILLE,安道尔 - 维埃耶,07,42.5,1.5166667

广告,安道尔,安道尔,07,42.5,1.5166667

我不想检索csv文件的所有字段.实际上,除了CityRegion字段之外,我想要它们.

此外,我想只在POPULATION的内容不为空的情况下才将csv文件的内容插入到数据库中.

因此,在上面的csv示例中,我们只能将第3行插入到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'));
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,CSVREAD使用VARCHAR类型创建字段,但我想要这样的事情:

国家/地区(3),ACCENTCITY VARCHAR(40),人口浮动,纬度浮动,纵向浮动

在此先感谢您的帮助.

Tho*_*ler 10

您可以在CREATE TABLE添加列定义 记录在案,并用WHERE子句结合这一点.请注意使用CREATE TABLE AS SELECT比单独的CREATE TABLE和INSERT INTO语句快一点(不确定速度对您来说非常重要):

CREATE TABLE WORLDCITIES(
  COUNTRY VARCHAR(3), 
  ACCENTCITY VARCHAR(40), 
  POPULATION FLOAT, 
  LATITUDE FLOAT, 
  LONGITUDE FLOAT)
AS SELECT 
  COUNTRY, 
  ACCENTCITY, 
  POPULATION, 
  LATITUDE, 
  LONGITUDE
FROM CSVREAD('snippet.csv') 
WHERE POPULATION IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)