sqlite数据库

android SQLite使用介绍

拟墨画扇 提交于 2020-04-06 08:19:20
嵌入式关系型SQLite数据库与普通数据库的最大区别是: 嵌入式关系型SQLite数据库除了主键外,没有数据类型之分。即整型字段可以用来存放字符数据,反之字符串字段也可以用来存放整型值 SQLite使用方法步骤: 第一步:编写一个类并继承SQLiteOpenHelper; 该类我认为有两个作用:第一:用来取得操作sql语句的对象 第二:用来管理数据库的版本,可以进行相应的更新 简单的实例: public class DBOpenHelperService extends SQLiteOpenHelper { private static final String DATABASENAME = "smuoj.db"; //数据库名称 private static final int DATABASEVERSION = 1;//数据库版本 public DBOpenHelperService(Context context) { super(context, DATABASENAME, null, DATABASEVERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE _person (personid integer primary key

Qt 的sqlite数据库的学习

坚强是说给别人听的谎言 提交于 2020-04-06 03:40:30
我们先了解一下基本的类:QSqlDatabase 提供数据库的连接操作,QSqlQuery是执行Sql语句的类,如: QSqlQuery query ( db ); query . exec ( "insert into person values(101, 'Danny', 'Young')" ); 下面是如何创建一个数据库以及一个数据表。 void myDatabase::createDB() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("music.db"); //创建数据库 if(!db.open()) { qDebug()<< "database is error"; //return; } else { qDebug()<<"database is ok"; //return; } QSqlQuery query(db); bool bsuccess = query.exec("create table person (id int primary key, " "firstname varchar(20), lastname varchar(20))"); //创建一个表 query.exec("insert into person values(101,

使用SQLite的感想

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-30 06:49:10
  最近都在使用SQLite数据库,老实说这才是我使用的第三款数据库而已。使用它原因就应为它够轻量,而且性能挺不错。但使用久了也发现了一些问题。偶尔也会有怨言,但也不会骂SQLite是个破东西之类的,原因又几个:对SQLite的了解不过透彻,使用方式上总有些不妥;自己的资历尚浅,解决问题的能力有限;自己也没本事写出比SQLite更好的数据库。   在网上看了一下SQLite的适用场景。100000次/天访问量的网站,嵌入式设备和应用软件,应用程序文件格式等。但是读数据可时也会抛锁表的异常,SQLite的锁是粗粒度,这个对异常的处理不知如何是好;还有的就是数据库的损坏。Database disk image is malformed。网上说数据库造成数据库损坏的原因有三个 sqlite数据库在写入时断电等,导致数据库里的结果被破坏。 sqlite数据库所存的磁盘空间不够。 磁盘有坏磁道等   之前数据库的损坏估计是第一种原因。而当时又没有对数据进行什么备份。只能人工用.dump命令从损坏的数据库中把数据导出来。这个顺带也讲一下吧 在SQLite的命令模式中打开数据库,依次输入一下命令 sqlite> .mode insert sqlite> .output test.sql sqlite> .dump sqlite> .exit 当然不一定要”.exit”命令,按“Ctrl+C

Unity本地数据存储---Sqlite和JSON

喜你入骨 提交于 2020-03-27 22:19:15
2014-05-04更新 SqliteDatabase.cs这个文件的初始方法有问题,具体是如果指定URL已经存在了DB文件,就不会重新覆盖DB文件。 这导致我们修改之后的DB文件无法产生效果。 本人的解决办法是在游戏启动的界面,通过对比本地的Resources目录下的文件A,和玩家核心数据B里面的数据库版本号, 如果A>B,则判定本地的DB文件版本较老,需要更新。 具体代码请到目录SQLite篇下下载 2014-04-30更新 剔除了使用网络上烂大街的SQLite使用方法(原因android下无法读取数据),使用libSQLite3.so,通过DLLImport,在C#代码里直接调用C接口 这种原生调用SQLite的方式,我在pc、android上亲测无误,ios没测过,但是stackoverflow上有兄弟试过,没问题。园子的朋友如果可以测IOS的,欢迎提供结果 基本思路,游戏基础配置数据,比如怪物的属性、装备模板属性、关卡怪物等,使用SQLite(Unity插件SQLiteUnityKit- GitHub地址 ,推荐客户端 SQLite Expert Personal 3 ),管理方便 玩家核心数据(属性、装备、技能)使用JSON格式,加密保存在Application.persistentDataPath路径里,避免每次升级被覆盖 插件本地下载地址 Sqlite框架

Android SQLite数据库使用 学习与代码实践

徘徊边缘 提交于 2020-03-25 07:26:17
Android SQLite数据库使用 学习与代码实践 SQLiteOpenHelper 类   用 SQLiteOpenHelper 类中的 getWritableDatabase() 和 getReadableDatabase() 方法可以获得数据库的引用。   为了实现对数据库版本进行管理, SQLiteOpenHelper 类提供了两个重要的方法,分别是 onCreate() 和 onUpgrade() ,前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。   当调用SQLiteOpenHelper的 getWritableDatabase() 或者 getReadableDatabase() 方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法。    onCreate() 方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。    onUpgrade() 方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的。   假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构

sqlite索引的原理

喜你入骨 提交于 2020-03-18 13:59:12
引言 这篇文章 ,里面讲到对于一个41G大小、包含百万条记录的数据库进行查询操作,如果利用了索引,可以把操作耗时从37s降到0.2s。 那么什么是索引呢?利用索引可以加快数据库查询操作的原理是什么呢? 索引的基本原理 数据库提供了一种持久化的数据存储方式,从数据库中查询数据库是一个基本的操作,查询操作的效率是很重要的。 对于查询操作来说,如果被查询的数据已某种方式组织起来,那么查询操作的效率会极大提高。 在数据库中,一条记录会有很多列。如果把这些记录按照列Col1以某种数据结构组织起来,那么列Col2一定是乱序的。 因此,数据库在原始数据之外,维护了满足特定查找算法的数据结构,指向原始数据,称之为 索引 。 举例来说,在下面的图中,数据库有两列Col1、Col2。在存储时,按照列Col1组织各行,比如Col1已二叉树方式组织。如果查找col1中的某一个值,利用二叉树进行二分查找,不需要遍历整个数据库。 这样一来列Col2就是乱序的。为了解决这个问题,为Col2建立了索引,即把Col2也按照某种数据结构(这里是二叉树)组织起来。这样子查找列Col2时只需要进行二分查找即可。  索引的实现 由于数据库是存储在磁盘上的,因此实现索引用的数据结构会存储在磁盘上。磁盘的IO是需要注意的问题。 二叉树 二叉树是一种经典的数据结构,但是并不适合进行数据库索引。

iOS数据存储

一笑奈何 提交于 2020-03-18 05:06:53
【reference】http://www.infoq.com/cn/articles/data-storage-in-ios 谈到数据储存,首先要明确区分两个概念,数据结构和储存方式。所谓数据结构就是数据存在的形式。除了基本的NSDictionary、NSArray和NSSet这些对象,还有更复杂的如:关系模型、对象图和属性列表多种结构。而存储方式则简单的分为两种:内存与闪存。内存存储是临时的,运行时有效的,但效率高,而闪存则是一种持久化存储,但产生I/O消耗,效率相对低。把内存数据转移到闪存中进行持久化的操作称成为归档。 二者结合起来才是完整的数据存储方案,我们最常谈起的那些:SQLite、CoreData、NSUserDefaults等都是数据存储方案。当然在这些框架提供的方案之外,我们自己也可以按照个性化需求订制方案。这些存储方案侧重不同,支持的形式和方式也各不相同,在不同的使用场景下表现也是各有优劣。但万变不离其宗,无论什么方案都可以用下图来解释。 图1,存储方案示意图 以下将对四种存储方式进行详细的介绍: NSUserDefaults,用于存储配置信息 SQLite,用于存储查询需求较多的数据 CoreData,用于规划应用中的对象 使用基本对象类型定制的个性化缓存方案 用NSUserDefaults存储配置信息

如何使mysql生成.db文件

ぃ、小莉子 提交于 2020-03-16 18:32:15
一、下载 sqlite 创建 sqlite 数据库来实现 【1】下载sqllite数据库   本机(windows系统)安装sqlite数据库。   下载地址为( http://www.sqlite.org/download.html ),在Precompiled Binaries for Windows选项中,选择下载( sqlite-tools-win32-x86-3220000.zip )。   解压之后会有三个文件(sqldiff.exe, sqlite3.exe, sqlite2_analyzer.exe),把这三个文件放到一个文件夹中,比如sqlite      【2】解压sqlite   解压后把这个文件夹的全路径(E:\sqlite)添加到系统环境变量path中。重启cmd,输入sqlite3,会有提示SQLite version等等的提示,表示安装成功; 【3】创建准备装载数据的sqlite数据库(xxx.db)   创建一个文件夹mySqlite,在此文件夹中运行cmd,输入命令'sqlite3 test.db'回车,然后输入'.database,就会自动创建一个数据库(test.db); 【4】使用navicat连接sqlite数据库   点击‘连接’,选中sqlite,连接名填写test.db,选择‘现有数据库文件’,选中数据库(test.db)的路径

iOS开发数据库篇—SQLite常用的函数

我的未来我决定 提交于 2020-03-16 08:10:31
一、简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*, // 一个打开的数据库实例 const char *sql, // 需要执行的SQL语句 int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调 void *, // 回调函数的第1个参数 char **errmsg // 错误信息 ); 3.检查SQL语句的合法性(查询前的准备) int sqlite3_prepare_v2( sqlite3 *db, // 数据库实例 const char *zSql, // 需要检查的SQL语句 int nByte, // SQL语句的最大字节长度 sqlite3_stmt **ppStmt, // sqlite3_stmt实例,用来获得数据库数据 const char **pzTail ); 4.查询一行数据 int sqlite3_step(sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW 5.利用stmt获得某一字段的值(字段的下标从0开始) double sqlite3

iOS开发数据库篇—SQLite常用的函数

核能气质少年 提交于 2020-03-12 11:32:09
一、简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*, // 一个打开的数据库实例 const char *sql, // 需要执行的SQL语句 int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调 void *, // 回调函数的第1个参数 char **errmsg // 错误信息 ); 3.检查SQL语句的合法性(查询前的准备) int sqlite3_prepare_v2( sqlite3 *db, // 数据库实例 const char *zSql, // 需要检查的SQL语句 int nByte, // SQL语句的最大字节长度 sqlite3_stmt **ppStmt, // sqlite3_stmt实例,用来获得数据库数据 const char **pzTail ); 4.查询一行数据 int sqlite3_step(sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW 5.利用stmt获得某一字段的值(字段的下标从0开始) double sqlite3