数据库的基本应用

数据库的基本应用:

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

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

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

你可能感兴趣的:(数据库的基本应用)