数据库的基本应用

数据库的基本应用:

主键 : 唯一 ,不能重复 ,不能为空 , 可以同时当外键

外键 : 将两个表关联起来 , 不能重复

1.数据插入命令 : insert(增加)

NSERT INTO `Demo_Table`(`demo_id`, `demo_name`) VALUES (1,'xinxin');

2.数据更新命令 : update( 修改)

UPDATE `Demo_Table` SET `demo_name` = 'longlong' WHERE `demo_id`=1;

如果要修改两个或多个值中间用  逗号  隔开.

3.数据删除命令 :  delete(删除)

DELETE FROM `Demo_Table` WHERE `demo_id`=1;

4.数据查命令 : select (查询)

SELECT * FROM `Demo_Table` WHERE `demo_id`=1;

二、表操作,操作之前应连接某个数据库

1、建表

命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);

mysql> create table MyClass(

> id int(4) not null primary key auto_increment,

> name char(20) not null,

> sex int(4) not null default ''0'',

> degree double(16,2));

2、获取表结构

命令: desc 表名,或者show columns from 表名

mysql>DESCRIBE MyClass

mysql> desc MyClass;

mysql> show columns from MyClass;

3、删除表

命令:drop table <表名>

例如:删除表名为 MyClass 的表 mysql> drop table MyClass;

4、插入数据

命令:insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]

例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5.

mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);

5、查询表中的数据

1)、查询所有行

命令: select <字段1,字段2,...> from < 表名 > where < 表达式 >

例如:查看表 MyClass 中所有数据 mysql> select * from MyClass;

2)、查询前几行数据

例如:查看表 MyClass 中前2行数据

mysql> select * from MyClass order by id limit 0,2;

6、删除表中数据

命令:delete from 表名 where 表达式

例如:删除表 MyClass中编号为1 的记录

mysql> delete from MyClass where id=1;

7、修改表中数据:update 表名 set 字段=新值,… where 条件

mysql> update MyClass set name=''Mary'' where id=1;

8、在表中增加字段:

命令:alter table 表名 add 字段 类型 其他;

例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0

mysql> alter table MyClass add passtest int(4) default ''0''

9、更改表名:

命令:rename table 原表名 to 新表名;

例如:在表MyClass名字更改为YouClass

mysql> rename table MyClass to YouClass;

更新字段内容

update 表名 set 字段名 = 新内容

update 表名 set 字段名 = replace(字段名,''旧内容'',''新内容'');

#import "StudentManager.h"

#import

#import 

@class Student;

@interface StudentManager : NSObject

@property(nonatomic , retain) NSString *tableName;

+ (NSString *)documentsWithName:(NSString *)name;

+ (StudentManager *)shareManager;

- (void)insertWithStudent:(Student *)stu;

- (void)deleteWithId:(NSInteger)stuId;

- (void)updateWithStudent:(Student *)stu;

- (void)openWithTable:(NSString *)tableName;

- (void)createTable:(NSString *)tableName;

- (void)close;

@end

#import "Student.h"

//单例全局变量,默认为空

static StudentManager *manager = nil;

//定义数据库指针对象

static sqlite3 *dbPoint = nil;

@implementation StudentManager

//创建一个单例

+ (StudentManager *)shareManager

{

//声明一个GCD全局变量

static dispatch_once_t onceToken;

//块语法中的内容只执行一次,线程安全,也叫单利安全

dispatch_once(&onceToken, ^{

// 保证内存唯一

if (manager == nil) {

manager = [[StudentManager alloc] init];

}

});

return manager;

}

//    下面全都是单利

//    [UIDevice currentDevice];

//    [UIApplication sharedApplication];

//    [NSUserDefaults standardUserDefaults];

//    [NSNotificationCenter defaultCenter];  //消息中心

//创建数据库文件并打开

- (void)openWithTable:(NSString *)tableName

{

self.tableName = tableName;

NSString *path = [StudentManager documentsWithName:@"Student.sqlite"];

NSLog(@"pat == %@",path);

//打开数据库,并获得数据库对象

//sqlite3_open 如果没有这个就创建一个,如果有就打开

int result = sqlite3_open([path UTF8String], &dbPoint);

if (result != SQLITE_OK) {

UIAlertView  *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"数据库打开失败" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alter show];

[alter release];

}else{

NSLog(@"打开成功");

}

[self createTable:tableName];

}

//创建表

- (void)createTable:(NSString *)tableName

{

NSString *sqlStr = [NSString stringWithFormat:@"create table %@ (stuid int , stuname text,stuscore float)" , tableName];

//sqlite3_exec执行当前的sql语句

int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, NULL);

if (result == SQLITE_OK) {

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"表创建成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alert show];

[alert release];

}else{

NSLog(@"增加失败");

}

}

//关闭数据库

- (void)close

{

sqlite3_close(dbPoint);

NSLog(@"关闭成功");

}

//增加信息

- (void)insertWithStudent:(Student *)stu

{

NSString *sqlStr = [NSString stringWithFormat:@"insert into %@ values(%d , '%@', %g)",_tableName , stu.stuId, stu.stuName , stu.stuScore];

int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, NULL);

if (result == SQLITE_OK) {

UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"增加成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alter show];

[alter release];

} else{

NSLog(@"增加失败");

}

}

//删除信息

- (void)deleteWithId:(NSInteger)stuId

{

NSString *sqlStr = [NSString stringWithFormat:@"delete from '%@' where stuId = %d",_tableName , stuId];

int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, NULL);

if (result == SQLITE_OK) {

UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"删除成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alter show];

[alter release];

}else {

NSLog(@"删除失败");

}

}

//修改信息

- (void)updateWithStudent:(Student *)stu

{

NSString *sqlStr = [NSString stringWithFormat:@"update '%@' set stuName = '%@' , stuScore = %g where stuID = %d",_tableName , stu.stuName ,stu.stuScore,stu.stuId];

//声明一个结果

int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, NULL);

if (result == SQLITE_OK) {

UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"修改成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alter show];

[alter release];

}else {

NSLog(@"修改失败");

}

}

//查询信息

- (NSArray *)selectStuWithScore:(CGFloat)score

{

NSString *sqlStr = [NSString stringWithFormat:@"select * from '%@' where stuscore >= %g ",self.tableName ,score];

//数据库对象的替身

sqlite3_stmt *stmt = nil;

//最后一个参数代表前面写的哪句话是不用的,没用就用null

int result = sqlite3_prepare_v2(dbPoint, [sqlStr UTF8String], -1, &stmt, NULL);

NSMutableArray *arr = [NSMutableArray array];

if (result == SQLITE_OK) {

//循环判断 查找是否有下一行数据,并且判断,如果有了,取出放到数组中

while (sqlite3_step(stmt) == SQLITE_ROW) {

int stuid = sqlite3_column_int(stmt, 0);

const unsigned char *stuname = sqlite3_column_text(stmt, 1);

float stuscore = sqlite3_column_double(stmt, 2);

Student *stu = [Student studentWithName:[NSString stringWithUTF8String:(const char*)stuname ]stuId:stuid stuScore:stuscore];

[arr addObject:stu];

}

}

//将替身清空

sqlite3_finalize(stmt);

return arr;

}

//返回数据库文件路径

+ (NSString *)documentsWithName:(NSString *)name

{

NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString * path = [NSString stringWithFormat:@"%@/%@" , doc , name];

return path;

}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容