- 浏览: 551389 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
toyota2006:
thank you!
适配器(Adapter)模式 -
910014107:
收藏一下
JIRA安装和破解 -
wangchaobashen:
注册完是一年期的License,请问这个期限该如何修改呢?
JIRA安装和破解 -
ihqn19:
总而言之,就是不知道你想表达什么就对了。
JS 面向对象的简单应用实例 -
jxls162408:
第四步更新tomcat libraris ,找不到那个包呀。怎 ...
JIRA安装和破解
简单sqlite使用
sqlite是嵌入式的和轻量级的sql数据库。sqlite是由c实现的。广泛用于包括浏览器(支持html5的大部分浏览器,ie除外)、ios、android以及一些便携需求的小型web应用系统。
使用sqlite前的准备
使用sqlite是很多做ios开发中第一次面对c的情况,包括我。因为sqlite是c写的,objc可以直接使用c代码。在sqlite前,一般都会使用cocoa touch框架,都是基于objc的。
首先,需要在对应文件的头文件中加入:
并在Frameworks中加入所需的库,否则会报错:
加入库的方法是:
选择sqlite库:
选择完的效果:
然后,应该有个成员变量,比如我的代码:
打开数据库
sqlite数据库是文件数据库,是保存在文件系统中的。因此需要知道文件保存到哪里,可参见iOS中对文件的操作。比如本文保存到Documents目录下。代码:
通过ssh查看Documents目录,发现mydb文件已经创建。sqlite的策略是如果有该文件就打开,如果没有就创建文件,也就是创建数据库。
这里要注意,使用的是c语法,sqlite3_open传入的是database的地址。
关闭数据库
数据库使用完毕后,要关闭,比如退出应用的时候:
建表语句
数据库打开以后,如果没有表,建表:
这里要特别注意errorMsg传的是地址,因为该函数要通过地址引用来写报错字符信息。
向表中插入记录
和建表语句类似:
错误信息的处理
如果在多个地方使用errorMsg,那么每次使用完毕要清空一下字串,比如这样:
查询结果集
结果集的查询,需要用到statement:
不过这里有个问题,看看打印的日志:
乱码。因为直接用的char类型来做的。
解决办法是,用nsstring替代char:
char生成nsstring的时候做一次显式的编码。问题解决:
这说明:
写入数据库,用char的方式没有问题,写入数据库的编码是对的;
从库中取出,可能默认使用ascii解码,造成显示乱码。
使用sqlite c api,要经常参考官方函数文档:http://www.sqlite.org/c3ref/funclist.html
转自:http://marshal.easymorse.com/archives/3349
sqlite是嵌入式的和轻量级的sql数据库。sqlite是由c实现的。广泛用于包括浏览器(支持html5的大部分浏览器,ie除外)、ios、android以及一些便携需求的小型web应用系统。
使用sqlite前的准备
使用sqlite是很多做ios开发中第一次面对c的情况,包括我。因为sqlite是c写的,objc可以直接使用c代码。在sqlite前,一般都会使用cocoa touch框架,都是基于objc的。
首先,需要在对应文件的头文件中加入:
引用
#import "/usr/include/sqlite3.h"
并在Frameworks中加入所需的库,否则会报错:
引用
Undefined symbols:
"_sqlite3_open", referenced from:
"_sqlite3_open", referenced from:
加入库的方法是:
选择sqlite库:
选择完的效果:
然后,应该有个成员变量,比如我的代码:
引用
@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> {
UIPopoverController *popoverController;
UIToolbar *toolbar;
id detailItem;
UILabel *detailDescriptionLabel;
sqlite3 *database;
UIPopoverController *popoverController;
UIToolbar *toolbar;
id detailItem;
UILabel *detailDescriptionLabel;
sqlite3 *database;
打开数据库
sqlite数据库是文件数据库,是保存在文件系统中的。因此需要知道文件保存到哪里,可参见iOS中对文件的操作。比如本文保存到Documents目录下。代码:
引用
NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
, NSUserDomainMask
, YES);
NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:@"mydb"];
if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK) {
NSLog(@"open sqlite db ok.");
}
, NSUserDomainMask
, YES);
NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:@"mydb"];
if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK) {
NSLog(@"open sqlite db ok.");
}
通过ssh查看Documents目录,发现mydb文件已经创建。sqlite的策略是如果有该文件就打开,如果没有就创建文件,也就是创建数据库。
这里要注意,使用的是c语法,sqlite3_open传入的是database的地址。
关闭数据库
数据库使用完毕后,要关闭,比如退出应用的时候:
引用
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
sqlite3_close(database);
self.popoverController = nil;
}
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
sqlite3_close(database);
self.popoverController = nil;
}
建表语句
数据库打开以后,如果没有表,建表:
引用
char *errorMsg;
const char *createSql="create table if not exists persons (id integer primary key autoincrement,name text)";
if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"create ok.");
}
const char *createSql="create table if not exists persons (id integer primary key autoincrement,name text)";
if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"create ok.");
}
这里要特别注意errorMsg传的是地址,因为该函数要通过地址引用来写报错字符信息。
向表中插入记录
和建表语句类似:
引用
const char *insertSql="insert into persons (name) values(‘张三’)";
if (sqlite3_exec(database, insertSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"insert ok.");
}
if (sqlite3_exec(database, insertSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"insert ok.");
}
错误信息的处理
如果在多个地方使用errorMsg,那么每次使用完毕要清空一下字串,比如这样:
引用
if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"create ok.");
}else {
NSLog(@"error: %s",errorMsg);
sqlite3_free(errorMsg);
}
NSLog(@"create ok.");
}else {
NSLog(@"error: %s",errorMsg);
sqlite3_free(errorMsg);
}
查询结果集
结果集的查询,需要用到statement:
引用
const char *selectSql="select id,name from persons";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, selectSql, -1, &statement, nil)==SQLITE_OK) {
NSLog(@"select ok.");
}
while (sqlite3_step(statement)==SQLITE_ROW) {
int _id=sqlite3_column_int(statement, 0);
char *name=(char *)sqlite3_column_text(statement, 1);
NSLog(@"row>>id %i, name %s",_id,name);
}
sqlite3_finalize(statement);
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, selectSql, -1, &statement, nil)==SQLITE_OK) {
NSLog(@"select ok.");
}
while (sqlite3_step(statement)==SQLITE_ROW) {
int _id=sqlite3_column_int(statement, 0);
char *name=(char *)sqlite3_column_text(statement, 1);
NSLog(@"row>>id %i, name %s",_id,name);
}
sqlite3_finalize(statement);
不过这里有个问题,看看打印的日志:
乱码。因为直接用的char类型来做的。
解决办法是,用nsstring替代char:
引用
while (sqlite3_step(statement)==SQLITE_ROW) {
int _id=sqlite3_column_int(statement, 0);
NSString *name=[[NSString alloc] initWithCString:(char *)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
NSLog(@"row>>id %i, name %@",_id,name);
}
int _id=sqlite3_column_int(statement, 0);
NSString *name=[[NSString alloc] initWithCString:(char *)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
NSLog(@"row>>id %i, name %@",_id,name);
}
char生成nsstring的时候做一次显式的编码。问题解决:
这说明:
写入数据库,用char的方式没有问题,写入数据库的编码是对的;
从库中取出,可能默认使用ascii解码,造成显示乱码。
使用sqlite c api,要经常参考官方函数文档:http://www.sqlite.org/c3ref/funclist.html
转自:http://marshal.easymorse.com/archives/3349
发表评论
-
画板使用
2011-04-13 15:46 3366Painting.h #import <UIKit/UI ... -
UIImage应用与内存管理
2011-03-24 10:44 4066用UIImage加载图像的方法很多,最常用的是下面两种: ... -
NSMutableArray与NSArray的区别
2011-03-21 16:05 24801: NSMutableArray能添加、插入、删除对象,而 ... -
iPhone/iPad 开发: 可编辑的TableView
2011-01-21 15:33 6272可编辑的TableView 在编写简单的导航控制器基础上,让T ... -
iPhone/iPad 开发:录音及声音播放
2011-01-21 15:30 4710-(IBAction) recordOrStop: (id) ... -
iphone/ipad开发:编写声控红旗飘飘
2011-01-21 15:24 1497见附件Flag.zip -
TableView 的使用 实例二
2010-12-14 16:06 20735在实例一我们做了一个最基本的导航列表(其实还没有导航功能,只不 ... -
TableView 的使用 实例一
2010-12-14 13:45 10442TableView 是iphone/ipad中常常会用到的导航 ... -
iPhone/iPad 开发: 解析本地/网络上的xml文件(实例建附件)
2010-11-16 11:46 49461、解析本地xml文件 //找到本地test.xml文件 ... -
iPhone/iPad 开发: Objective-C 接分字符串成数组(类似java 的 split)
2010-11-11 14:46 6787在很多语言如 java , ruby , python中都有将 ... -
iPhone/iPad Timer 使用
2010-10-22 16:54 1874//以下代码为每隔1.5秒执行一次autoPlay函数 [ ... -
视图翻转问题
2010-10-22 16:47 1612//实现shouldAutorotateToInterface ... -
解决子view被ViewController遮挡的问题
2010-10-22 16:42 2146ViewController在加载子View的时候会出现子Vi ... -
iPhone/iPad 动画效果切换画面
2010-10-22 11:48 3387iPhone/iPad 动画效果切换画面 -(void)s ... -
内存管理总结
2010-10-22 11:40 1238iPhone系统中的Objective-C的内存管理机制是 ... -
iPhone/iPad 读写 Plist文件
2010-10-22 11:36 4863iPhone/iPad 读写 Plist文件 1.写Pli ... -
iPhone开发经典语录集锦
2010-10-22 11:21 1162引用1:如果无法保证子类行为的一致性,那么就用委托 If t ... -
深入理解iPhone委托模式兼谈iPhone生命周期
2010-10-22 11:10 2612深入理解iPhone委托模式兼谈iPhone生命周期 本文转载 ... -
得到application对象
2010-10-22 10:56 997application=[UIApplication shar ... -
iPhone/iPad程序 点击 休眠键委托事件 和 唤醒后的响应事件
2010-10-13 17:03 2021//休眠后委托事件 - (void)application ...
相关推荐
标题 "@journeyapps/sqlcipher sqlite3加密" 涉及的是SQLCipher与SQLite3数据库的加密技术。SQLCipher是一款开源的、基于SQLite3的数据库加密解决方案,它为SQLite数据库提供了透明的数据加密功能,确保在存储和处理...
9. 命令行选项:SQLite3.exe有多种命令行选项,例如,使用`.help`命令可以查看所有可用的命令,`.dump`用于导出数据库的SQL脚本,`.import`则可将数据从文本文件导入到表中。 10. 开发者友好:SQLite3.exe对于...
"Iphone中的SQLite 可运行的实例"是一个很好的起点,帮助开发者理解如何在iPhone应用程序中集成和操作SQLite数据库。这个实例提供了完整的代码和步骤,使得初学者能够快速上手。 SQLite在iOS中的应用主要涉及以下几...
主要是个人写的一个sqlite3 c接口的数据库操作demo,基本满足平时的使用要求。
在这个"SQLite3 使用实例"中,我们将探讨三个基本的使用场景,帮助你理解如何在实际开发中应用 SQLite3。 1. **创建数据库和表** 在第一个实例中,你可能会看到如何创建一个新的 SQLite3 数据库以及定义表的结构。...
总结来说,这个“sqlite3应用实例”涵盖了SQLite3在Linux下的基本使用,包括安装、数据库的创建与操作、表的创建与管理,以及数据的增删查改。通过学习和实践这些内容,开发者可以有效地利用SQLite3进行小型项目的...
本实例将聚焦于如何在iPhone应用中使用SQLite3进行数据持久化操作。 SQLite3是一个嵌入式的SQL数据库引擎,它不需要独立的服务进程,可以直接集成到应用程序中。与Core Data相比,SQLite3提供了更直接的SQL语句操作...
标题与描述中提到的知识点主要围绕在iOS应用开发中如何处理数据、用户默认设置(User Defaults)、SQLite数据库以及网络服务(Web Services)。以下是对这些关键概念的深入解析: ### 处理iOS应用中的数据 在iOS应用...
python3.8在import sqlite3时报错误:ImportError: No module named '_sqlite3'。 将该文件解压后,放到python3.8目录下的lib-dynload目录下。 比如我的服务器路径:/usr/local/bin/python3/lib/python3.8/lib-...
标题提到的"sqlite3文件"主要包括三个关键组成部分:`sqlite3.dll`、`sqlite3.h`和`sqlite3.lib`,它们在开发和运行使用SQLite3的应用程序时起着至关重要的作用。 1. `sqlite3.dll`: 这是一个动态链接库文件,通常...
c++的sqlite3接口.如果是c语言的话把函数参数传引用的地方的引用去掉即可,返回时返回指针就OK了.在linux环境下调试OK.里面有个示例Makefile及相应的源码.Makefile要根据个人机器上的sqlite3的头文件及动态库的存放...
在iOS开发中,SQLite是一个广泛使用的轻量级关系型数据库,尤其在iPhone应用程序中,它提供了数据持久化存储的能力。SQLite3.0是SQLite的其中一个版本,它支持多种数据库操作,如创建表、插入数据、查询数据等。下面...
1. **API接口**:SQLite3的C API提供了许多函数,如`sqlite3_open()`用于打开数据库,`sqlite3_exec()`用于执行SQL命令,`sqlite3_prepare_v2()`和`sqlite3_step()`用于准备和执行预编译的SQL语句,以及`sqlite3_...
1. **ADB Shell不包含sqlite3**:默认的ADB shell可能没有提供sqlite3命令,需要通过ADB推送sqlite3二进制文件到设备上,然后才能使用。 2. **Android版本限制**:早期版本的Android可能对SQLite的API或功能有限制...
# 在/home/sqlite/目录下执行 tar zxf sqlite-amalgamation-3.6.1.tar.gz ``` 3. **创建目录结构** ```bash # 创建编译目录 mkdir sqlite-3.6.1 # 创建安装目录 mkdir /home/sqlite-arm ``` 4. **配置...
在使用Linux或Unix类操作系统时,可能会遇到"sqlite3 not found"这样的错误提示,这通常意味着系统中没有安装SQLite3这个数据库引擎或者其路径没有被正确地添加到系统的PATH环境变量中。SQLite3是一个轻量级、开源的...
在这个“Sqlite3使用实例”中,我们将探讨如何利用SQLite3进行基本的数据库操作,包括创建数据库、创建表、插入数据、查询数据、更新数据以及删除数据。这些实例特别适合初学者理解和掌握SQLite3的使用。 首先,...
SQLiteSpy_1.8.5 数据库查看UI程序 :查看SQLIte3 数据库的UI小程序 _SQLite权威指南.pdf SQLite学习手册_中文全本.pdf CppSQLite3U国外牛人的sqlite封装....sqlite3的x86_vc6_DLL工程.rar使用vc6.0编译dll的完整工程
### Linux下使用sqlite3数据库详解 #### 一、引言 SQLite是一款轻量级的数据库管理系统,被广泛应用于各种场景,特别是在嵌入式系统及移动设备中。它以源码形式发布,支持跨平台特性,并且可以作为一个独立的库...