sqlite的增删改查

// 基本步骤

// 1. 打开数据库

// 2. 处理数据

// 3. 关闭数据库

//先设置全局变量
lazy var documentsPath: String = {
        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        return paths.first!
    }()

//指针
    var db: OpaquePointer? = nil
    var stmt: OpaquePointer? = nil
// 创建或打开数据库
    func createOrOpenDatabase() {
        print("\(NSHomeDirectory())")

        //创建数据库文件路径,并要改成UTF-8类型
        let path: NSString = "\(documentsPath)/test.sqlite3" as NSString
        let filename = path.utf8String

        //判断打开数据库是否成功(若没有数据库,会自动生成),不成功则打印输入"create or open failed..."并关闭数据库
        if sqlite3_open(filename, &db) != SQLITE_OK {
            print("create or open failed...")
            sqlite3_close(db)
        }
    }

// 创建学生表
    func createTable() {
        //拼接sql语句并转为UTF-8
        let string: NSString = "create table if not exists Student(id integer primary key autoincrement, sno text, name text, score integer)"
        let sql = string.utf8String
        //执行sql语句
        if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {
            print("create table failed...")
            sqlite3_close(db)
        }
    }

//slq的新增操作
    func insertStudent(sno: String, name: String, score: Int) {
        // 准备SQL语句
        let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)"
        let sql = string.utf8String

        // 解析SQL文本语句
        //sqlite3_prepare_v2解析
        //参数1:当前数据库指针
        //参数2:要解析的sql语句(默认以0结束)
        //参数3:因为sql语句默认以0结束,为了出去那个0,所以是-1
        //参数4:另外一个指针用于解析后存储,最后一个参数忘了,你直接写nil就可以了
        if sqlite3_prepare_v2(db, sql, -1, &stmt, nil) != SQLITE_OK {
            sqlite3_close(db)
            print("\(sno), insert failed...")
        }

        // 绑定参数
        let csno = (sno as NSString).utf8String
        let cname = (name as NSString).utf8String

        sqlite3_bind_text(stmt, 1, csno, -1, nil)
        sqlite3_bind_text(stmt, 2, cname, -1, nil)
        sqlite3_bind_int(stmt, 3, Int32(score))

        // 执行SQL语句
        if sqlite3_step(stmt) == SQLITE_ERROR {
            sqlite3_close(db)
            print("\(sno), insert failed...")
        } else {
            // 释放资源
            sqlite3_finalize(stmt)
        }
    }

// 修改学生数据
    func updateStudent() {
        // 准备SQL语句
        let string: NSString = "update Student set score = 100 where name like ‘a%‘"
        let sql = string.utf8String

        // 执行SQL语句
        //sqlite3_exec后面的三个参数可以不用关,就写nil就可以了
        if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {
            sqlite3_close(db)
            print("update failed...")
        }
    }

    // 删除学生数据
    func deleteStudents() {
        // 准备SQL语句
        let string: NSString = "delete from Student where score < 60"
        let sql = string.utf8String

        // 执行SQL语句
        if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {
            sqlite3_close(db)
            print("delete failed...")
        }
    }

总结:

增删改(如果没有参数,则第2,3步都不用写)

1:准备sql语句

如:let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)"

2:解析sql语句 如:sqlite3_prepare_v2(db, sql, -1, &stmt, nil)

3:绑定参数

如:let csno = (sno as NSString).utf8String

sqlite3_bind_text(stmt, 1, csno, -1, nil)

4执行语句 如:sqlite3_step(stmt)

5:释放资源 如:sqlite3_finalize(stmt)

查询

1:准备sql语句

2:解析sql语句

3: 执行SQL语句

获取每条记录的数据(某些字符类型还要转换才能显示你要的结果)

sqlite3_column_text(stmt, 0)

4:释放资源

时间: 2024-08-09 13:48:57

sqlite的增删改查的相关文章

【Android】Sqlite数据库增删改查

Android系统内置一个Sqlite数据库,如果app需要使用Sqlite数据库数据库存储数据,Android会为此app生成一个.db文件.这个数据库在data/data/<package_name>/databases里面,其中<package_name>为该安卓app的工程包名,这个目录必须root后才能看到.在Windows,单机的应用程序,存储数据,基本放到一个文件里面,正如游戏的存档,基本就是把当前的游戏状态存到一个用户很难找到的文件里面.每次存档读档就是一个从这个存

(转)SQLite数据库增删改查操作

原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n).char(n).d

IOS sqlite数据库增删改查

1.简单介绍 简单封装sqlite数据库操作类 BaseDB 用于完毕对sqlite的增删改查.使用前先导入libsqlite3.0.dylib库 2.BaseDB.h // // BaseDB.h // SqliteDemo // // Created by 赵超 on 14-8-26. // Copyright (c) 2014年 赵超. All rights reserved. // #import <Foundation/Foundation.h> #import "sqli

使用C#书写SQLite数据库增删改查语句(以及插入byte[]时遇到的问题总结)

在没有使用SQLite这种轻量级的数据库之前,只使用过Sqlserver2008进行数据的增删改查,公司使用的是大型的ORACLE数据库,还没有真正的会使用它.那时候觉得数据库很庞大,然而遇到SQLite以后,发现有这么个迷你的小数据库,就像女生的包包随身携带的小镜子一样,放在哪里都能使用. 废话少说,SQLite提供了如何连接.关闭等数据库操作,但真正的增.删.改.查等语句同Sqlserver.ORACLE是一样的. 首先,是创建SQLite数据库文件(写了一个方法): Public stat

IOS Sqlite用户界面增删改查案例

1.案例简单介绍 对SQLite操作进行了简单的封装,将对数据表操作转变成对对象的操作,并通过UI界面完毕对用户表的增.删.改.查,执行界面例如以下图所看到的 a 2.项目project文件夹 UserModel类为用户对象模型.与数据库表中字段一一相应 BaseDB类为对sqlite简单封装,抽象出对数据库操作的三个方法.详细内容看http://blog.csdn.net/whzhaochao/article/details/38865535博文 UserDB继承于BaseDB.主要是完毕Us

Sqlite创建增删改查

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SQLite; using System.Data.Common; using System.IO; namespace Sqlite

SQLite数据库增删改查操作

一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字). TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n). char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段

在Eclipse里面通过Sql语句控制SQLite数据库增删改查

package com.xh.tx.dao; import java.util.ArrayList;import java.util.List; import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase; import com.xh.tx.bean.Person;import com.xh.tx.utils.MySQLLiteHelper;

Android SQLite数据库增删改查操作

一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字). TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n). char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段