通过RODBC连接到SQLite

时间:2014-02-14 09:43:53

标签: r odbc rodbc

我正在尝试通过RODBC包连接到sqlite数据库。

1。)我已经从http://www.ch-werner.de/sqliteodbc/安装了SQLite ODBC驱动程序,并使用Windows 7中的ODBC数据源管理器进行设置。设置为锁定超时20毫秒,同步模式正常,以及“不创建数据库“检查。我可以在“用户DSN”选项卡中将我的数据源看作SQLite3 ODBC驱动程序。

2.。)在R中,我运行以下命令来连接数据库。到目前为止没问题。看起来它设置正确。

library(RODBC)
con <- odbcConnect("dbss")
odbcGetInfo(con)
                                   DBMS_Name 
                                   "SQLite" 
                                   DBMS_Ver 
                                    "3.8.2" 
                            Driver_ODBC_Ver 
                                    "03.00" 
                           Data_Source_Name 
                                     "dbss" 
                                Driver_Name 
                          "sqlite3odbc.dll" 
                                 Driver_Ver 
                                    "0.996" 
                                   ODBC_Ver 
                               "03.80.0000" 
                                Server_Name 
                               "U:\\Research\\data\\smartsystemtic\\db.sqlite" 

3。)但是,如果我想查询一个表或只是显示表,我遇到了问题。我可以看到(使用SQLite Studio)我有一个名为“School”的表,有4列和3行。

> sqlQuery(con, paste("SELECT * FROM School"))
[1] SchID     Location  Authority SchSize  
<0 rows> (or 0-length row.names)

我知道有三行正在查看SQLite Studio。

4。)我也得到

> sqlTables(con)
[1] TABLE_CAT   TABLE_SCHEM TABLE_NAME  TABLE_TYPE  REMARKS    
<0 rows> (or 0-length row.names)

在SQLite Studio中,我看到数据库有4个表。

你能否指点我做错了什么?谢谢。

2 个答案:

答案 0 :(得分:2)

沃尔夫冈,

Tommy O&#39;戴尔的回答here为我工作。

打开与SQLite的ODBC连接时,我包含了believeNRows = FALSE, rows_at_time = 1

答案 1 :(得分:0)

我已经能够使用RODBC包访问我的SQLite数据库了。我在db中的每个10个表中至少有540万行。我从你的(@ Wolfgang Wu)设置和代码中看到的主要区别是我使用的SQLite 3数据源驱动程序是在System DSN选项卡中访问的。我安装了从http://www.ch-werner.de/sqliteodbc/

链接的64位驱动程序

以下是我的命令和结果。

################################################
# Create SQL tables from same-name r dataframes
################################################

  db <- dbConnect(SQLite(), dbname = "./slds.sqlite")

 # student record - stu, crs, dis, enr, prog, sped, addr
 # assessments - crct, crctm, eoct

  for (i in 1:dim(r)[1]) {
    dbWriteTable(conn = db, name = paste0(r[i, 1]), value = get(r[i, 1]),      
                 row.names = FALSE, overwrite = TRUE)
  }

# FYI - the r matrix is as follows:

# > r
#       [,1]    [,2]            
#  [1,] "stu"   "Student"       
#  [2,] "crs"   "Course"        
#  [3,] "dis"   "Discipline"    
#  [4,] "enr"   "Enroll"        
#  [5,] "addr"  "Address"       
#  [6,] "prog"  "Programs"      
#  [7,] "sped"  "Sp. Ed. Events"
#  [8,] "crct"  "CRCT(-M)"      
#  [9,] "crctm" "CRCT(-M)"      
# [10,] "eoct"  "EOCT" 


  ################################
  # Connect, access, show results
  ################################

  slds <- odbcConnect("slds_dews", believeNRows = FALSE, rows_at_time = 1)
  table_list<-sqlTables(slds)

table_list[, "TABLE_NAME"]
 [1] "stu"   "crs"   "dis"   "enr"   "addr"  "prog"  "sped"  "crct"  "crctm"     
     "eoct" 

odbcGetInfo(slds)
                       DBMS_Name 
                        "SQLite" 
                       DBMS_Ver 
                       "3.8.7.4" 
                 Driver_ODBC_Ver 
                         "03.00" 
                Data_Source_Name 
                     "slds_dews" 
                     Driver_Name 
               "sqlite3odbc.dll" 
                      Driver_Ver 
                        "0.9991" 
                        ODBC_Ver 
                    "03.80.0000" 
                     Server_Name 
               "H:\\slds.sqlite"