微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用SQLite存储和查询数据的简单实现源代码+注释

#import "ViewController.h"


//定义宏方便引用


@interface ViewController ()


@end


@implementation ViewController

@synthesize name;

@synthesize classname;

@synthesize num;




//ps;;如果出现未能识别的错误,那那个错误很可能跟控件的输入输出错误有关。主要是逻辑错误





-(Nsstring*)databasePath //===========我把加载数据和获得路径的过程封装为一个方法

{


Nsstring *docsDir;

NSArray *dirPaths;

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

docsDir = [dirPaths objectAtIndex:0];

Nsstring *databasePath = [[Nsstring alloc] initWithString:[docsDir stringByAppendingPathComponent:@"info.db"]];//新建一个数据的名字

return databasePath; //返回路径

}


- (IBAction)touch:(id)sender {

[NSThread sleepForTimeInterval:0.1]; //延迟动作发生产生一点动画效果

CGAffineTransform pTransform = CGAffineTransformMakeTranslation(0,-100);

//使视图使用这个变换

self.view.transform = pTransform;//移动view,不要挡着输入

[UIView commitAnimations]; // 动画效果

}


- (IBAction)over:(id)sender {

[NSThread sleepForTimeInterval:0.1];

CGAffineTransform

pTransform = CGAffineTransformMakeTranslation(0,0);

//使视图使用这个变换

self.view.transform = pTransform;

[UIView commitAnimations];

}


- (void)viewDidLoad

{

NSLog(@"%@",NSHomeDirectory());

[super viewDidLoad];

Nsstring *databasePath=[self databasePath];//调用我原来封装的方法

NSFileManager *filemanager = [NSFileManager defaultManager];

if ([filemanager fileExistsAtPath:databasePath] == NO) {

const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath,&db)==sqlITE_OK) //这里的db是之前的添加 *db

{

char *errmsg;

const char *createsql = "CREATE TABLE IF NOT EXISTS INFO (ID INTEGER PRIMARY KEY AUTOINCREMENT,NUM TEXT,CLASSNAME TEXT,NAME TEXT)";//这里是sql语言的创建列表

if (sqlite3_exec(db,createsql,NULL,&errmsg)!=sqlITE_OK) {

//status.text = @"create table Failed."; 用来提示lable

NSLog(@"woain");

}

}

}

}


-(IBAction)viewclick:(id)sender{

[num resignFirstResponder]; //uiview继承uicontrl可以实现这些方法

[classname resignFirstResponder];

[name resignFirstResponder];

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// dispose of any resources that can be recreated.

}


- (IBAction)load:(id)sender {

sqlite3_stmt *statement;

Nsstring *databasePath=[self databasePath];

const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath,&db)==sqlITE_OK) {

Nsstring *querysql = [Nsstring stringWithFormat:@"SELECT classname,name from info where num=\"%@\"",num.text]; //================这里就实现了用号码查询,其他的可以另外实现

const char *querystatement = [querysql UTF8String];

if (sqlite3_prepare_v2(db,querystatement,-1,&statement,NULL)==sqlITE_OK) {

if (sqlite3_step(statement)==sqlITE_ROW) {

Nsstring *classnameField = [[Nsstring alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement,0)];

classname.text = classnameField;

Nsstring *nameField = [[Nsstring alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement,1)];

name.text = nameField;

//status.text = @"find~~~";

}

sqlite3_finalize(statement);

}

sqlite3_close(db);

}}


- (IBAction)save:(id)sender {

Nsstring *databasePath=[self databasePath];

sqlite3_stmt *statement;

const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath,&db)==sqlITE_OK)

{

if ([num.text isEqualToString:@""]) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SORRY!" message:@"number cannot be nil!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

[alert show];

}

else {

Nsstring *insertsql = [Nsstring stringWithFormat:@"INSERT INTO INFO (num,classname,name) VALUES(\"%@\",\"%@\",\"%@\")",num.text,classname.text,name.text];

const char *insertstaement = [insertsql UTF8String];

sqlite3_prepare_v2(db,insertstaement,NULL);

NSLog(@"chenggong");

if (sqlite3_step(statement)==sqlITE_DONE) {

// status.text = @"save to DB.";

num.text = @"";

classname.text = @"";

name.text = @"";

NSLog(@"chenggong");

}

else{

NSLog(@"sibai");

}

sqlite3_finalize(statement);

sqlite3_close(db);

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,