sqlite数据库检索

1. 数据库检索, 得到某字段下所有值

 1 - (NSArray *)selectWithColumName: (NSString *)columName
 2                        tableName: (NSString *)tableName {
 3     if ([self openDatabase] == YES) {
 4         
 5         NSString * selectSQL = [NSString stringWithFormat:@"SELECT %@ FROM %@", columName, tableName];
 6         sqlite3_stmt * stmt = nil;
 7         
 8         int preResult = sqlite3_prepare_v2(_db, [selectSQL UTF8String], -1, &stmt, NULL);
 9         
10         if (preResult == SQLITE_OK) {
11             NSMutableArray * array = [NSMutableArray array];
12             
13             while (sqlite3_step(stmt) == SQLITE_ROW) {
14                 [array addObject:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 0)]];
15             }
16             
17             sqlite3_finalize(stmt);
18             return array;
19         } else {
20             NSLog(@"check your sqlQuery");
21             return nil;
22         }
23     } else {
24         NSLog(@"%@", [self errorWithMessage:@"openDB Failure"]);
25         return nil;
26     }
27 }

2. 通过你存储的模型以及数据表名得到所有的数据

 1 #pragma mark - select DB
 2 - (NSArray *)selectAllMembersWithTableName: (NSString *)tableName
 3                                objectModel:(id)object; {
 4     if ([self openDatabase] == YES) {
 5         
 6         NSString * selectSQL = [NSString stringWithFormat:@"SELECT * FROM %@", tableName];
 7         sqlite3_stmt * stmt = nil;
 8         
 9         int preResult = sqlite3_prepare_v2(_db, [selectSQL UTF8String], -1, &stmt, NULL);
10         
11         if (preResult == SQLITE_OK) {
12             NSMutableArray * array = [NSMutableArray array];
13             
14             while (sqlite3_step(stmt) == SQLITE_ROW) {
15                 
16                 id model = [[[object class] alloc] init];
17                 for (int i=0; i<sqlite3_column_count(stmt); i++) {
18                     [model setValue:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, i)] forKey:[NSString stringWithUTF8String:(const char *)sqlite3_column_name(stmt, i)]];
19                 }
20                 [array addObject:model];
21                 [model release];
22             }
23             
24             sqlite3_finalize(stmt);
25             return array;
26         } else {
27             NSLog(@"check your sqlQuery and Model");
28             return nil;
29         }
30     } else {
31         NSLog(@"%@", [self errorWithMessage:@"SqlQuery error"]);
32         return nil;
33     }
34 }

3. 通过key:value对应关系的字典为数据库查询语句的基础, 得到需要的值

.h文件定义以及使用提示

#pragma mark selectWithSqlQueryDict
/*get value with sql statementyou must give columName(dict key) = value(dict value) - all string type.e.g  dict = {"name" = "xxdbuser","age"  = "19"};object: model you want通过包含有你的约束条件的字典、 通过表名称、 你所给的模型、 返回包含有若干模型的数组*/
- (NSArray *)selectWithSqlQueryDictionary: (NSDictionary *)sqlQueryDictionarytableName: (NSString *)tableNamemodel: (id)object;

.m 文件实现

 1 #pragma mark selectWithSqlQuery
 2 - (NSArray *)selectWithSqlQueryDictionary: (NSDictionary *)sqlQueryDictionary
 3                                 tableName: (NSString *)tableName
 4                                     model: (id)object {
 5     
 6     // getAllKeys
 7     NSArray * keyArray = sqlQueryDictionary.allKeys;
 8     NSString * sqlQuery = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE ", tableName];
 9     
10     if ([self openDatabase] == YES) {
11         
12         // foreach build sqlQuery
13         for (NSString * key in keyArray) {
14             sqlQuery = [sqlQuery stringByAppendingString:[NSString stringWithFormat:@"%@ = '%@' and ", key, sqlQueryDictionary[key]]];
15         }
16         sqlQuery = [sqlQuery substringToIndex:[sqlQuery length] - 4];
17         
18         sqlite3_stmt * stmt;
19         
20         int result = sqlite3_prepare_v2(_db, [sqlQuery UTF8String], -1, &stmt, NULL);
21         if (result == SQLITE_OK) {
22             NSMutableArray * array = [NSMutableArray array];
23             
24             while (sqlite3_step(stmt) == SQLITE_ROW) {
25                 
26                 id model = [[[object class] alloc] init];
27                 for (int i=0; i<sqlite3_column_count(stmt); i++) {
28                     [model setValue:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, i)] forKey:[NSString stringWithUTF8String:(const char *)sqlite3_column_name(stmt, i)]];
29                 }
30                 [array addObject:model];
31                 [model release];
32             }
33             
34             sqlite3_finalize(stmt);
35             return array;
36         } else {
37             NSLog(@"check your sqlQuery");
38             return nil;
39         }
40         
41     } else {
42         NSLog(@"%@", [self errorWithMessage:@"openDB Failure"]);
43         return nil;
44     }
45 }

4. 错误信息的输出

1 #pragma mark - errorMessage
2 - (NSError *)errorWithMessage:(NSString *)message {
3     return [NSError errorWithDomain:@"XXDB" code:sqlite3_errcode(_db) userInfo:[NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey]];
4 }

 

ok 今天就到这里。 数据库是数据持久化最常用的办法。 一定熟练掌握用户的各种需求实现的办法

转载于:https://www.cnblogs.com/Dylan-Alice/p/Dylan_DB.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

处理中断

我只是在观看Heinz Kabutz的VJUG采访 &#xff0c;这启发了我写一篇有关中断的文章。 顺便说一句&#xff0c;我建议您订阅VJUG YouTube频道 -确实非常有用。 Heinz始终是物有所值的&#xff0c;并且很难学到很多东西就很难看他的演讲。 他提出了有关如何处理InterruptedExcep…

word模板插入文本域并调整表格某一个行的列宽度

一、插入文本域 操作步骤&#xff1a;插入&#xff08;菜单&#xff09;->文档部件&#xff08;菜单&#xff09;->域&#xff08;菜单&#xff09;->邮件合并->输入名称->确认 二、调整word表格某个单元格宽度 选中某行&#xff0c;按住ctrl键的同时&#xf…

从拟物到简约 ------谈网站设计风格的变革

哪种设计才是好的设计&#xff1f;其实&#xff0c;每种设计都有其优势也会有其不足。关键在其应用场合&#xff0c;以及是否能够向用户传递有效的价值。武断地决定是否采用某种技术或者不思考其能否取悦用户的设计不是好设计。好的设计不应当局限于某种设计风格&#xff0c;而…

java遍历文件夹并获取所有路径

/** * 获取路径下的所有文件/文件夹 * param directoryPath 需要遍历的文件夹路径 * return */ public static List<String> getAllFile(String directoryPath) { LinkedList list new LinkedList(); if(directoryPathnull){ …

java中文件处理之图片_在Java 7中处理文件

java中文件处理之图片以下是The Well-Grounded Java Developer的草稿的修改后的片段。 它使您快速了解与以前版本相比&#xff0c;在Java 7中操作文件要容易得多。 通过使用新的Files类及其许多实用程序方法&#xff0c;您可以仅用一行代码就可以对文件执行以下操作&#xff1a…

java实时记录在线人数

1.配置过滤器 <listener> <listener-class>com.listener.SessionCount</listener-class > </listener> 2.登陆时记录 package com.insigma.common.listener; import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entr…

检讨程序猿

程序员变程序猿&#xff0c;这是个中国问题。多年前&#xff0c;浦东某开发区一个年轻的编程员因病去世&#xff0c;他母亲从四川赴沪奔丧&#xff0c;清理遗物时&#xff0c;她发现儿子床垫下都是钱&#xff0c;老人家痛哭失声&#xff0c;她说&#xff0c;你们看呐&#xff0…

在Java 8中使用Rhino

Java将Nashorn作为JSR 223的新JavaScript实现&#xff08;javax.scripting&#xff09;。 尽管这无疑是个好消息&#xff08;通过直接生成Java代码&#xff0c;Nashorn比Rhino快得多&#xff09;&#xff0c;但它也带来了一些挑战&#xff1a; Nashorn与Rhino并非100&#xff…

java复制单个文件

/*org.apache.commons.io.FileUtils:java文件工具类*/ String targetPath"/xxx/targetfile.pdf";//已知文件全路径 String sourcePath/xxx/sourcefile.pdf";//复制文件全路径 File fnew File(targetPath); try { if(!f.exists()) { …

FTP服务器的搭建与安全配置

FTP可以说是Internet上使用非常广泛的一种通讯协议了。它工作在OSI模型的第7层&#xff0c;是TCP/IP的一种具体应用。FTP采用基于TCP的可靠连接&#xff1a;监听21端口来等待控制连接请求&#xff0c;当连接建立后&#xff0c;采用20号端口来建立数据传输通道。 FTP中使用的一些…

C#值类型以及默认值记录下

C#的值类型有bool,byte,sbyte,decimal,double,float,int,uint,long,string等 如果我们擅长使用默认值&#xff0c;可以帮助我们减少带来赋值及代码编写. 比如我我经常赋值&#xff1a; int i0;下面都是各个值类型的默认值&#xff1a; bool>false byte,sbyte>0 int,uint,…

java泛型视频教程_Java泛型快速教程

java泛型视频教程泛型是Java SE 5.0引入的一种Java功能&#xff0c;在其发布几年后&#xff0c;我发誓那里的每个Java程序员不仅会听说过&#xff0c;而且已经使用过。 关于Java泛型&#xff0c;有很多免费和商业资源&#xff0c;而我使用的最佳资源是&#xff1a; Java教程 …

Windows上的Oracle Java

我最近为基于Windows 7的笔记本电脑下载了JDK 9的早期访问版本 &#xff08;内部版本68 &#xff09;。 由于这是早期版本&#xff0c;因此当自动安装在笔记本电脑上安装主要Java Runtime Environment&#xff08;JRE&#xff09;引入了一些不太理想的问题时&#xff0c;我并不…

DM oracle Mysql 查询数据库表和字段

-----------------------------------------------------ORALCE、DM select * from user_tab_comments;--查询当前用户下的表注释 select * from user_col_comments;--查询当前用户下的字段注释 select * from dba_tables ;--查询数据库实例下的表 属性 select * from dba_t…

java synchronized 对指定代码添加锁-简单样例

1:对静态代码添加锁 private final static Object syncLock new Object(); // 相当于线程锁,用于线程安全 public static int n0; public static void main(String[] args) { synchronized (syncLock){//锁 for(int i0;i<100;i) { n; Syst…

使用无锁的方式和有锁的方式的程序性能对比

这里分别使用有锁和无锁两种方式&#xff0c;对一个数值进行增加&#xff0c;一直增加到100000&#xff0c;然后输出使用时间的长短。 1 import java.util.concurrent.ExecutorService;2 import java.util.concurrent.Executors;3 import java.util.concurrent.TimeUnit;4 impo…

java pgp_Java相当好的隐私(PGP)

java pgp公钥加密 这篇文章讨论了PGP或“很好的隐私”。 PGP是常规加密和公用密钥加密的混合实现。 在详细介绍PGP之前&#xff0c;让我们先谈谈公钥加密。 与其他任何加密技术一样&#xff0c;公钥加密解决了通过不安全介质传输安全数据的问题。 即互联网。 结果&#xff0c;…

extjs弹出窗口查看文本内容-new Ext.Window

代码样例&#xff1a; function processscan(){ var text时间 用户 操作<br> 时间 用户 操作<br> 时间 用户 操作; var win new Ext.Window({ layout: fit, width: 700, height: 600, closeAction: hide, dra…

MySql默认编码所造成的乱码麻烦1.222

1、前言 MySQL在安装时&#xff0c;最后的一步&#xff0c;会让你选择MySQL服务器及客户端、数据库、连接接口的默认编码。通常可选择 UTF8和GB2312. 但是&#xff0c;如果你选择了utf8的时候&#xff0c;恰好你要从另一个数据库上迁移一个gb2312编码格式的数据库过来&#xff…

jquery(js) 增加 删除 修改属性样式、元素内容

引入jquery.js 1.增加或修改样式 $(#id).css(display,none);--根据id设置隐藏 2.$("#id").css({"background-color":"yellow","font-size":"200%"}); 3.增加或修改属性 $(#id).attr(readonly,true);--根据id设置标签属性…