精华内容
下载资源
问答
  • 我们也可以将数据库理解为一个电子版文件柜,用户可以通过计算机操作对文件柜中所存放文件进行新增,查询,更改,删除等操作。 什么是数据库管理系统? 数据库管理系统(Database Management System 简称为DBMS .....

    什么是数据库?

    数据库其英文名称为(database)简称为DB,其是一种以以一定方式存储在一起,能与多个用户共享,具有尽可能小的冗余度,与应用程序彼此独立的数据集合。我们也可以将数据库理解为一个电子版文件柜,用户可以通过计算机操作对文件柜中所存放的文件进行新增,查询,更改,删除等操作。

    什么是数据库管理系统?

    数据库管理系统(Database Management System 简称为DBMS ),它是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系用可以依据它所支持的数据库模型来作以分类,也可依据所支持的计算机类型来做分类,也可依据所用的查询语言来进行分类,分类方式可以选择很多,但是,无论我们使用哪种分类方式,我们要知道,一些DBMS是可以支持跨类别的,例如一些数据库管理系统就支持多种语言查询。

    当下流行的一些数据库的分类

    关系型数据库 非关系型数据库
    MySQL BigTable(google)
    PostgerSQL Cassandra
    Microsoft SQL server mongoDB
    Oracel couchDB
    Sybase Apache Cassandra
    dBASE Dynamo
    foshub LevelDB

    可见我们学习的这个MySQL是一种典型的关系型数据库

    数据库模型

    • 对象模型
    • 层次模型(轻量级数据访问协议)
    • 网状模型(大型数据存储)
    • 关系模型
    • 面向对象模型
    • 半结构化模型
    • 平面模型(表格模型,一般在形式上是一个二维数组)

    数据库的架构

    数据库的架构大致可以分为三个概括层次:内层,概念层和外层。

    • 内层:最接近实际的存储体,就是有关数据的真实存储方式。
    • 外层:最接近用户,就是用户查看数据的方式。
    • 概念层:介于两者之间的间接层。

    MySQL数据库简介

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

    MySQL的安装及连接

    具体步骤为:
    1.下载得到MySQL的安装压缩包 下载官网 : https://www.mysql.com/
    得到一个这样子的安装包后选择好解压
    得到一个这样子的安装包后选择好解压
    2.解压好之后将文件bin目录的路径添加到系统的环境变量path中

    在这里插入图片描述
    在这里插入图片描述
    桌面上右键“我的电脑”选择属性,点击“高级系统设置”
    在这里插入图片描述

    打开后选择环境变量
    在这里插入图片描述

    双击系统变量中的path
    在这里插入图片描述
    之后选择新建,粘贴复制的路径
    在这里插入图片描述
    在bin目录的上级目录新建文件"my.ini",文件编辑以下内容后保存(注意文件保存时的编码格式一定要是ANSI,这个在保存的时候有提示)。

    		 [mysqld]
    		 basedir=D:\Program Files\mysql-5.7\    //等号后面的内容就是你自己的解压路径
    		 datadir=D:\Program Files\mysql-5.7\data\     //等号后面的内容就是你自己的解压路径
    		 port=3306
    		 skip-grant-tables
    

    3.然后在运行框输入cmd,右键点击程序选择以管理员身份打开命令窗口(否则之后对MySQL的指令会回复MySQL拒绝访问)将路径切换至mysql下的bin目录(这里是使用dos命令来进行操作),然后输入mysqld –install (安装mysql)
    再输入 mysqld --initialize-insecure --user=mysql 初始化数据文件
    4.然后使用命令 net start mysql启动mysql 然后用命令 mysql –uroot –p 进入mysql管理界面(密码可为空)
    5.进入界面后输入语句:update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’; 这里我们是将登陆连接MySQL的密码改成了123456
    6.修改完成后,在输入 flush privileges; 刷新权限。
    7.将刚才的my.ini文件内的最后一句“skip-grant-tables”删除后保存文件。
    8. 输入 exit 退出Mysql。
    9.输入 net stop mysql 终止mysql服务。
    9.重启 MySQL 同样的我们以管理元 身份打开命令窗口,然后输 net start mysql
    10.重启MySQL,然后使用命令 mysql -uroot -p123456 就可以成功进入MySQL服务。
    最终成功显示页面
    在这里插入图片描述

    安装MySQL其实类同于安装其他的一些软件编译工具一般,大致过程都是解压压缩包,然后配置环境变量,最后校验登陆。当然过程本身没有任何的难度,关键问题是如果在安装过程中根据个人不同会遇到各种各样的其他问题,比如说,有的个人电脑少了一些驱动,需要补丁修复,有的安装时重复安装,服务无法启动此类问题。这些问题,基本上在网络问答上都有解决,我建议是遇到问题首先核对自己的操作是否符合流程,以及内容有没有疏忽遗漏,检查无误在考虑其他的因素。当然,一般时么有问题的啦。

    mysql命令操作

    首先我们试一下几个最简单的命令操作:

    update user set password=password('123456')where user='root'; 修改密码
    flush privileges;  刷新数据库
    show databases; 显示所有数据库
    use dbname; 打开某个数据库
    show tables; 显示数据库mysql中所有的表
    describe user; 显示表mysql数据库中user表的列信息
    create database name; 创建数据库
    use databasename; 选择数据库
    
    exit; 退出Mysql
    ? 命令关键词 : 寻求帮助
    # 表示注释
    

    这些命令都可以在命令窗口直接输入,回车后即可执行,保证输入的命令正确,则可以执行指令。
    接下来我们可以通过以上指令来进行一个名为class的数据库名称创建,然后还需要在此数据库中创建一个一个student表,里面有三列,记录上学生的姓名和性别以及年龄,这是一个最为简单的数据库中的表的创建。
    创建数据库,库名为class
    在这里插入图片描述
    这样我们就成功创建了一个新的数据库,但这个数据库里什么数据表都没有,目前就是一个空的数据库;所以我们现在创建一个数据表将并将其放入该数据库;
    创建数据表的语句

    create table [if not exists] `表名`(
        '字段名1' 列类型 [属性][索引][注释],
        '字段名2' 列类型 [属性][索引][注释],
        #...
        '字段名n' 列类型 [属性][索引][注释]
    )[表类型][表字符集][注释];
    

    1.字段名表示的就是你所要创建的数据表的每列的列名称。
    2.列类型用来规定该列所存数据的数据类型,SQL语句中的数据类型大致可以分为四大类

    • 数值类型
    类型 说明 存储需求
    tinyint 非常小的数据 1字节
    smallint 较小的数据 2字节
    mediumint 中等大小的数据 3字节
    int 标准整数 4字节
    bigint 较大的整数 8字节
    float 单精度浮点数 4字节
    double 双精度浮点数 8字节
    decimal 字符串形式的浮点数 m个字节
    • 字符串类型
    类型 说明 最大长度
    char(M) 固定长度的字符串,检索快,但费空间(M<=225) M字符
    varchar(M) 可变字符串(M<=65535) 可变长度,长度值可以小于等于M
    tinytext 微型文本串 1023字节
    text 文本串 1048575字节
    • 日期和时间型数值类型
    类型 说明 取值范围
    DATE YYYY-MM-DD,日期格式 1000-01-01~9999-12-31
    TIME hh:mm:ss,时间格式 -838:59:59~838:59:59
    DATETIME YY-MM-DD hh:mm:ss 1001-01-01 00:00:00至9999-12-31 23:59:59
    TIMESTAMP YYYYMMDDhhmmss格式表示的时间戳 197010101000000~2037年的某个时刻
    YEAR YYYY格式的年份值 1901~2155
    • NULL值(就是么有值或者是未知值,注意不要用NULL进行算术运算,运算结果仍然为NULL)
      3.数据字段属性
    属性名称 属性作用
    UnSigned 无符号的,声明该数据列不允许负数
    ZEROFILL 0填充的,不足位数用0来进行填充
    Auto_InCrement 自动增长的,每添加一条数据,自动在上一个记录数上加1,通常用于设置主键,且为整数类型,单也可定义起始值和设置步长(AUTO_INCREMENT=100)此类设置只影响当前表;SET @@AUTO_INCREMENT_INCREMENT=100;影响所有使用自增的表(此步长值使用到全局的表)
    NULL和NOT NULL 默认值为NULL,即没有插入该列的数值,如果设置为 NOT NULL 则该列必须有值
    DEFAULT 默认的,用于设置该列的默认值

    接下来我们就要在之前创建的class数据库中加入一个数据表了
    先选中数据库class,我们要先进入这个数据库
    在这里插入图片描述
    然后开始创建我们想要表的结构
    在这里插入图片描述
    输入 DESC student; 查看表的结构
    在这里插入图片描述
    并且这里我们注意在创建表的结构的时候,最后一行的指令
    ENGINE=InnoDB DEFUALT CHARSET=utf8
    这两句指令是明确了数据表的类型(也就是该表的引擎类型),数据表类型可以分为MyISAM , InnoDB , HEAP , BOB , CSV等…常见的 MyISAM 与 InnoDB 类型

    名称 MyISAM InnoDB
    事务处理 不支持 支持
    数据行锁定 不支持 支持
    外键约束 不支持 支持
    全文索引 支持 不支持
    表空间大小 较小 较大,约两倍

    适用场合:

    • 适用MyISAM : 节约空间及相应速度
    • 适用InnoDB : 安全性 , 事务处理及多用户操作数据表
      数据表的存储位置 :
      MySQL数据表以文件方式存放在磁盘中
      包括表文件 , 数据文件 , 以及数据库的选项文件
      位置 : Mysql安装目录\data\下存放数据表 . 目录名对应数据库名 , 该目录下文件名对应数据表 .
      注意 :
      InnoDB类型数据表只有一个 *.frm文件 , 以及上一级目录的ibdata1文件
      MyISAM类型数据表对应三个文件 :
    • . frm – 表结构定义文件
    • . MYD – 数据文件(data)
    • . MYI – 索引文件(index)
      在这里插入图片描述
      接下来我们可以对我们的表进行一些小修改,比如说我们现在还想知道学生的个人电话号码,这就得我们往已有的表里添加一个字段,这里,我们使用ALTER 语句进行操作;
      修改表( ALTER TABLE )
    • 修改表名 :
      ALTER TABLE 旧表名 RENAME AS 新表名
    • 添加字段 :
      ALTER TABLE 表名 ADD字段名 列属性[属性]
    • 修改字段 :
      ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
      ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
    • 删除字段 :
      ALTER TABLE 表名 DROP 字段名
      这里我们通过指令来添加字段:
      在这里插入图片描述
      再看看表的结构:
      在这里插入图片描述
      可见我们添加成功了;
    展开全文
  • Android创建数据表和LitePal的基本用法

    千次阅读 2014-12-31 23:45:40
    并且感谢guolin分享了这么精彩博文。以下正文: 上一篇文章中我们学习了一些Android数据库相关基础知识,和几个颇为...但是我们都知道,数据库是要和程序结合在一起使用,单独对一个数据库去进行増删改查操作并

    本文属于转载,在此声明,出处:http://blog.csdn.net/guolin_blog/article/details/38556989

    并且感谢guolin分享了这么精彩的博文。以下正文:

    上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的。但是我们都知道,数据库是要和程序结合在一起使用的,单独对一个数据库去进行増删改查操作并没有什么意义,因此今天我们就来学习一下如何在Android程序当中去操作SQLite数据库,还没看过前一篇文章的朋友可以先去参考 Android数据库高手秘籍(一)——SQLite命令 。

    操作数据库的第一步当然是创建表了,传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之外,还会讲解LitePal这个框架的基本用法,并使用它来完成同样的建表操作,让大家体会到使用框架来操作数据库的魅力。

    那么先来简单介绍一下吧,LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发时最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表、増删改查的操作。并且LitePal很“轻”,jar包只有100k不到,而且近乎零配置,这一点和Hibernate这类的框架有很大区别。目前LitePal的源码已经托管到了GitHub上,地址是 https://github.com/LitePalFramework/LitePal 。

    OK,简单介绍完了LitePal,我们还是先来看一下,在传统的Android开发中,需要怎么去创建表。

    传统的建表方式

    其实为了方便我们对数据库表进行管理,Android本身就提供了一个帮助类:SQLiteOpenHelper。这个类集创建和升级数据库于一身,并且自动管理了数据库版本,算是一个非常好用的工具。

    那我们现在就来试试SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。本篇文章只需要把注意力放在创建数据库这里就行了,升级数据库我们会在下一篇文章中去讨论。

    新建一个MySQLiteHelper类并让它继承SQLiteOpenHelper,这样一个最基本的数据库帮助类的代码如下所示:

    [java] view plaincopy
    1. public class MySQLiteHelper extends SQLiteOpenHelper {  
    2.   
    3.     public MySQLiteHelper(Context context, String name, CursorFactory factory,  
    4.             int version) {  
    5.         super(context, name, factory, version);  
    6.     }  
    7.   
    8.     @Override  
    9.     public void onCreate(SQLiteDatabase db) {  
    10.     }  
    11.   
    12.     @Override  
    13.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
    14.     }  
    15.   
    16. }  
    其中,当数据库创建的时候会调用onCreate()方法,在这里去执行建表操作就可以了。比如说我们想新建一张news表,其中有title,content,publishdate,commentcount这几列,分别代表着新闻标题、新闻内容、发布时间和评论数,那么代码就可以这样写:
    [java] view plaincopy
    1. public class MySQLiteHelper extends SQLiteOpenHelper {  
    2.       
    3.     public static final String CREATE_NEWS = "create table news ("  
    4.             + "id integer primary key autoincrement, "  
    5.             + "title text, "  
    6.             + "content text, "  
    7.             + "publishdate integer,"  
    8.             + "commentcount integer)";  
    9.   
    10.     public MySQLiteHelper(Context context, String name, CursorFactory factory,  
    11.             int version) {  
    12.         super(context, name, factory, version);  
    13.     }  
    14.   
    15.     @Override  
    16.     public void onCreate(SQLiteDatabase db) {  
    17.         db.execSQL(CREATE_NEWS);  
    18.     }  
    19.     ...  
    20. }  
    可以看到,我们把建表语句定义成了一个常量,然后在onCreate()方法中去执行了这条建表语句,news表也就创建成功了。这条建表语句虽然简单,但是里面还是包含了一些小的细节,我来解释一下。首先,根据数据库的范式要求,任何一张表都应该是有主键的,所以这里我们添加了一个自增长的id列,并把它设为主键。然后title列和content列都是字符串类型的,commentcount列是整型的,这都很好理解,但是publishdate列该怎么设计呢?由于SQLite中并不支持存储日期这种数据类型,因此我们需要将日期先转换成UTC时间(自1970年1月1号零点)的毫秒数,然后再存储到数据库中,因此publishdate列也应该是整型的。

    现在,我们只需要获取到SQLiteDatabase的实例,数据库表就会自动创建了,如下所示:

    [java] view plaincopy
    1. SQLiteOpenHelper dbHelper = new MySQLiteHelper(this"demo.db"null1);  
    2. SQLiteDatabase db = dbHelper.getWritableDatabase();  

    感觉很简单很方便是吗?那你就太容易满足了,下面我们就来学习一下LitePal的基本用法,看一看使用这个框架是如何实现同样的功能的。

    LitePal的基本用法

    虽说LitePal宣称是近乎零配置,但也只是“近乎”而已,它还是需要进行一些简单配置才可以使用的,那么我们第一步就先快速学习一下LitePal的配置方法。

    快速配置

    1. 引入Jar包或源码

    首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可。下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了,如下图所示:


    如果你不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到Eclipse当中,再让我们的项目去引用这个library库就可以了。

    2. 配置litepal.xml

    接着在项目的assets目录下面新建一个litepal.xml文件,并将以下代码拷贝进去:

    [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <litepal>  
    3.     <dbname value="demo" ></dbname>  
    4.   
    5.     <version value="1" ></version>  
    6.   
    7.     <list>  
    8.     </list>  
    9. </litepal>  
    配置文件相当简单,<dbname>用于设定数据库的名字,<version>用于设定数据库的版本号,<list>用于设定所有的映射模型,我们稍后就会用到。

    3. 配置LitePalApplication

    由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了,如下所示:

    [html] view plaincopy
    1. <manifest>  
    2.     <application  
    3.         android:name="org.litepal.LitePalApplication"  
    4.         ...  
    5.     >  
    6.     ...  
    7.     </application>  
    8. </manifest>  
    当然,有些程序可能会有自己的Application,并在这里配置过了。比如说有一个MyApplication,如下所示:
    [html] view plaincopy
    1. <manifest>  
    2.     <application  
    3.         android:name="com.example.MyApplication"  
    4.         ...  
    5.     >  
    6.     ...  
    7.     </application>  
    8. </manifest>  
    没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:
    [java] view plaincopy
    1. public class MyApplication extends LitePalApplication {  
    2.     ...  
    3. }  

    但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。

    仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。

    开始建表

    前面在介绍的时候已经说了,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。

    但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。

    那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,如下所示:

    [java] view plaincopy
    1. package com.example.databasetest.model;  
    2.   
    3. public class News {  
    4. }  
    然后,表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段,代码如下所示:
    [java] view plaincopy
    1. public class News {  
    2.       
    3.     private int id;  
    4.       
    5.     private String title;  
    6.       
    7.     private String content;  
    8.       
    9.     private Date publishDate;  
    10.       
    11.     private int commentCount;  
    12.       
    13.     // 自动生成get、set方法  
    14.     ...  
    15. }  
    其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。

    这里我要特别说明一下,LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的。根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。

    那么有的朋友可能会问了,既然是自动映射的话,如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射的话,只需要将它改成public、protected或default修饰符就可以了。

    现在模型类已经建好了,我们还差最后一步,就是将它配置到映射列表当中。编辑assets目录下的litepal.xml文件,在<list>标签中加入News模型类的声明:

    [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <litepal>  
    3.     <dbname value="demo" ></dbname>  
    4.   
    5.     <version value="1" ></version>  
    6.   
    7.     <list>  
    8.         <mapping class="com.example.databasetest.model.News"></mapping>  
    9.     </list>  
    10. </litepal>  
    注意这里一定要填入News类的完整类名。

    OK,这样所有的工作就都已经完成了,现在只要你对数据库有任何的操作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:

    [java] view plaincopy
    1. SQLiteDatabase db = Connector.getDatabase();  
    调用一下上述代码,news表就应该已经创建成功了。我们使用在上一篇文章中学到的SQLite命令来查看一下,打开demo.db数据库,输入.table命令,结果如下图所示:


    可以看到,news表已经存在了。另外两张android_metadata和table_schema表是自动生成的,我们不用理。接下来我们还可以再查询一下news表的建表语句,如下图所示:


    这就是LitePal根据News类中的字段自动帮我们生成的建表语句,由此也说明,建表操作已经成功完成了。

    好了,到目前为止你已经算是对LitePal的用法有点入门了,那么本篇文章的内容就到这里,下篇文章当中我们将学习使用LitePal进行升级表的操作。感兴趣的朋友请继续阅读 Android数据库高手秘籍(三)——使用LitePal升级表 。

    LitePal开源项目地址:

    https://github.com/LitePalFramework/LitePal

    展开全文
  • 篇文章中我们学习了一些...传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之外,还会讲解LitePal这框架的基本用法,并使用它来完成同样的建表操作,让大家体会到使用框架来操作数据

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/38556989


    上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的。但是我们都知道,数据库是要和程序结合在一起使用的,单独对一个数据库去进行増删改查操作并没有什么意义,因此今天我们就来学习一下如何在Android程序当中去操作SQLite数据库,还没看过前一篇文章的朋友可以先去参考 Android数据库高手秘籍(一)——SQLite命令 。


    操作数据库的第一步当然是创建表了,传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之外,还会讲解LitePal这个框架的基本用法,并使用它来完成同样的建表操作,让大家体会到使用框架来操作数据库的魅力。


    那么先来简单介绍一下吧,LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发时最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表、増删改查的操作。并且LitePal很“轻”,jar包只有100k不到,而且近乎零配置,这一点和Hibernate这类的框架有很大区别。目前LitePal的源码已经托管到了GitHub上,地址是 https://github.com/LitePalFramework/LitePal 。


    OK,简单介绍完了LitePal,我们还是先来看一下,在传统的Android开发中,需要怎么去创建表。


    传统的建表方式


    其实为了方便我们对数据库表进行管理,Android本身就提供了一个帮助类:SQLiteOpenHelper。这个类集创建和升级数据库于一身,并且自动管理了数据库版本,算是一个非常好用的工具。


    那我们现在就来试试SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。本篇文章只需要把注意力放在创建数据库这里就行了,升级数据库我们会在下一篇文章中去讨论。


    新建一个MySQLiteHelper类并让它继承SQLiteOpenHelper,这样一个最基本的数据库帮助类的代码如下所示:

    public class MySQLiteHelper extends SQLiteOpenHelper {
    
    	public MySQLiteHelper(Context context, String name, CursorFactory factory,
    			int version) {
    		super(context, name, factory, version);
    	}
    
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    	}
    
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    	}
    
    }
    其中,当数据库创建的时候会调用onCreate()方法,在这里去执行建表操作就可以了。比如说我们想新建一张news表,其中有title,content,publishdate,commentcount这几列,分别代表着新闻标题、新闻内容、发布时间和评论数,那么代码就可以这样写:
    public class MySQLiteHelper extends SQLiteOpenHelper {
    	
    	public static final String CREATE_NEWS = "create table news ("
    			+ "id integer primary key autoincrement, "
    			+ "title text, "
    			+ "content text, "
    			+ "publishdate integer,"
    			+ "commentcount integer)";
    
    	public MySQLiteHelper(Context context, String name, CursorFactory factory,
    			int version) {
    		super(context, name, factory, version);
    	}
    
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		db.execSQL(CREATE_NEWS);
    	}
        ...
    }

    可以看到,我们把建表语句定义成了一个常量,然后在onCreate()方法中去执行了这条建表语句,news表也就创建成功了。这条建表语句虽然简单,但是里面还是包含了一些小的细节,我来解释一下。首先,根据数据库的范式要求,任何一张表都应该是有主键的,所以这里我们添加了一个自增长的id列,并把它设为主键。然后title列和content列都是字符串类型的,commentcount列是整型的,这都很好理解,但是publishdate列该怎么设计呢?由于SQLite中并不支持存储日期这种数据类型,因此我们需要将日期先转换成UTC时间(自1970年1月1号零点)的毫秒数,然后再存储到数据库中,因此publishdate列也应该是整型的。


    现在,我们只需要获取到SQLiteDatabase的实例,数据库表就会自动创建了,如下所示:

    SQLiteOpenHelper dbHelper = new MySQLiteHelper(this, "demo.db", null, 1);
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    感觉很简单很方便是吗?那你就太容易满足了,下面我们就来学习一下LitePal的基本用法,看一看使用这个框架是如何实现同样的功能的。


    LitePal的基本用法


    虽说LitePal宣称是近乎零配置,但也只是“近乎”而已,它还是需要进行一些简单配置才可以使用的,那么我们第一步就先快速学习一下LitePal的配置方法。


    快速配置


    1. 引入Jar包或源码

    首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可。下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了,如下图所示:




    如果你不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到Eclipse当中,再让我们的项目去引用这个library库就可以了。


    2. 配置litepal.xml

    接着在项目的assets目录下面新建一个litepal.xml文件,并将以下代码拷贝进去:

    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <dbname value="demo" ></dbname>
    
        <version value="1" ></version>
    
        <list>
        </list>
    </litepal>

    配置文件相当简单,<dbname>用于设定数据库的名字,<version>用于设定数据库的版本号,<list>用于设定所有的映射模型,我们稍后就会用到。


    3. 配置LitePalApplication

    由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了,如下所示:

    <manifest>
        <application
            android:name="org.litepal.LitePalApplication"
            ...
        >
        ...
        </application>
    </manifest>
    当然,有些程序可能会有自己的Application,并在这里配置过了。比如说有一个MyApplication,如下所示:
    <manifest>
        <application
            android:name="com.example.MyApplication"
            ...
        >
        ...
        </application>
    </manifest>
    没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:
    public class MyApplication extends LitePalApplication {
        ...
    }

    但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。


    仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。


    开始建表


    前面在介绍的时候已经说了,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。


    但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。


    那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,如下所示:

    package com.example.databasetest.model;
    
    public class News {
    }
    然后,表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段,代码如下所示:
    public class News {
    	
    	private int id;
    	
    	private String title;
    	
    	private String content;
    	
    	private Date publishDate;
    	
    	private int commentCount;
    	
    	// 自动生成get、set方法
    	...
    }

    其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。


    这里我要特别说明一下,LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的。根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。


    现在模型类已经建好了,我们还差最后一步,就是将它配置到映射列表当中。编辑assets目录下的litepal.xml文件,在<list>标签中加入News模型类的声明:

    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <dbname value="demo" ></dbname>
    
        <version value="1" ></version>
    
        <list>
            <mapping class="com.example.databasetest.model.News"></mapping>
        </list>
    </litepal>

    注意这里一定要填入News类的完整类名。


    OK,这样所有的工作就都已经完成了,现在只要你对数据库有任何的操作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:

    SQLiteDatabase db = Connector.getDatabase();

    调用一下上述代码,news表就应该已经创建成功了。我们使用在上一篇文章中学到的SQLite命令来查看一下,打开demo.db数据库,输入.table命令,结果如下图所示:




    可以看到,news表已经存在了。另外两张android_metadata和table_schema表是自动生成的,我们不用理。接下来我们还可以再查询一下news表的建表语句,如下图所示:




    这就是LitePal根据News类中的字段自动帮我们生成的建表语句,由此也说明,建表操作已经成功完成了。


    好了,到目前为止你已经算是对LitePal的用法有点入门了,那么本篇文章的内容就到这里,下篇文章当中我们将学习使用LitePal进行升级表的操作。感兴趣的朋友请继续阅读 Android数据库高手秘籍(三)——使用LitePal升级表 。


    关注我的技术公众号,每天都有优质技术文章推送。关注我的娱乐公众号,工作、学习累了的时候放松一下自己。

    微信扫一扫下方二维码即可关注:

            

    展开全文
  • 现在数据库工具很多,无论...创建一个数据表,这里面肯定有数据表名、字段、字段类型以及长度,基本就这些,这里我假设数据表名为dobunkan_a,字段有id、name、tel三个字段,我们先用sqlserver命令创建这个表。CREAT...

    现在数据库工具很多,无论是Mysql还是Mssql,都有很多对应的工具,这也导致了现在很多技术员只会使用工具创建数据表,离开工具就什么都干不了了,今天我就是给大家讲讲,不用工具,怎样创建数据表。

    创建一个数据表,这里面肯定有数据表名、字段、字段类型以及长度,基本就这些,这里我假设数据表名为dobunkan_a,字段有id、name、tel三个字段,我们先用sqlserver命令创建这个表。

    CREATE TABLE [dbo].[dobunkan_a]

    (

    [id] [tinyint] IDENTITY(1,1) NOT NULL,

    [name] [nvarchar](max) NOT NULL DEFAULT (N'无'),

    [tel] [nvarchar](max) NOT NULL DEFAULT (N'无'),

    PRIMARY KEY ([id])

    )

    现在我们在mysql下创建这样一个表:

    CREATE TABLE IF NOT EXISTS `dobunkan_a`(

    --创建数据表

    --create table if not exists `表名`(

    --如果不用IF NOT EXISTS,创建同名的表就会报错。

    `id` INT UNSIGNED AUTO_INCREMENT,

    --`字段名` 字符类型 AUTO_INCREMENT 定义id列为自增的属性,一般用于主键,数值会自动加1。

    `name` VARCHAR(100) NOT NULL,

    --字段名为name,字段类型为VARCHAR,长度为100,不允许为空

    `tel` VARCHAR(40) NOT NULL,

    PRIMARY KEY ( `id` )

    --PRIMARY KEY关键字用于定义列id为主键。 您可以使用多列来定义主键,列间以逗号分隔。

    )ENGINE=InnoDB DEFAULT CHARSET=utf8;

    --ENGINE 设置存储引擎,CHARSET 设置编码。

    到这里为止,mysql和sqlserver数据表的建立和字段的设置就完成了。

    展开全文
  • 四、创建数据表

    2020-05-11 15:37:13
    创建数据表需要制定表名字,表中的每一列的列名和对应的数据...如我们先创建一个学生表。 这里的符号不是单引号,要注意下的。这里的符号是数字键1左边那个按键符号。这就是最基本的创建表的命令了。 这个表里,...
  • 一、前言入门 基本概念介绍 关系型数据库 关系型数据库,是指采用了关系模型来组织...关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维及其之间关系组成的一个数据组织。(百度百科) ...
  • VFP自由表的创建、维护命令实例

    千次阅读 2018-10-18 19:47:28
    这是上机课上做的,主要...包括表的创建数据追加、插入、删除、修改等还有一个小的表单设计。 下面给出word里面内容和截图,格式有点奇怪,不知道怎么优化请讲究看一下,希望对大家有帮助~ 一、实验目的 1. 掌...
  • SQLite 数据类型 和 基本命令SQLite数据类型SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。您可以在创建表的同时使用这些数据类型。SQLite 使用...
  • 概念 : 数据库就是长期存放在计算机内,有组织,可共享大量数据集合,是一个数据"仓库"。 作用 : 保存数据,并能让用户安全管理数据(如:新增、查询、更新、删除等操作),减少冗余… 数据库又分为: 关系型数据库 ...
  • 上篇文章我们学到了如何安装数据库,下来我们学习数据库一些基本的操作,其中也包括对表操作。...通过此我们可以在数据库系统中创建一个叫reba数据库create database reba character set utf8 ;这条命令...
  • hive的基本命令 数据库的创建 定义 本质上是在hdfs上创建一个目录,使用comment加入数据库的描述信息,描述信息放在引号里。数据库的属性信息放在描述信息之后用with dbproperties 加入,属性信息放在括号内,属性...
  • Oracle的基本命令

    2020-04-20 11:15:48
    一个数据库下可以建立多个空间,一个表空间可以建立多个用户、一个用户下可以建立多个。 create tablespace xgq datafile 'c:user.dbf' size 100m autoextend on next 10m xgq 为空间名称 datafile 指定...
  • 如果 key 不存在,那么在进行 push 操作前会创建一个空列表。如果 key 对应值不是一个 list 话,那么会返回一个错误。 LRANGE 返回列表指定区间内元素(倒叙) RPUSH 这个和 lpush 功能类似。不同是 rpush ...
  • 数据表的操作

    2017-04-17 11:17:41
    根据制定的数据库表建立起来的顺序,提供了快速访问数据的途径且可以监督表的数据触发器:指用户定义的事务命令集合,当对一个表中的数据进行插入、更行或删除 时这组命令就会自动执行,用来确保数据的完整性和安全...
  • 文章目录MySQL数据表的基本操作MySQL创建数据表基本语法MySQL 修改数据表修改表名修改表字符集MySQL修改/删除字段修改字段名称修改字段数据类型删除字段MySQL删除数据表基本语法MySQL删除被其它表关联的主表MySQL...
  • 二层交换技术发展比较成熟,二层交换机属数据链路层设备,可以识别数据包中MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应端口记录在自己内部的一个地址中。下面是学习啦小编给大家整理一些有关...
  • 请在SQL Server数据库使用sql语句创建一个有趣的表,如下图: 推荐步骤: 1.设计结构。数据类型分别是:编号 int identity(1,1) ,姓名 varchar(10),身份证号 varchar(20) primary key,职务 varchar(50),出生...
  • 您不需要任何特殊的权限即可创建一个数据。 语法 sqlite3 命令的基本语法如下: $sqlite3 DatabaseName.db 通常情况下,数据库名称在 RDBMS 内应该是唯一的。 实例 如果您想创建一个新的数据库 <testDB.db...
  • 这是创建涉及父命令和子命令的复杂... 创建一个父子命令创建一个DataReport 假设我们有一个名为company数据库,其中有两个 客户(customerID,公司,联系方式,地址,城市) 订单(已订购,customerID,orde...
  • oracle会创建一个表空间,然后创建一个用户,再由用户去创建。可以理解为oracle只有一个很大数据库,由用户来管理。 实例:一个实例是由一系列后台进程和内存结构组成。 用户:用户在实例下创建,不同实例...
  • MYSQL对数据表的操作

    2018-04-14 16:56:48
    创建表的基本语法格式Create table [if not exists] 表名(字段名称 数据类型,字段名称 数据类型,字段名称 数据类型 -- 注意最后行不要加逗号) charset UTF8;解释一下:if not exists 前后的中括号在实际写...
  • 使用vue如何创建父子组件 这是创建涉及父命令和子... 创建一个父子命令创建一个DataReport 假设我们有一个名为company数据库,其中有两个 客户(customerID,公司,联系人标题,地址,城市) 订单(已订购...
  • 表是DB存储数据的基本单位,一个表包含若干个字段或记录。表的操作包括创建、修改和删除。1、创建创建表即在已存在的数据库中创立新表。在使用USE语句选择具体数据库后,可以使用它sql语句创建表其中,属性名指表...
  • sql脚本是包含一到多个sql命令的sql语句,将这些sql脚本放在一个文件中,然后通过相关的命令执行这个sql脚本文件。 SQL脚本可用于插入数据,读取数据,更新数据,和删除数据。它们也可以用于创建数据库对象,如,...
  • Mysql基本操作命令

    2018-11-13 18:35:15
    -- 数据准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test;... -- 创建一个数据表 -- students表 create table students( id int uns...
  • oracle习题之基本命令

    千次阅读 2015-11-08 13:41:36
    1. 使用SQL命令创建一个本地管理方式下自动分区管理的表空间USERTBS1,其对应的数据文件大小是20M。 2. 修改USERTBS1空间大小,将该空间的数据文件改为自动扩展方式,最大值为100MB。 3. ...
  • 您不需要任何特殊的权限即可创建一个数据。语法sqlite3 命令的基本语法如下:$ sqlite3 DatabaseName.db通常情况下,数据库名称在 RDBMS 内应该是唯一的。另外我们也可以使用 .open 来建立新的数据库文件:sqlite>...
  • SQL脚本是包含一到多个sql命令的sql语句,将这些sql脚本放在一个文件中,然后通过相关的命令执行这个sql脚本文件。SQL脚本可用于插入数据,读取数据,更新数据,和删除数据。它们也可以用于创建...创建一个名叫“...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 460
精华内容 184
关键字:

创建一个数据表的基本命令是