SQLite3简单介绍

1.ios中数据的存储方式

(1)Plist(NSArray\NSDictionary)

(2)Preference(偏好设置\NSUserDefaults)

(3)NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)

(4)SQLite3

(5)Core Data

说明:

3是版本号,是SQLite的第三个版本。
core Data是对SQLite的封装,因为iOS中使用的SQLite是纯C语言的。
2.SQLite

(1)什么是SQLite?

答:SQLite是一款轻型的嵌入式数据库,安卓和ios开发使用的都是SQLite数据库

(2)特点(优点)

  答:1)它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了

  2)它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快

(3)什么是数据库

答:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库

(4)数据库的分类

答:可以分为2大种类

关系型数据库(主流)和对象型数据库(直接把内存中的对象塞入到数据库,对比关系型数据库而言性能不能很好,效率不高)

(5)常用关系型数据库有哪些?

答:PC端:Oracle、MySQL、SQL Server、Access、DB2、Sybase

  嵌入式\移动客户端:SQLite

(6)数据库是如何存储数据的?

答:数据库的存储结构和excel很像,以表(table)为单位 。表由多个字段(列、属性、column)组成,表里面的每一行数据称为记录

(7)数据库存储数据的步骤?

1)新建一张表(table)

2)添加多个字段(column,列,属性)

3)添加多行记录(row,record,每行存放多个字段对应的值)

三、Navicat

Navicat是一款著名的数据库管理软件,支持大部分主流数据库(包括SQLite)

1.Navicat的安装

(1)下载该软件后,先打开该软件

(2)把文件拖入到应用程序拷贝

(3)破解版,千万不要打开app,先打开sn.app

  

(4)点击patch,找到应用程序的路径,点击open.

  

(5)点击Generate,生成注册码

(6)点击activate,选择文件,open

(7)退出sn,打开安装文件,完成安装

  

四 .Sqlite的基本操作

在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件。

  

导入头文件,可以使用库中的函数(是纯C语言的)

二、具体说明

新建一个项目,在项目的主界面中放四个按钮(分别是,增加、删除、修改、查询)。

1.sqlite3_open(<#const char *filename#>, <#sqlite3 **ppDb#>)函数的一些说明:

(1)作用:把一个文件名称传递给他,它会自动检测这个文件是否存在,如果不存在的话,会自动创建相应的文件(这里为数据库文件,刚创建为空)。

(2)参数:它的第一个参数为文件的名称(需转换为C语言的),第二个参数是数据库的实例,sqlite3 *db;

  说明:sqlite3是一种类型,db是数据库的句柄,就是数据库的象征,如果要进行增删改查,就得操作db这个实例。

(3)返回值:它的返回值为int型的,根据函数的返回值可以知道,打开数据库文件是成功还是失败,如果返回值是SQLITE_OK则说明成功,否则为失败。

2.打开数据库

  实现代码和显示:

查看沙盒内创建的数据库文件:

  

双击打开,查看发现打开的数据库连接名称为students,默认为文件名的前缀,数据库创建成功。

  

3.创建表

  函数说明:

  

  参数:第一个参数为数据库的句柄(db),第二个参数为sql语句,第三个参数为回调参数,是一个指向函数的指针,如果把callback前面的*改成^则就是一个block代码段,第四个参数可以写NULL,第五个参数为错误信息,用以代码调试。

 1     //1.打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
2 int result = sqlite3_open(cfileName, &db);
3 if (result==SQLITE_OK) { //打开成功
4 NSLog(@"成功打开数据库");
5
6 //2.创建表
7 const char *sql="CREATE TABLE IF NOT EXISTS t_students (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
8 char *errmsg=NULL;
9 result = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
10 if (result==SQLITE_OK) {
11 NSLog(@"创表成功");
12 }else
13 {
14 NSLog(@"创表失败----%s",errmsg);
15 }
16 }else
17 {
18 NSLog(@"打开数据库失败");
19 }

  执行后,创表成功,打开创建的表查看:

调试技巧:

1    if (result==SQLITE_OK) {
2 NSLog(@"创表成功");
3 }else
4 {
5 // NSLog(@"创表失败----%s",errmsg);
6 printf("创表失败---%s----%s---%d",errmsg,__FILE__,__LINE__);
7 }

  __FILE__宏打印文件名,

  __LINE__宏打印行号。

  

4.插入数据

  实现代码:

 1 - (IBAction)insert {
2 for (int i=0; i<20; i++) {
3 //1.拼接SQL语句
4 NSString *name=[NSString stringWithFormat:@"文晓--%d",arc4random_uniform(100)];
5 int age=arc4random_uniform(20)+10;
6 NSString *sql=[NSString stringWithFormat:@"INSERT INTO t_students (name,age) VALUES ('%@',%d);",name,age];
7
8 //2.执行SQL语句
9 char *errmsg=NULL;
10 sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &errmsg);
11 if (errmsg) {//如果有错误信息
12 NSLog(@"插入数据失败--%s",errmsg);
13 }else
14 {
15 NSLog(@"插入数据成功");
16 }
17 }
18 }

  打印查看:

查看数据库里t_students表中的数据:

5.选择(select)查询操作

  函数说明:

  select操作也可以使用sqlite3_exec函数实现,但通常使用下面的函数。

  

  参数:第一个参数为数据库的句柄,第二个参数为sql语句,第三个参数为sql的长度(如果设置为-1,则代表系统会自动计算sql语句的长度),第四个参数用来取数据,第五个参数为尾部一般用不上可直接写NULL。

  示例代码:

 1 - (IBAction)select {
2 const char *sql="SELECT id,name,age FROM t_students WHERE age<20;";
3 sqlite3_stmt *stmt=NULL;
4
5 //进行查询前的准备工作
6 if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL)==SQLITE_OK) {//SQL语句没有问题
7 NSLog(@"查询语句没有问题");
8
9 //每调用一次sqlite3_step函数,stmt就会指向下一条记录
10 while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
11 //取出数据
12 //(1)取出第0列字段的值(int类型的值)
13 int ID=sqlite3_column_int(stmt, 0);
14 //(2)取出第1列字段的值(text类型的值)
15 const unsigned char *name=sqlite3_column_text(stmt, 1);
16 //(3)取出第2列字段的值(int类型的值)
17 int age=sqlite3_column_int(stmt, 2);
18 // NSLog(@"%d %s %d",ID,name,age);
19 printf("%d %s %d\n",ID,name,age);
20 }
21 }else
22 {
23 NSLog(@"查询语句有问题");
24 }
25
26 }

  打印查看查询结果:

三、补充

  完整代码:

   YYViewController.m文件

  1 //
2 // YYViewController.m
3 // 02-SQLite的应用
4 //
5
6 #import "YYViewController.h"
7 #import <sqlite3.h>
8
9 @interface YYViewController ()
10 //db是数据库的句柄,就是数据库的象征,要对数据库进行增删改查,就得操作这个实例
11 @property(nonatomic,assign)sqlite3 *db;
12 - (IBAction)insert;
13 - (IBAction)delete;
14 - (IBAction)update;
15 - (IBAction)select;
16
17 @end
18
19 @implementation YYViewController
20
21 - (void)viewDidLoad
22 {
23 [super viewDidLoad];
24
25 // sqlite3 *db;
26
27 //获得数据库文件的路径
28 NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
29 NSString *fileName=[doc stringByAppendingPathComponent:@"students.sqlite"];
30 //将OC字符串转换为c语言的字符串
31 const char *cfileName=fileName.UTF8String;
32
33 //1.打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
34 int result = sqlite3_open(cfileName, &_db);
35 if (result==SQLITE_OK) { //打开成功
36 NSLog(@"成功打开数据库");
37
38 //2.创建表
39 const char *sql="CREATE TABLE t_students (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
40 char *errmsg=NULL;
41 result = sqlite3_exec(self.db, sql, NULL, NULL, &errmsg);
42 if (result==SQLITE_OK) {
43 NSLog(@"创表成功");
44 }else
45 {
46 // NSLog(@"创表失败----%s",errmsg);
47 printf("创表失败---%s----%s---%d",errmsg,__FILE__,__LINE__);
48 }
49 }else
50 {
51 NSLog(@"打开数据库失败");
52 }
53 }
54
55 - (IBAction)insert {
56 for (int i=0; i<20; i++) {
57 //1.拼接SQL语句
58 NSString *name=[NSString stringWithFormat:@"文晓--%d",arc4random_uniform(100)];
59 int age=arc4random_uniform(20)+10;
60 NSString *sql=[NSString stringWithFormat:@"INSERT INTO t_students (name,age) VALUES ('%@',%d);",name,age];
61
62 //2.执行SQL语句
63 char *errmsg=NULL;
64 sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &errmsg);
65 if (errmsg) {//如果有错误信息
66 NSLog(@"插入数据失败--%s",errmsg);
67 }else
68 {
69 NSLog(@"插入数据成功");
70 }
71 }
72 }
73
74 - (IBAction)delete {
75 }
76
77 - (IBAction)updata {
78 }
79
80 - (IBAction)select {
81 const char *sql="SELECT id,name,age FROM t_students WHERE age<20;";
82 sqlite3_stmt *stmt=NULL;
83
84 //进行查询前的准备工作
85 if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL)==SQLITE_OK) {//SQL语句没有问题
86 NSLog(@"查询语句没有问题");
87
88 //每调用一次sqlite3_step函数,stmt就会指向下一条记录
89 while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
90 //取出数据
91 //(1)取出第0列字段的值(int类型的值)
92 int ID=sqlite3_column_int(stmt, 0);
93 //(2)取出第1列字段的值(text类型的值)
94 const unsigned char *name=sqlite3_column_text(stmt, 1);
95 //(3)取出第2列字段的值(int类型的值)
96 int age=sqlite3_column_int(stmt, 2);
97 // NSLog(@"%d %s %d",ID,name,age);
98 printf("%d %s %d\n",ID,name,age);
99 }
100 }else
101 {
102 NSLog(@"查询语句有问题");
103 }
104
105 }
106 @end

SQLite模糊查询

一、示例

说明:本文简单示例了SQLite的模糊查询

1.新建一个继承自NSObject的模型

该类中的代码:

 1 //
2 // YYPerson.h
3 // 03-模糊查询
4 //
5 // Created by apple on 14-7-27.
6 // Copyright (c) 2014年 wendingding. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10
11 @interface YYPerson : NSObject
12 @property (nonatomic, assign) int ID;
13 @property (nonatomic, copy) NSString *name;
14 @property (nonatomic, assign) int age;
15
16 @end

2.新建一个工具类,用来管理模型

工具类中的代码设计如下:

YYPersonTool.h文件

 1 //
2 // YYPersonTool.h
3 // 03-模糊查询
4 //
5 // Created by apple on 14-7-27.
6 // Copyright (c) 2014年 wendingding. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10
11 @class YYPerson;
12 @interface YYPersonTool : NSObject
13 /**
14 * 保存一个联系人
15 */
16 + (void)save:( YYPerson*)person;
17
18 /**
19 * 查询所有的联系人
20 */
21 + (NSArray *)query;
22 + (NSArray *)queryWithCondition:(NSString *)condition;
23 @end

YYPersonTool.m文件

  1 //
2 // YYPersonTool.m
3 // 03-模糊查询
4 //
5 // Created by apple on 14-7-27.
6 // Copyright (c) 2014年 wendingding. All rights reserved.
7 //
8
9 #import "YYPersonTool.h"
10 #import "YYPerson.h"
11
12 #import <sqlite3.h>
13 @interface YYPersonTool ()
14 //@property(nonatomic,assign)sqlite3 *db;
15 @end
16 @implementation YYPersonTool
17
18 static sqlite3 *_db;
19 //首先需要有数据库
20 +(void)initialize
21 {
22 //获得数据库文件的路径
23 NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
24 NSString *fileName=[doc stringByAppendingPathComponent:@"person.sqlite"];
25 //将OC字符串转换为c语言的字符串
26 const char *cfileName=fileName.UTF8String;
27
28 //1.打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
29 int result = sqlite3_open(cfileName, &_db);
30 if (result==SQLITE_OK) { //打开成功
31 NSLog(@"成功打开数据库");
32
33 //2.创建表
34 const char *sql="CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
35
36 char *errmsg=NULL;
37 result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
38 if (result==SQLITE_OK) {
39 NSLog(@"创表成功");
40 }else
41 {
42 printf("创表失败---%s",errmsg);
43 }
44 }else
45 {
46 NSLog(@"打开数据库失败");
47 }
48
49 }
50 //保存一条数据
51 +(void)save:(YYPerson *)person
52 {
53 //1.拼接SQL语句
54
55 NSString *sql=[NSString stringWithFormat:@"INSERT INTO t_person (name,age) VALUES ('%@',%d);",person.name,person.age];
56
57 //2.执行SQL语句
58 char *errmsg=NULL;
59 sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
60 if (errmsg) {//如果有错误信息
61 NSLog(@"插入数据失败--%s",errmsg);
62 }else
63 {
64 NSLog(@"插入数据成功");
65 }
66
67 }
68
69 +(NSArray *)query
70 {
71 return [self queryWithCondition:@""];
72 }
73
74 //模糊查询
75 +(NSArray *)queryWithCondition:(NSString *)condition
76 {
77
78 //数组,用来存放所有查询到的联系人
79 NSMutableArray *persons=nil;
80 /*
81 [NSString stringWithFormat:@"SELECT id, name, age FROM t_person WHERE name like '%%%@%%' ORDER BY age ASC;", condition];
82 NSString *NSsql=[NSString stringWithFormat:@"SELECT id,name,age FROM t_person WHERE name=%@;",condition];
83 */
84 NSString *NSsql=[NSString stringWithFormat:@"SELECT id,name,age FROM t_person WHERE name like '%%%@%%' ORDER BY age ASC;",condition];
85 NSLog(@"%@",NSsql);
86 const char *sql=NSsql.UTF8String;
87
88 sqlite3_stmt *stmt=NULL;
89
90 //进行查询前的准备工作
91 if (sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL)==SQLITE_OK) {//SQL语句没有问题
92 NSLog(@"查询语句没有问题");
93
94 persons=[NSMutableArray array];
95
96 //每调用一次sqlite3_step函数,stmt就会指向下一条记录
97 while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
98
99 //取出数据
100 //(1)取出第0列字段的值(int类型的值)
101 int ID=sqlite3_column_int(stmt, 0);
102 //(2)取出第1列字段的值(text类型的值)
103 const unsigned char *name=sqlite3_column_text(stmt, 1);
104 //(3)取出第2列字段的值(int类型的值)
105 int age=sqlite3_column_int(stmt, 2);
106
107 YYPerson *p=[[YYPerson alloc]init];
108 p.ID=ID;
109 p.name=[NSString stringWithUTF8String:(const char *)name];
110 p.age=age;
111 // NSLog(@"%@",p.name);
112 [persons addObject:p];
113 // NSLog(@"haha%@",persons);
114 }
115 }else
116 {
117 NSLog(@"查询语句有问题");
118 }
119
120 //NSLog(@"haha%@",persons);
121 return persons;
122 }
123 @end

3.在storyboard中,删除原有的控制器,放一个导航控制器和UITableViewController控制器,并关联

在代码中,让主控制器直接继承自UITableViewController

代码设计如下:

YYViewController.m文件

 1 //
2 // YYViewController.m
3 // 03-模糊查询
4 //
5 // Created by apple on 14-7-27.
6 // Copyright (c) 2014年 wendingding. All rights reserved.
7 //
8
9 #import "YYViewController.h"
10 #import "YYPerson.h"
11 #import "YYPersonTool.h"
12
13 @interface YYViewController ()<UISearchBarDelegate>
14
15 //添加一个数组,用来保存person
16 @property(nonatomic,strong)NSArray *persons;
17 @end
18
19 @implementation YYViewController
20
21 #pragma mark-懒加载
22 -(NSArray *)persons
23 {
24 if (_persons==nil) {
25 _persons=[YYPersonTool query];
26 }
27 return _persons;
28 }
29
30 //1.在初始化方法中添加一个搜索框
31 - (void)viewDidLoad
32 {
33 [super viewDidLoad];
34
35 //设置搜索框
36 UISearchBar *search=[[UISearchBar alloc]init];
37 search.frame=CGRectMake(0, 0, 300, 44);
38 search.delegate=self;
39 self.navigationItem.titleView=search;
40 }
41
42 //2.设置tableView的数据
43 //设置有多少行数据
44 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
45 {
46 // return 10;
47 return self.persons.count;
48 }
49 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
50 {
51 //1.去缓存中取cll,若没有则自己创建并标记
52 static NSString *ID=@"ID";
53 UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
54 if (cell==nil) {
55 cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
56 }
57
58 //2.设置每个cell的数据
59 //先取出数据模型
60 YYPerson *person=self.persons[indexPath.row];
61 //设置这个cell的姓名(name)和年龄
62 cell.textLabel.text=person.name;
63 cell.detailTextLabel.text=[NSString stringWithFormat:@"年龄 %d",person.age];
64 //3.返回cell
65 return cell;
66 }
67
68 - (IBAction)add:(UIBarButtonItem *)sender {
69 // 初始化一些假数据
70 NSArray *names = @[@"西门抽血", @"西门抽筋", @"西门抽风", @"西门吹雪", @"东门抽血", @"东门抽筋", @"东门抽风", @"东门吹雪", @"北门抽血", @"北门抽筋", @"南门抽风", @"南门吹雪"];
71 for (int i = 0; i<20; i++) {
72 YYPerson *p = [[YYPerson alloc] init];
73 p.name = [NSString stringWithFormat:@"%@-%d", names[arc4random_uniform(names.count)], arc4random_uniform(100)];
74 p.age = arc4random_uniform(20) + 20;
75 [YYPersonTool save:p];
76 }
77 }
78
79 #pragma mark-搜索框的代理方法
80 -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
81 {
82 self.persons=[YYPersonTool queryWithCondition:searchText];
83 //刷新表格
84 [self.tableView reloadData];
85 [searchBar resignFirstResponder];
86 }
87
88 @end

实现效果:

     

二、简单说明

关于:  NSString *NSsql=[NSString stringWithFormat:@"SELECT id,name,age FROM t_person WHERE name like '%%%@%%' ORDER BY age ASC;",condition];
 
注意:name like ‘西门’,相当于是name = ‘西门’。
name like ‘%西%’,为模糊搜索,搜索字符串中间包含了’西’,左边可以为任意字符串,右边可以为任意字符串,的字符串。
但是在 stringWithFormat:中%是转义字符,两个%才表示一个%。
打印查看:

iOS-数据持久化-SQlite3的更多相关文章

  1. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  2. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...

  3. iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...

  4. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

  5. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  6. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  7. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  8. 转载 -- iOS数据持久化存储

    作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方 ...

  9. iOS 数据持久化(1):属性列表与对象归档

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  10. iOS: 数据持久化方案

    数据持久化方案(如果总结不到位,或者有误的地方,敬请斧正) 一.功能: 主要是将数据持久化到本地,减少对网络请求的次数,既节省了用户的流量,也增强了App的体验效果. 二.种类:  plist存储:使 ...

随机推荐

  1. 猿团YTFCloud生态系统,全面服务创业者

    9月15日,YTFCloud已正式开启了内测. 创业者翘首以待的YTFCloud,虽然让部分创业者感受到了它的神奇,但对于更多暂时无法尝试的创业者来说,它依然有一层神秘的面纱. 今天小编就来带你近距离 ...

  2. 「2014-2-23」Note on Preliminary Introduction to Distributed System

    今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...

  3. ExtJs 3.0 动态生成 CheckBox

    在开发过程中,往往需要利用数据动态生成Checkbox.如权限节点.考试答案,调查选项等等.在Extjs中,有两种方法来获取后台数据,一是Ext.Ajax()方法,第二种是利用 Store,store ...

  4. linux 重新编译低版本gcc

    编程实践中,可能会遇到需要较低版本gcc以兼容相应程序的需求,这时就需要我们将系统中默认的gcc版本较低,或者重新编译生成.(UBUNTU12.04下实现gcc4.2.3) 方法1: 对于UBUNTU ...

  5. 创建Xml文件与修改Xml文件

    /// <summary> /// 修改节点 /// </summary> /// <param name="user">UserSafe 实体 ...

  6. How to create Web Deployment Package and install the package

    Create Web Deployment Package To configure settings on the Connection tab In the Publish method drop ...

  7. 读书笔记之深入理解Nginx:模块开发与结构解析

    前言 我现在看书一般都是看自己能看懂的地方,看不懂就先略过,回头再看,下面就写自己看得懂的地方吧,并且把自己的理解也放到里面. 第一部分 Nginx能帮我们做什么 编译安装各个命令解释 configu ...

  8. 【转】linux shell实现随机数多种方法(date,random,uuid)

    在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签.呵呵,非常简单就可以实现.那么在做程序设计,真的要通过自己程序设计出随机数那还真的不简单了.现在很多都是操作系统内核会提供相应的api,这 ...

  9. Hibernate快照

    l当session加载了某个对象后,会为该对象的值类型的属性复制一份快照.当刷出缓存时,通过比较对象的当前属性和快照,来判断对象的哪些属性发生了变化. 代码如下: /** * 修改学生信息 */ @T ...

  10. (一)读取PCD文件

    下面是一个简单的读取PCD文件并显示的代码: #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/p ...