2014-02-21 62 views
3

您好我正在使用R来将数据框保存到DB2 SQL表中。我似乎能够创建表的骨架,而不是将数据追加到表 -在R的sqlSave创建并保存一个数据框到一个sql表

>df <- read.csv("dat.csv") 

其中dat.csv是一个没有头一个csv,只是原始数据,两列

然后我创建该表:

>sqlQuery(channel, "create table sqltable 
        (
        col1 int, 
        col2 float 
        )" 
     (

,我确认表由能够选择数据库

在空表“SQLTABLE”创建所以现在我需要从“DAT添加数据。 CSV”到‘SQLTABLE’做:

>sqlSave(channel, df, "sqltable", verbose=T, fast=T, append=T) 

no: 1 rownames 1/***/no: 2 col1 31105/***/no: 3 col2 0.001/***/ 
no: 2 rownames 1/***/no: 2 col1 31106/***/no: 3 col2 0.023/***/ 
no: 3 rownames 1/***/no: 2 col1 31107/***/no: 3 col2 1.456/***/ 
no: 4 rownames 1/***/no: 2 col1 31108/***/no: 3 col2 0.001/***/ 
no: 5 rownames 1/***/no: 2 col1 31109/***/no: 3 col2 2.102/***/ 

一切似乎都很好,直到我做的:

>sqlQuery(channel,"select * from sqltable") 

[1] COL1  COL2 
<0 rows> or 0-length row.names 

的sqlSave命令清楚地拿起从dat.csv数据,所以为什么不加入桌子?我究竟做错了什么?

+1

我对“R”一无所知,但是您是否需要'COMMIT'插入,否则它会自动回滚? – bhamby

+0

您使用的是什么类型的连接,以及您的DB2服务器运行在哪种操作系统上? – WarrenT

回答

4

在sqlSave中定义varTypes是个好主意。这是我如何做到的。 :-)

columnTypes <- list(ColumnName="varchar(255)", NumberColumn="float", datecolumn="date") 

这为数据定义了列类型,因此您可以在sqlSave中添加参数。所以让我们现在做sqlSave。

sqlSave(channel, YourTable, rownames = FALSE, varTypes = columnTypes) 

如果表已经添加,那么我会做一个sqlDrop之前。

为什么这是答案?

嗯,我有同样的问题。我得到一个错误,说它不能执行sqlSave,但它把我的列放在数据库中。所以我必须修复columnTypes。 R试图手动完成,但并不完美。 :-)

相关问题