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() 方法释放游标资源;

具体的代码:

首先:如何创建数据库

创建数据库和表。

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

com.example.SqliteTest就是自己的工程

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查看数据库

打开制定路径下的数据库

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

还在学习中,比如说数据库监听,数据库触发器等等。将进一步更新。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 00:14:58

SQLite学习(继续更新)的相关文章

sqlite学习笔记10:C语言中使用sqlite之查询和更新数据

前面说到的 sqlite_exec() 中的第三个参数, SQLite 将为 sql 参数内执行的每个 SELECT 语句中处理的每个记录调用这个回调函数. 本节添加了两个函数,selectFromTable和updateTable. 实例程序如下: #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db&quo

sqlite学习笔记6:更新表数据

一 条件判断 在SQL中条件判断使用where,相当于其他变成语言中的if,基本用法如: SELECT column1, column2, columnN FROM table_name WHERE [condition] 另外,SQL支持数学运算,逻辑运算,位于运算等等,均可放在WHERE子句中. 二 更新表 基本语法如下: UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE

SQLite 学习笔记

SQLite 学习笔记. 一.SQLite 安装    访问http://www.sqlite.org/download.html下载对应的文件.    1.在 Windows 上安装 SQLite.需要下载 sqlite-shell-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件.        创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def.sqlite3.dll 和 sqlite3.exe 文件.   

SQLite学习笔记(七)&amp;&amp;事务处理

说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然有自己的并发控制和故障恢复机制.Sqlite学习笔记(五)&&SQLite封锁机制 已经讲了一些锁机制的原理,本文将会详细介绍一个事务从开始,到执行,最后到提交所经历的过程,其中会穿插讲一些sqlite中锁管理,缓存管理和日志管理的机制,同时会介绍在异常情况下(软硬件故障,比如程序异常cras

sqlite学习笔记8:C语言中使用sqlite之创建表

前面已经说了如何打开和关闭数据库,这次要说得是如何执行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 参数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个参数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回

SQLite学习手册(目录)

Posted on 2012-03-09 07:36 Stephen_Liu 阅读(11956) 评论(22) 编辑 收藏 在实际的应用中,SQLite作为目前最为流行的开源嵌入式关系型数据库,在系统的架构设计中正在扮演着越来越为重要的角色.和很多其它嵌入式NoSQL数据库不同的是,SQLite支持很多关系型数据库的基本特征,这在数据移植.程序演示等应用中有着不可替代的优势.从官方文档中我们可以获悉到,SQLite支持的数据量和运行效率都是非常骄人的,因此在海量数据的解决方案中,SQLite可以

sqlite学习笔记9:C语言中使用sqlite之插入数据

前面创建了一张表,现在给他插入一些数据,插入数据跟创建表差不多,仅仅是SQL语言不一样而已,完整代码如下: #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; int ret =

sqlite学习笔记11:C语言中使用sqlite之删除记录

最后一节,这里记录下如何删除数据. 前面所有的代码都继承在这里了,在Ubuntu14.04和Mac10.9上亲测通过. #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; con

小白学习日记更新:tp5.0

小白学习日记更新 1.首先看开发手册很重要ThinkPHP5.0完全开发手册 2.use think\Db;即可Db::table('')->等一系列操作 3.Db::table('')->find()是找一条记录 Db::table('')->select()是找多条 Db::table('')->limit(3,2)是找第4条,取两条数据 Db::table('')->getLastSql();是输出最后一次语句 4.tp5的严格性,必须判断是否有或者存在

sqlite学习笔记7:C/C++中使用sqlite之打开数据库

数据库的基本内容前面都已经说得差不多了,接下看看怎样在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打开数据库,如果数据库不存在则新建一个数据库,并打开 sqlite3_close(sqlite3*) 关闭数据库,如果关闭之前还存在没有执行完的语句,将会返回SQLITE_BUSY 二 实例 1 目录结构 Projects{ main.c// 代码所在文件 sqlite{// 官网下载下来的sqlite压