SQLite基础学习

SQLite是一款轻量级数据库,集成于android中,以下从分享一下自己学习的。

在查阅资料时有一些好的说明就直接用了:

主要的curd语句

以下SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘atm’,3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘atm‘ where id=1
删除语句:delete from 表名 where 条件子句。

如:delete from person where id=1

getWritableDatabase()和getReadableDatabase()的差别

getWritableDatabase()和getReadableDatabase()方法都能够获取一个用于操作数据库的SQLiteDatabase实例。

但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就仅仅能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,假设数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以仅仅读方式打开数据库。

注意:getWritableDatabase(),getReadableDatabase的差别是当数据库写满时,调用前者会报错,调用后者不会。所以假设不是更新数据库的话,最好调用后者来获得数据库连接。 

Cursor的简单说明

无论你怎样运行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你能够:
通过使用 getCount() 方法得到结果集中有多少记录。
通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历全部记录;
通过 getColumnNames() 得到字段名;
通过 getColumnIndex() 转换成字段号;
通过 getString(),getInt() 等方法得到给定字段当前记录的值;
通过 requery() 方法又一次运行查询得到游标;
通过 close() 方法释放游标资源;
提示:数据库中读取到的数据在cursor中。在写入到对象中时。要先推断cursor中是否有数据,否则当查询结果为空集时会报错。

推断cursor为空时。不能够用cursor==null,及时cursor中没有数据,cursor也不为空。

须要用cursor.getCount()函数来推断是否为空,结果为0时为空。

具体的代码:

首先:怎样创建数据库

创建数据库和表。

数据库的默认保存路径为:“data/data/com.example.SqliteTest/databases/”

com.example.SqliteTest就是自己的project

public class DBOpenHelp extends SQLiteOpenHelper {
    public DBOpenHelp(Context context) {

        super(context, "User_atm.db", null, 1);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
StringBuilder strSql = new StringBuilder();
strSql.append("CREATE TABLE IF NOT EXISTS user_info (");
strSql.append("user_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,");
strSql.append("user_age   INT NOT NULL,");
strSql.append("user_name  VARCHAR(50)  NOT NULL)");
        db.execSQL(strSql.toString());
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //数据库改动是在这里操作。比方添加表字段
    }

以下是增删改查以及事务的代码:

public class ServiceTest {

    //增删改查

    //得到数据库

    DBOpenHelp dbOpenHelp;

    public ServiceTest(Context context) {
        super();
        this.dbOpenHelp = new DBOpenHelp(context);
    }

    //启动事务
    public void TransactionTest(){
        SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
        db.beginTransaction();
        try{
            db.execSQL("update User_info set user_age=user_age+1 where user_id=10");
            db.execSQL("update User_info set user_age=user_age-1 where user_id=11");
            db.setTransactionSuccessful();
        }finally{
            db.endTransaction();}
    }

    //增
    public void save(UserInfo userinfo){
        SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
        db.execSQL("insert into user_info(user_id, user_age, user_name) values(?,?,?

)",
                new Object[]{userinfo.getUser_id(),userinfo.getUser_age(), userinfo.getUser_name()});

    }

    //删

    public void delete(Integer user_id){
        SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
        db.execSQL("delete from user_info where user_id=?

", new Object[]{user_id});

    }

    //改动
    public void update(UserInfo userinfo){
        SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
        db.execSQL("update user_info set user_age=?,user_name=? where user_id=?",
                new Object[]{userinfo.getUser_age(), userinfo.getUser_name(),userinfo.getUser_id()});
    }

    //查询
    public UserInfo find(Integer id){
        SQLiteDatabase db = dbOpenHelp.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from user_info where user_id=?

", new String[]{id.toString()});
    if(cursor.moveToFirst()){
            int user_id = cursor.getInt(cursor.getColumnIndex("user_id"));
            int user_age = cursor.getInt(cursor.getColumnIndex("user_age"));
            String user_name = cursor.getString(cursor.getColumnIndex("user_name"));
            return new UserInfo(user_id, user_name, user_age);
        }
        cursor.close();
        return null;
    }
}

可视化的数据库管理工具–SQLite Expert Professional

自己能够在网上下载。

下载后打开软件,进入主界面:

上图中红色框部分为导入和删除数据库。

上图中为新建表。

还有非常多功能,能够在改动完后,从新导入到设备中(最開始到处的路径)。

通过cmd查看数据库

打开制定路径下的数据库

简单的数据库操作。查询一张表。

SQLite触发器:android:SQLite–触发器具体解释

原文地址:https://www.cnblogs.com/zhchoutai/p/8371020.html

时间: 2024-10-10 19:20:36

SQLite基础学习的相关文章

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

零基础学习openstack【完整中级篇】及openstack资源汇总

1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事,内容整合来自: 零基础学习openstack(上)[中级篇] 零基础学习openstack(下)[中级篇] 是在 零基础学习openstack[初级篇]基础上的一个继续: 初级篇,我们主要是有这么一个概念,openstack的组成openstack由哪些部分来组成: Identity(代号为“Ke

Sqlite全面学习(二)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 本篇继续接上一篇,阅读上一篇<Sqlite全面学习(一)> SQLite创建数据库 创建数据库语法: sqlite3 DatabaseName.db 如下展示一个实例: SQLite附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个.SQLite的ATTAC

蓝鸥零基础学习HTML5—html+css基础

蓝鸥零基础学习HTML5-html+css基础 一.课程目标 1.了解前端开发职位:2.掌握常用标签以及语义及用法:3.掌握常用css的特性,掌握基础布局技巧:4.掌握整站规划概念. 二.适用人群 零基础积极学习html5者 三.课程简介 本课程主要讲解了 html+css的基础知识,包括html模板.标签.css基础样式.布局.表格表单.整站等等,是进行前端开发的基础.Html+css是前端开发的基础,大部分前端开发工程都需要从html+css布局开始,html+css的基础非常重要,是前端开

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Linux新手入门书籍推荐 鸟哥的linux私房菜-基础学习篇

这本书写的不错.赞~\(≧▽≦)/~ 2017-02-24 下午,我开始在Linux下写第一个.c程序,在终端打印hello world.gcc 源代码文件之后,输出可执行文件,但是 当我输入文件名执行它的时候,却提示我 无法找到命令.于是我找百度,查资料,花了半个小时,终于找到解决方法了, 输入"./filename"即可.... 2017-02-25 我看<基础学习篇>这本书,在P158页下面的例题讲解中找到了昨天下午异常的解析.我就很是感慨,心想:要是早看这本书,半个

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];