1. #import "ViewController.h"
  2.  
  3. @interface ViewController ()
  4. @property(nonatomic,retain)PLSqliteDatabase *db;
  5. @end
  6.  
  7. @implementation ViewController
  8.  
  9. #pragma mark -生命周期方法
  10. -(void)dealloc{
  11. self.db=nil;
  12. [super dealloc];
  13. }
  14.  
  15. - (void)viewDidLoad
  16. {
  17. [super viewDidLoad];
  18. // Do any additional setup after loading the view, typically from a nib.
  19. [self OpenDb];
  20. }
  21.  
  22. - (void)didReceiveMemoryWarning
  23. {
  24. [super didReceiveMemoryWarning];
  25. // Dispose of any resources that can be recreated.
  26. }
  27.  
  28. #pragma mark -事件
  29. - (IBAction)createTable:(id)sender {
  30. [self createTable];
  31. }
  32.  
  33. - (IBAction)ExtistTable:(id)sender {
  34. }
  35.  
  36. - (IBAction)Insert:(id)sender {
  37. [self InsertData];
  38. }
  39.  
  40. - (IBAction)update:(id)sender {
  41. [self UpdateData];
  42. }
  43.  
  44. - (IBAction)delete1:(id)sender {
  45. [self deletedata];
  46. }
  47. - (IBAction)select1:(id)sender {
  48. [self selectdata1];
  49. }
  50.  
  51. #pragma mark--数据库操作
  52. -(void)OpenDb{
  53. NSString *path= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  54. path=[path stringByAppendingPathComponent:@"test.db"];
  55. //open db
  56. PLSqliteDatabase *sqldb=[[PLSqliteDatabase alloc] initWithPath:path];//没有数据库,会创建一个的
  57.  
  58. if(![sqldb open]){
  59. NSLog(@"没有打开数据库");
  60.  
  61. }
  62. self.db=sqldb;
  63.  
  64. [sqldb release];
  65. }
  66.  
  67. -(void)createTable{
  68. if (![self.db tableExists:@"TEST"]) {
  69. if(![self.db executeUpdate:@"CREATE TABLE TEST (id integer primary key autoincrement,name text,age integer)"]){
  70. NSLog(@"create table faild");
  71. }
  72. }
  73. else{
  74. NSLog(@"表已经存在");
  75. }
  76.  
  77. }
  78.  
  79. -(void)InsertData{
  80. NSString *sql=@"INSERT INTO TEST(name,age) values(?,?)";
  81.  
  82. if([self.db executeUpdate:sql,@"gcb",@]){//注意参数必须是oc对象
  83. NSLog(@"insert success");
  84. }
  85. else{
  86. NSLog(@"insert failed");
  87. }
  88.  
  89. }
  90.  
  91. -(void)UpdateData{
  92. NSString *sql=@"UPDATE TEST SET name=?,age=? where id=?";
  93. if([self.db executeUpdate:sql,@"ios",@,@]){//注意参数必须是oc对象
  94. NSLog(@"update success");
  95. }
  96. else{
  97. NSLog(@"updata failed");
  98. }
  99. }
  100.  
  101. -(void)selectdata{
  102. NSString *sql=@"SELECT id,name,age FROM TEST WHERE id=?";
  103. id<PLResultSet> result=[self.db executeQuery:sql,@];
  104. while ([result next]) {
  105. int pid=[result intForColumn:@"id"];
  106. NSString *name=[result stringForColumn:@"name"];
  107. int32_t age=[result intForColumn:@"age"];
  108. NSLog(@"id=%zi,name=%@,age=%zi",pid,name,age);
  109. }
  110. }
  111.  
  112. -(void)selectdata1{
  113. // NSString *sql=@"SELECT id,name,age FROM TEST WHERE (id like '%%%@%%' OR age like '%%@%%' ";
  114. NSString *sql=[NSString stringWithFormat:@"SELECT id,name,age FROM TEST WHERE (id like'%%%@%%' OR age like '%%%@%%')",@,@];
  115.  
  116. id<PLResultSet> result=[self.db executeQuery:sql];
  117. while ([result next]) {
  118. int pid=[result intForColumn:@"id"];
  119. NSString *name=[result stringForColumn:@"name"];
  120. int32_t age=[result intForColumn:@"age"];
  121. NSLog(@"id=%zi,name=%@,age=%zi",pid,name,age);
  122. }
  123. }
  124.  
  125. -(void)deletedata{
  126. NSString *sql=@"DELETE FROM TEST WHERE id=?";
  127. if([self.db executeUpdate:sql,@]){
  128. NSLog(@"delete success");
  129. }
  130. else{
  131. NSLog(@"delete failed");
  132. }
  133. }

插入的另一种方法(如果是要封装,可以考虑下面)

  1. -(void)InsertData1{
  2. NSString *sql=@"INSERT INTO TEST(name,age) values(:name,:age)";
  3.  
  4. id<PLPreparedStatement> stm=[self.db prepareStatement:sql];
  5. NSMutableDictionary *dic=[NSMutableDictionary dictionary];
  6. [dic setObject:@"tt" forKey:@"name"];
  7. [dic setObject:@ forKey:@"age"];
  8. [stm bindParameterDictionary:dic];
  9.  
  10. if([stm executeUpdate]){
  11. NSLog(@"ss");
  12. }
  1. -(void) selectdate2{
  2. NSString *sql=@"SELECT id,name,age FROM TEST WHERE id=:id";
  3. id<PLPreparedStatement> stmp=[self.db prepareStatement:sql];
  4. NSMutableDictionary *dic=[NSMutableDictionary dictionary];
  5. [dic setObject:@ forKey:@"id"];
  6. [stmp bindParameterDictionary:dic];
  7. id<PLResultSet> result=[stmp executeQuery];
  8. while ([result next]) {
  9. int pid=[result intForColumn:@"id"];
  10. NSString *name=[result stringForColumn:@"name"];
  11. int age=[result intForColumn:@"age"];
  12. NSLog(@"name=%@,age=%zi,id=%zi",name,age,pid);
  13. }
  14. }

ios中Pldatabase的用法(3)的更多相关文章

  1. ios中Pldatabase的用法

    将PLDATABASE加入到工程 下载PLDatabase 的dmg文件 将PLDatabase的framework复制到工程根目录在工程中加入该framework使用该framework进行数据库操 ...

  2. ios中Pldatabase的用法(4)

    封装成DAO@implementation SqlHelper +(BOOL)InsertSql:(NSString *)sql paramet:(NSMutableDictionary *)parm ...

  3. ios中Pldatabase的用法(2)

    @implementation AppGlobal static NSString* strHostName; static NSString* strVersion; static PLSqlite ...

  4. iOS中block的用法 以及和函数用法的区别

    ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的 ...

  5. iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)

    1. 前言 Block:带有自动变量(局部变量)的匿名函数.它是C语言的扩充功能.之所以是拓展,是因为C语言不允许存在这样匿名函数. 1.1 匿名函数 匿名函数是指不带函数名称函数.C语言中,函数是怎 ...

  6. ios中图片拉伸用法

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCap ...

  7. iOS中的CocoaPods用法及常用命令

     CocoaPods是什么? ***CocoaPods的使用场景:*** 1. 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用 ...

  8. iOS中NSScanner 的用法

    NSScanner是一个类,用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串.可以创建NSScanner时制定他的String属性,然后scanner会按照你的要求从头到尾扫描这 ...

  9. IOS中NSUserDefaults的用法(轻量级本地数据存储)

    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefa ...

随机推荐

  1. Cesium原理篇:3D Tiles(1)渲染调度【转】

    Cesium在2016年3月份左右推出3D Tiles数据规范,在glTF基础上提供了LOD能力,定位就是Web环境下海量三维模型数据.虽然目前3D Tiles还是Beta阶段,有不少硬伤,但3D T ...

  2. MultipleRegularExpressionAttribute MVC中扩展自定义验证规则

    好久都没有写博客,最近工作中没有什么可写的,公司的项目是以业务为重,技术含量实在不咋的.这次sprint中有一个要求就是password必须一些规则,比如给你一些正则表达式必须满足几个,直接看效果吧 ...

  3. js中document.write的那点事

    document.write()方法可以用在两个方面:页面载入过程中用实时脚本创建页面内容,以及用延时脚本创建本窗口或新窗口的内容.该方法需要一个字符串参数,它是写到窗口或框架中的HTML内容.这些字 ...

  4. android api doc 一

    Manifest.permission 用于记录相应权限类 ACCESS_CHECKIN_PROPERTIES 允许在登入数据库的时候读写其中的属性表,并上传改变的值 ACCESS_COARSE_LO ...

  5. python2.7 调用 .net的webservice asmx

    首先安装pip install suds 或下载:https://pypi.org/project/suds-jurko/0.6/#files 这个是最新版本 由于不支持python3.6, 所以只能 ...

  6. Android -- Canvas java.lang.UnsupportedOperationException

    干货 java.lang.UnsupportedOperationException at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:2 ...

  7. Redis实战总结-Redis的高可用性

    在之前的博客<Redis实战总结-配置.持久化.复制>给出了一种Redis主从复制机制,简单地实现了Redis高可用.然后,如果Master服务器宕机,会导致整个Redis瘫痪,这种方式的 ...

  8. 一家VC支持企业的发展轨迹——了解每次融资后股权和期权的变化,以及股份是如何被稀释的【转载】

    来源:ReachVc 该文是 ReachVC 上一篇文章,是某个投资公司副总裁的独立博客,文章写得不错.如果你是一个不太了解融资的创业者,那么本文将对你很有用.通过武林外传同福客栈的例子,了解每次融资 ...

  9. Spring AspectJ切入点语法详解

    1.Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指 ...

  10. 生日日期联动选择birthday.js

    实例下载