首先,我们学习如何创建一个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. C语言实现日历输出

    这个还是挺实用的.... 头文件: #ifndef MAIN_H #define MAIN_H #include "stdio.h" #include "math.h&q ...

  2. Linux配置Nginx,MySql,php-fpm开机启动的方法

    一. Nginx 开机启动 1.在/etc/init.d/目录下创建脚本 vim /etc/init.d/nginx 2.编写脚本内容 (将以下复制进去相应改动安装路径) 1 2 3 4 5 6 7 ...

  3. react 侧栏二级菜单组件

    侧边栏菜单组件 component 下新建menu文件,menu下建index.jsx和subitem.jsx index.jsx import React, { Component } from ' ...

  4. Apache的配置详解,最好的Apache配置文档

    http://blog.csdn.net/apple_llb/article/details/50253889 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.c ...

  5. PHP 的“魔术常量”

    名称 说明 __LINE__ 文件中的当前行号. __FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路 ...

  6. How many ways??---hdu2157(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157   题意:有一个有向图,含有n个节点,m条边,Q个询问,每个询问有 s,t,p,求 s 到 t ...

  7. 双态运维分享之二: 服务型CMDB的消费场景

    近年来,CMDB在IT运维管理中的价值逐步得到认可,使用CMDB的期望值也日益增长.然而,CMDB实施和维护的高成本却一直是建设者们的痛点.那么今天,我们来探讨一下如何通过消费来持续驱动CMDB的逐步 ...

  8. 从零开始写JavaWeb框架(第四章节的AOP)

    使用"链式代理"实现 AOP   本文是<轻量级 Java Web 框架架构设计>的系列博文. 大家是否还记得<Proxy 那点事儿>中提到的 CGLib ...

  9. (2.11)Mysql之SQL基础——存储过程与变量

    (2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...

  10. 【生产问题】write log 引起系统卡死,业务全部阻塞

    解决办法:https://www.sqlskills.com/help/waits/writelog/ [生产问题]write log 引起系统卡死,业务全部阻塞 writelog不成功不作数的,所以 ...