Error[8]: Undefined offset: 951, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述                   写了一个比较简单的SQLite3的简单demo只实现了增加 更新 删除 获取全部数据  查找   数据库部分有详细注释    界面也比较简陋主要是实现一下数据库部分 资源地址:http://download.csdn.net/detail/decemberd/3899232          部分代码如下: //获取document目录并返回数据库目录 - (

写了一个比较简单的sqlite3的简单demo只实现了增加 更新 删除 获取全部数据 查找 数据库部分有详细注释 界面也比较简陋主要是实现一下数据库部分


资源地址:http://download.csdn.net/detail/decemberd/3899232


部分代码如下:

//获取document目录并返回数据库目录

- (Nsstring*)datafilePath{

NSArray*paths =NSSearchPathForDirectorIEsInDomains(NSdocumentDirectory,NSUserDomainMask,YES);

Nsstring*documentsDirectory = [pathsobjectAtIndex:0];

return[documentsDirectorystringByAppendingPathComponent:kfilename];

}


//创建,打开数据库

- (BOol)openDB {

//获取数据库路径

Nsstring*path = [selfdatafilePath];

//文件管理器

NSfileManager*fileManager = [NSfileManagerdefaultManager];

//判断数据库是否存在

BOolfind = [fileManagerfileExistsAtPath:path];

//如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)

if(find) {

NSLog(@"Database file have already existed.");

//打开数据库,这里的[path UTF8String]是将Nsstring转换为C字符串,因为sqlite3是采用可移植的C(而不是

//Objective-C)编写的,它不知道什么是Nsstring.

if(sqlite3_open([pathUTF8String],&_database) !=sqlITE_OK) {

//如果打开数据库失败则关闭数据库

sqlite3_close(self._database);

NSLog(@"Error: open database file.");

returnNO;

}

//创建一个新表

[selfcreateTestList:self._database];

returnYES;

}

//如果发现数据库不存在则利用sqlite3_open创建数据库(上面已经提到过),与上面相同,路径要转换为C字符串

if(sqlite3_open([pathUTF8String],&_database) ==sqlITE_OK) {

//创建一个新表

[selfcreateTestList:self._database];

returnYES;

}else{

//如果创建并打开数据库失败则关闭数据库

sqlite3_close(self._database);

NSLog(@"Error: open database file.");

returnNO;

}

returnNO;

}


//创建表

- (BOol) createTestList:(sqlite3*)db {

//这句是大家熟悉的sql语句

char*sql ="create table if not exists testtable(ID INTEGER PRIMARY KEY autoINCREMENT,testID int,testValue text)";

sqlite3_stmt*statement;

//sqlite3_prepare_v2接口把一条sql语句解析到statement结构里去.使用该接口访问数据库是当前比较好的的一种方法

NSIntegersqlReturn =sqlite3_prepare_v2(_database,sql,-1,&statement,nil);

//第一个参数跟前面一样,是个sqlite3 *类型变量,

//第二个参数是一个sql语句。

//第三个参数我写的是-1,这个参数含义是前面sql语句的长度。如果小于0sqlite会自动计算它的长度(把sql语句当成以结尾的字符串)。

//sqlite3_stmt第四个参数是sql的指针的指针。解析以后的语句就放在这个结构里。

//nil第五个参数我也不知道是干什么的。为就可以了。

//sqlITE_OK如果这个函数执行成功(返回值是statementNulL不为),那么下面就可以开始插入二进制数据。

//sql如果语句解析出错的话程序返回

ifsqlITE_OK(sqlReturn !=) {

NSLog();@"Error: Failed to prepare statement:create test table"

return;NO

}

执行//语句sql

intsqlite3_stepsuccess =(statement);

释放//sqlite3_stmt

(statement);sqlite3_finalize

执行//语句失败sql

ifsqlITE_DONE( success !=) {

NSLog();@"Error: Failed to dehydrate:create table test"

return;NO

}

NSLog();@"Create table 'testtable' successed."

return;YES//

}


BOol插入数据

-(sqlTestList) insertTestList:(*)insertList {

//先判断数据库是否打开

ifself([openDB]) {

sqlite3_stmt*statement;

//sql这个values语句特别之处在于?里面有个sqlite3_prepare号。在?函数里,号表示一个未定的值,它的值等下才插入。

staticchar*sql =;"INSERT INTO testtable(testID,testValue) VALUES(?,?)"

intsqlite3_prepare_v2success2 =_database(NulL,);

ifsqlITE_OK(success2 !=) {

NSLog();@"Error: Failed to insert:testtable"

(sqlite3_close_database);

return;NO

}

//1这里的数字23代表第几个问号,这里将两个值绑定到两个绑定变量

sqlite3_bind_int1(statement,sqlID,insertList.);

sqlite3_bind_text2(statement,sqlText,[insertList.UTF8StringsqlITE_TRANSIENT],);


//执行插入语句

sqlite3_stepsuccess2 =(statement);

释放//statement

(statement);sqlite3_finalize

//如果插入失败

ifsqlITE_ERROR(success2 ==) {

NSLog();@"Error: Failed to insert into the database with message."

关闭数据库//

(sqlite3_close_database);

return;NO

}

//关闭数据库

(sqlite3_close_database);

return;YES

}

return;NO//

}


NSMutableArray获取数据

- (*)getTestList{

*array = [NSMutableArrayNSMutableArrayarrayWithCapacity:10];

//判断数据库是否打开

ifself([openDB]) {

sqlite3_stmtnil*statement =;

语句//sql

char*sql =;"SELECT testID,testValue FROM testtable"

ifsqlite3_prepare_v2(_database(NulL,sqlITE_OK) !=) {

NSLog();@"Error: Failed to prepare statement with message:get testValue."

return;NO

}

else{

//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。

whilesqlite3_step(sqlITE_ROW(statement) ==) {

sqlTestListsqlTestList* sqlList = [[allocinit]] ;

sqlIDsqlList.sqlite3_column_int =0(statement,);

charchar* strText = (sqlite3_column_text*)1(statement,);

sqlTextsqlList.Nsstring= [stringWithUTF8Stringaddobject:strText];

[array:sqlList];

release[sqlList];

}

}

(statement);sqlite3_finalize

(sqlite3_close_database);

}

returnretain[array//];

}


BOol更新数据

-(sqlTestList) updateTestList:(*)updateList{

ifself([openDB]) {

//我想下面几行已经不需要我讲解了,嘎嘎

sqlite3_stmt*statement;

组织//语句sql

char*sql =;"update testtable set testValue = ? WHERE testID = ?"

//语句放入sqlsqlite3_stmt

intsqlite3_prepare_v2success =_database(NulL,);

ifsqlITE_OK(success !=) {

NSLog();@"Error: Failed to update:testtable"

(sqlite3_close_database);

return;NO

}

//1这里的数字231代表第几个问号。这里只有个问号,这是一个相对比较简单的数据库 *** 作,真正的项目中会远远比这个复杂

//当掌握了原理后就不害怕复杂了

sqlite3_bind_textsqlText(statement,[updateList.UTF8StringsqlITE_TRANSIENT],);

sqlite3_bind_intsqlID(statement,updateList.);

//sql执行语句。这里是更新数据库

sqlite3_stepsuccess =(statement);

释放//statement

(statement);sqlite3_finalize

//如果执行失败

ifsqlITE_ERROR(success ==) {

NSLog();@"Error: Failed to update the database with message."

关闭数据库//

(sqlite3_close_database);

return;NO

}

//执行成功后依然要关闭数据库

(sqlite3_close_database);

return;YES

}

return;NO//

}

BOol删除数据

- (sqlTestList) deleteTestList:(*)deletList{

ifself([openDB]) {

sqlite3_stmt*statement;

组织//语句sql

staticchar*sql =;"delete from testtable where testID = ? and testValue = ?"

//语句放入sqlsqlite3_stmt

intsqlite3_prepare_v2success =_database(NulL,);

ifsqlITE_OK(success !=) {

NSLog();@"Error: Failed to delete:testtable"

(sqlite3_close_database);

return;NO

}

//1这里的数字231代表第几个问号。这里只有个问号,这是一个相对比较简单的数据库 *** 作,真正的项目中会远远比这个复杂

//当掌握了原理后就不害怕复杂了

sqlite3_bind_intsqlID(statement,deletList.);

sqlite3_bind_textsqlText(statement,[deletList.UTF8StringsqlITE_TRANSIENT],);

//sql执行语句。这里是更新数据库

sqlite3_stepsuccess =(statement);

释放//statement

(statement);sqlite3_finalize

//如果执行失败

ifsqlITE_ERROR(success ==) {

NSLog();@"Error: Failed to delete the database with message."

关闭数据库//

(sqlite3_close_database);

return;NO

}

//执行成功后依然要关闭数据库

(sqlite3_close_database);

return;YES

}

return;NO

//

}

NSMutableArray查询数据

- (int*)searchTestList:()searchID{

*array = [NSMutableArrayNSMutableArrayarrayWithCapacity:10];

//判断数据库是否打开

ifself([openDB]) {

sqlite3_stmtnil*statement =;

语句//sql

char*sql =;"SELECT testID,testValue FROM testtable WHERE testID = ?"

ifsqlite3_prepare_v2(_database(NulL,sqlITE_OK) !=) {

NSLog();@"Error: Failed to prepare statement with message:search testValue."

return;NO

}

else{

sqlite3_bind_int(statement,searchID);

//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。

whilesqlite3_step(sqlITE_ROW(statement) ==) {

sqlTestListsqlTestList* sqlList = [[allocinit]] ;

sqlIDsqlList.sqlite3_column_int =1(statement,);

sqlTextsqlList.Nsstring= [stringWithUTF8Stringaddobject:strText];

[array:sqlList];

release[sqlList];

}

}

(statement);sqlite3_finalize

(sqlite3_close_database);

}

returnretain[array[+++]];

}

总结

以上是内存溢出为你收集整理的一个SQLite3的小例子全部内容,希望文章能够帮你解决一个SQLite3的小例子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
一个SQLite3的小例子_sql_内存溢出

一个SQLite3的小例子

一个SQLite3的小例子,第1张

概述                   写了一个比较简单的SQLite3的简单demo只实现了增加 更新 删除 获取全部数据  查找   数据库部分有详细注释    界面也比较简陋主要是实现一下数据库部分 资源地址:http://download.csdn.net/detail/decemberd/3899232          部分代码如下: //获取document目录并返回数据库目录 - (

写了一个比较简单的sqlite3的简单demo只实现了增加 更新 删除 获取全部数据 查找 数据库部分有详细注释 界面也比较简陋主要是实现一下数据库部分


资源地址:http://download.csdn.net/detail/decemberd/3899232


部分代码如下:

//获取document目录并返回数据库目录

- (Nsstring*)datafilePath{

NSArray*paths =NSSearchPathForDirectorIEsInDomains(NSdocumentDirectory,NSUserDomainMask,YES);

Nsstring*documentsDirectory = [pathsobjectAtIndex:0];

return[documentsDirectorystringByAppendingPathComponent:kfilename];

}


//创建,打开数据库

- (BOol)openDB {

//获取数据库路径

Nsstring*path = [selfdatafilePath];

//文件管理器

NSfileManager*fileManager = [NSfileManagerdefaultManager];

//判断数据库是否存在

BOolfind = [fileManagerfileExistsAtPath:path];

//如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)

if(find) {

NSLog(@"Database file have already existed.");

//打开数据库,这里的[path UTF8String]是将Nsstring转换为C字符串,因为sqlite3是采用可移植的C(而不是

//Objective-C)编写的,它不知道什么是Nsstring.

if(sqlite3_open([pathUTF8String],&_database) !=sqlITE_OK) {

//如果打开数据库失败则关闭数据库

sqlite3_close(self._database);

NSLog(@"Error: open database file.");

returnNO;

}

//创建一个新表

[selfcreateTestList:self._database];

returnYES;

}

//如果发现数据库不存在则利用sqlite3_open创建数据库(上面已经提到过),与上面相同,路径要转换为C字符串

if(sqlite3_open([pathUTF8String],&_database) ==sqlITE_OK) {

//创建一个新表

[selfcreateTestList:self._database];

returnYES;

}else{

//如果创建并打开数据库失败则关闭数据库

sqlite3_close(self._database);

NSLog(@"Error: open database file.");

returnNO;

}

returnNO;

}


//创建表

- (BOol) createTestList:(sqlite3*)db {

//这句是大家熟悉的sql语句

char*sql ="create table if not exists testtable(ID INTEGER PRIMARY KEY autoINCREMENT,testID int,testValue text)";

sqlite3_stmt*statement;

//sqlite3_prepare_v2接口把一条sql语句解析到statement结构里去.使用该接口访问数据库是当前比较好的的一种方法

NSIntegersqlReturn =sqlite3_prepare_v2(_database,sql,-1,&statement,nil);

//第一个参数跟前面一样,是个sqlite3 *类型变量,

//第二个参数是一个sql语句。

//第三个参数我写的是-1,这个参数含义是前面sql语句的长度。如果小于0sqlite会自动计算它的长度(把sql语句当成以结尾的字符串)。

//sqlite3_stmt第四个参数是sql的指针的指针。解析以后的语句就放在这个结构里。

//nil第五个参数我也不知道是干什么的。为就可以了。

//sqlITE_OK如果这个函数执行成功(返回值是statementNulL不为),那么下面就可以开始插入二进制数据。

//sql如果语句解析出错的话程序返回

ifsqlITE_OK(sqlReturn !=) {

NSLog();@"Error: Failed to prepare statement:create test table"

return;NO

}

执行//语句sql

intsqlite3_stepsuccess =(statement);

释放//sqlite3_stmt

(statement);sqlite3_finalize

执行//语句失败sql

ifsqlITE_DONE( success !=) {

NSLog();@"Error: Failed to dehydrate:create table test"

return;NO

}

NSLog();@"Create table 'testtable' successed."

return;YES//

}


BOol插入数据

-(sqlTestList) insertTestList:(*)insertList {

//先判断数据库是否打开

ifself([openDB]) {

sqlite3_stmt*statement;

//sql这个values语句特别之处在于?里面有个sqlite3_prepare号。在?函数里,号表示一个未定的值,它的值等下才插入。

staticchar*sql =;"INSERT INTO testtable(testID,testValue) VALUES(?,?)"

intsqlite3_prepare_v2success2 =_database(NulL,);

ifsqlITE_OK(success2 !=) {

NSLog();@"Error: Failed to insert:testtable"

(sqlite3_close_database);

return;NO

}

//1这里的数字23代表第几个问号,这里将两个值绑定到两个绑定变量

sqlite3_bind_int1(statement,sqlID,insertList.);

sqlite3_bind_text2(statement,sqlText,[insertList.UTF8StringsqlITE_TRANSIENT],);


//执行插入语句

sqlite3_stepsuccess2 =(statement);

释放//statement

(statement);sqlite3_finalize

//如果插入失败

ifsqlITE_ERROR(success2 ==) {

NSLog();@"Error: Failed to insert into the database with message."

关闭数据库//

(sqlite3_close_database);

return;NO

}

//关闭数据库

(sqlite3_close_database);

return;YES

}

return;NO//

}


NSMutableArray获取数据

- (*)getTestList{

*array = [NSMutableArrayNSMutableArrayarrayWithCapacity:10];

//判断数据库是否打开

ifself([openDB]) {

sqlite3_stmtnil*statement =;

语句//sql

char*sql =;"SELECT testID,testValue FROM testtable"

ifsqlite3_prepare_v2(_database(NulL,sqlITE_OK) !=) {

NSLog();@"Error: Failed to prepare statement with message:get testValue."

return;NO

}

else{

//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。

whilesqlite3_step(sqlITE_ROW(statement) ==) {

sqlTestListsqlTestList* sqlList = [[allocinit]] ;

sqlIDsqlList.sqlite3_column_int =0(statement,);

charchar* strText = (sqlite3_column_text*)1(statement,);

sqlTextsqlList.Nsstring= [stringWithUTF8Stringaddobject:strText];

[array:sqlList];

release[sqlList];

}

}

(statement);sqlite3_finalize

(sqlite3_close_database);

}

returnretain[array//];

}


BOol更新数据

-(sqlTestList) updateTestList:(*)updateList{

ifself([openDB]) {

//我想下面几行已经不需要我讲解了,嘎嘎

sqlite3_stmt*statement;

组织//语句sql

char*sql =;"update testtable set testValue = ? WHERE testID = ?"

//语句放入sqlsqlite3_stmt

intsqlite3_prepare_v2success =_database(NulL,);

ifsqlITE_OK(success !=) {

NSLog();@"Error: Failed to update:testtable"

(sqlite3_close_database);

return;NO

}

//1这里的数字231代表第几个问号。这里只有个问号,这是一个相对比较简单的数据库 *** 作,真正的项目中会远远比这个复杂

//当掌握了原理后就不害怕复杂了

sqlite3_bind_textsqlText(statement,[updateList.UTF8StringsqlITE_TRANSIENT],);

sqlite3_bind_intsqlID(statement,updateList.);

//sql执行语句。这里是更新数据库

sqlite3_stepsuccess =(statement);

释放//statement

(statement);sqlite3_finalize

//如果执行失败

ifsqlITE_ERROR(success ==) {

NSLog();@"Error: Failed to update the database with message."

关闭数据库//

(sqlite3_close_database);

return;NO

}

//执行成功后依然要关闭数据库

(sqlite3_close_database);

return;YES

}

return;NO//

}

BOol删除数据

- (sqlTestList) deleteTestList:(*)deletList{

ifself([openDB]) {

sqlite3_stmt*statement;

组织//语句sql

staticchar*sql =;"delete from testtable where testID = ? and testValue = ?"

//语句放入sqlsqlite3_stmt

intsqlite3_prepare_v2success =_database(NulL,);

ifsqlITE_OK(success !=) {

NSLog();@"Error: Failed to delete:testtable"

(sqlite3_close_database);

return;NO

}

//1这里的数字231代表第几个问号。这里只有个问号,这是一个相对比较简单的数据库 *** 作,真正的项目中会远远比这个复杂

//当掌握了原理后就不害怕复杂了

sqlite3_bind_intsqlID(statement,deletList.);

sqlite3_bind_textsqlText(statement,[deletList.UTF8StringsqlITE_TRANSIENT],);

//sql执行语句。这里是更新数据库

sqlite3_stepsuccess =(statement);

释放//statement

(statement);sqlite3_finalize

//如果执行失败

ifsqlITE_ERROR(success ==) {

NSLog();@"Error: Failed to delete the database with message."

关闭数据库//

(sqlite3_close_database);

return;NO

}

//执行成功后依然要关闭数据库

(sqlite3_close_database);

return;YES

}

return;NO

//

}

NSMutableArray查询数据

- (int*)searchTestList:()searchID{

*array = [NSMutableArrayNSMutableArrayarrayWithCapacity:10];

//判断数据库是否打开

ifself([openDB]) {

sqlite3_stmtnil*statement =;

语句//sql

char*sql =;"SELECT testID,testValue FROM testtable WHERE testID = ?"

ifsqlite3_prepare_v2(_database(NulL,sqlITE_OK) !=) {

NSLog();@"Error: Failed to prepare statement with message:search testValue."

return;NO

}

else{

sqlite3_bind_int(statement,searchID);

//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。

whilesqlite3_step(sqlITE_ROW(statement) ==) {

sqlTestListsqlTestList* sqlList = [[allocinit]] ;

sqlIDsqlList.sqlite3_column_int =1(statement,);

sqlTextsqlList.Nsstring= [stringWithUTF8Stringaddobject:strText];

[array:sqlList];

release[sqlList];

}

}

(statement);sqlite3_finalize

(sqlite3_close_database);

}

returnretain[array];

}

总结

以上是内存溢出为你收集整理的一个SQLite3的小例子全部内容,希望文章能够帮你解决一个SQLite3的小例子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173062.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存