Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 设置csvjdbc表的整数、双精度和字符串列类型_Sql_Csv_Jdbc - Fatal编程技术网

Sql 设置csvjdbc表的整数、双精度和字符串列类型

Sql 设置csvjdbc表的整数、双精度和字符串列类型,sql,csv,jdbc,Sql,Csv,Jdbc,我试图用驱动程序从csv文件中选择不同的字段。我得到了一个csv表格,如: id departmentcode fte 223356 DS3G5530DK 1.0 234335 ES4K44343L 0.8 435331 GS2K54534P 1.0 ... 我想将列导入为Integer、String和Double,因此我创建了一个Java.Util.Properties对象并添加了列类型: Propert

我试图用驱动程序从csv文件中选择不同的字段。我得到了一个csv表格,如:

id        departmentcode     fte
223356    DS3G5530DK         1.0
234335    ES4K44343L         0.8
435331    GS2K54534P         1.0
...
我想将列导入为Integer、String和Double,因此我创建了一个Java.Util.Properties对象并添加了列类型:

Properties props = new Properties();
props.put("columnTypes", "Integer,String,Double");
之后,我与properties对象建立连接并查询csv:

Connection conn = DriverManager.getConnection("jdbc:relique:csv:" +getPath()+"/temp/", props);
ResultSet results = stmt.executeQuery("SELECT id, departmentcode, fte FROM tempCSV WHERE ...")

while (results.next()) {
    ...
    System.out.println( results.getInt("id") );
    System.out.println( results.getString("departmentcode") );
    System.out.println( results.getDouble("fte") );
    ...
}

但当我从结果中选择DEPARTMENT-CODE时,它总是一个双精度(0.0)。对于
id
fte
这两种情况,它都按预期进行(因为
id
是int,而
fte
是double)。我的属性对象有问题吗?

经过多次尝试和错误,我想我确实理解了这个问题。列类型的行为似乎很奇怪。首先,在最后一个columnType中解析每一列(对我来说,它应该是
Double
)。解析到该列类型后,数据被转换为给定类型(对于我来说,可能是
整数
字符串
双精度


这就是问题所在:将字符串对象解析为Double将产生0.0。我通过删除整个columnType属性并在我的sql where语句中添加单引号来修复它

CSV文件每行上的值之间的分隔符是什么?CsvJdbc中的默认值是逗号。可以将其他分隔符设置为数据库属性。比如说,

props.put("separator", "|");

或者您的文件每行都有固定宽度的列?在这种情况下,您可以设置
fixedWidths
数据库属性来定义每列的宽度。

您需要在属性中添加如下内容:

props.put("fixedWidths", "1-10,11-30,31-32");
(指定柱的起点和终点)