首先,我们学习如何创建一个SQLite 数据库。如果想要在data/example.sqlite 这个
路径中创建一个示例数据库,就必须确保该路径存在。如果该路径不存在,就必须先创建路径:
if (!dir.exists("data")) dir.create("data")
现在,路径 data/ 是可访问的了。接下来,我们载入 RSQLite 扩展包,并提供一个
数据库驱动(SQLite( ))和数据库文件(data/example.sqlite)来建立连接。尽
管目标文件尚不存在,数据库驱动会创建一个空文件,即一个空的 SQLite 数据库:
library(RSQLite)
##装载相关扩展包:DBI
con <- dbConnect(SQLite( ), "data/example.sqlite")
数据库连接 con 是介于用户和系统中间的一层。我们可以创建一个连接,并且连接到
关系型数据库,并通过这个连接实现查询、抽取及更新数据。后续的操作中一直使用该连
接,直到连接被关闭。在一个典型的关系型数据库中,我们可以创建一个新表,该表的名
11.1 操作关系型数据库 321
称、列的名称和数据类型都是事先确定的,并且可以在表中增加行记录,也可以更新现有
记录。关系型数据中的一张表看起来非常像 R 里的数据框。
现在,我们将创建一个简单的数据框,并将它作为一张表插入到数据库中。
example1 <- data.frame(
id=1:5,
type = c("A", "A", "B", "B", "C"),
score = c(8, 9, 8, 10, 9),
stringsAsFactors = FALSE)
example1
## id type score
## 1 1 A 8
## 2 2 A 9
## 3 3 B 8
## 4 4 B 10
## 5 5 C 9
现在,数据框已经准备好了,然后调用 dbWriteTable( ) 将其写入数据库,作为库
中的一张表:
dbWriteTable(con, "example1", example1)
## [1] TRUE
在 上 面 的代 码 中 , 我 们 也 可 以 使 用 其 他 表 名 来 存 储 同 样 的 数 据 。 最 后 ,
用 dbDisconnect( ) 断开数据库连接,这样 con 便不可用了。
dbDisconnect(con)
## [1] TRUE
1.向一个数据库写入多张表格
一个 SQLite 数据库是一个表的集合。因此,我们可以在数据库中存储多张表。
这次,我们将 ggplot2 中的 diamonds 数据集和 flights 中的 nycflights13 数
据集作为两张表格写入到一个数据库中。如果你还没有安装这两个包,请运行下列代码:
install.packages(c("ggplot2", "nycflights13"))
安装好两个扩展包之后,就可以调用 data( ) 来载入所需数据框:
data("diamonds", package = "ggplot2")
data("flights", package = "nycflights13")
我们重复之前的操作,但 dbWriteTable( ) 却报错了:
con <- dbConnect(SQLite( ), "data/datasets.sqlite")
dbWriteTable(con, "diamonds", diamonds, row.names=FALSE)
## Error in (function (classes, fdef, mtable) : unable to find an inherited
method for function 'dbWriteTable' for signature '"SQLiteConnection",
"character", "tbl_df"'
dbWriteTable(con, "flights", flights, row.names=FALSE)
## Error in (function (classes, fdef, mtable) : unable to find an inherited
method for function 'dbWriteTable' for signature '"SQLiteConnection",
"character", "tbl_df"'
dbDisconnect(con)
## [1] TRUE
此时,检查一下这两个变量的类,可能会有所帮助:
class(diamonds)
## [1] "tbl_df" "tbl" "data.frame"
class(flights)
## [1] "tbl_df" "tbl" "data.frame"
注意,diamonds 和 flights 不仅仅是一般的 data.frame 类型,而是更复杂的数
据结构。要将它们写入数据库,需要用 as.data.frame( ) 将其转化成普通的数据框对象。
con <- dbConnect(SQLite( ), "data/datasets.sqlite")
dbWriteTable(con, "diamonds", as.data.frame(diamonds), row.names = FALSE)
## [1] TRUE
dbWriteTable(con, "flights", as.data.frame(flights), row.names = FALSE)
## [1] TRUE
dbDisconnect(con)
## [1] TRUE
现在,数据库中就有这两张表了。
2.向表中追加数据
在本节的开头我们提到,向数据库的表中追加记录是非常容易的。这里有一个简单的
例子,首先生成几个数据块,然后将它们依次追加到数据库的表中:
con <- dbConnect(SQLite( ), "data/example2.sqlite")
chunk_size <- 10
id <- 0
for(i in 1:6) {
chunk <- data.frame(id = ((i-1L) * chunk_size):(i * chunk_size-1L),
type = LETTERS[[i]],
score = rbinom(chunk_size, 10, (10-i)/10),
stringsAsFactors = FALSE)
dbWriteTable(con, "products", chunk,
append = i > 1, row.names = FALSE)
}
dbDisconnect(con)
## [1] TRUE
注意,每次代码块都生成了一个数据框,其中包含一些确定数据和一些随机数,我们
将这些数据记录追加到一个名为 products 的表中。这个例子与之前例子的不同之处在
于,当调用 dbWriteTable( ) 时,在第 1 次循环中令参数 append = FALSE,以便
在数据库中创建表格,而后面的每次循环中要令 append = TRUE 来扩展已有的表格。

创建一个 SQLite 数据库的更多相关文章

  1. Android下创建一个SQLite数据库

    数据库:SQLite(轻量级,嵌入式的数据库) 大量的相似结构的数据的储存,快速的查询.特殊的文件(按照一定的格式生成) 数据库的创建 创建文件 1.声明文件对象,文件是不会被创建出来的. File ...

  2. [android] android下创建一个sqlite数据库

    Sqlite数据库是开源的c语言写的数据库,android和iphone都使用的这个,首先需要创建数据库,然后创建表和字段,android提供了一个api叫SQLiteOpenHelper数据库的打开 ...

  3. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)

    android 一个SQLite数据库多个数据表(带demo) 前言        demo演示        一.搭建        二.建立实体类        三.建立数据库操作类        ...

  4. 在相同的主机上创建一个duplicate数据库

    在相同的主机上创建一个duplicate数据库 source db:dbtest auxiliary db:dupdb duplicate database会自动分配一个新的DBID要确保auxili ...

  5. 记一次oracle创建一个新数据库,并导入正式环境数据库备份的dmp包过程

    背景:正式环境oracle数据库定时用exp备份一个dmp包,现在打算在一台机器上创建一个新数据库,并导入这个dmp包. 1.创建数据库 开始 -> 所有程序 -> Oracle -> ...

  6. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  7. 如何创建一个 PostgreSQL 数据库?

    PostgreSQL 官网截图 PostgreSQL 是什么? PostgreSQL 是一个功能非常强大的,历史悠久,开源的关系数据库.PostgreSQL支持大部分的SQL标准并且提供了很多其他现代 ...

  8. Android(java)学习笔记192:SQLite数据库(表)的创建 以及 SQLite数据库的升级

    一.数据库的创建 1.文件的创建      //引用,如果文件不存在是不会创建的   File  file = new File("haha.txt"):     //输出流写数据 ...

  9. iOS中 用FMDB封装一个SQLite数据库

    建立一个单例: DataBaseHandle.h #import <Foundation/Foundation.h> @class PersonModel; @class FMDataba ...

随机推荐

  1. tortoiseSVN如何发现和解决冲突?

    版本冲突原因: 假设A.B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns ...

  2. (贪心)kruskal思想

    hdu4313 Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. 安装MySQL与安装Hive

    安装mysql 检查是否安装mysql: rpm -qa |grep mysql 删除已经安装的mysql: rpm -e mysql-libs-5.1.71-1.el6.x86_64 报错:因为my ...

  4. ArcGIS API for JavaScript开发笔记(一)——ArcGIS for Javascript API 3.14本地部署

    堪称史上最详细的< ArcGIS forJavascript API 3.14本地部署>文档,有图有真相~~~ ---------环境:Windows server 2012R2,IIS ...

  5. 电子商务(电销)平台中订单模块(Order)数据库设计明细

    电子商务(电销)平台中订单模块(Order)数据库设计明细 - sochishun - 博客园 http://www.cnblogs.com/sochishun/p/7040628.html 电子商务 ...

  6. PHP对象在内存中的分配

    对像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上 说大体上是分为4 段,栈空间段.堆空 ...

  7. CF734F Anton and School 构造+数论

    正解:构造 解题报告: 先放下传送门QwQ 这题首先要知道一个结论:(x&y)+(x|y)=x+y 还是能理解的趴? 所以我们把bi+ci就能得到∑a+n*a[i] 然后我们就能成功求出∑a ...

  8. How Instagram Feeds Work: Celery and RabbitMQ(转)

    原文:http://blogs.vmware.com/vfabric/2013/04/how-instagram-feeds-work-celery-and-rabbitmq.html Instagr ...

  9. linux 安装libevent

    今天再ubuntu下安装libevent,下载源码 tar -xzvf libevent-1.4.15.tar.gz cd libevent-1.4.15 ./configure make make ...

  10. PHP之设计模式

    https://blog.csdn.net/self_realian/article/details/78228733 掌握PHP各类设计模式,具备设计纯面向对象框架和系统能力是非常有必要的.给大家一 ...