當前位置:首頁 » 數據倉庫 » ios刪除sqlite資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ios刪除sqlite資料庫

發布時間: 2022-11-07 13:23:49

⑴ iOS sqlite 誰知道怎麼操作

sqlite3 /private/var/mobile/Library/com.apple.itunesstored/kvs.sqlitedb "delete from kvs_value where key='AppleID';"

⑵ ios sqlite3修改語句怎麼寫

sqlite資料庫中數據類型存在sqlite_master表中
select sql from sqlite_master where tb_name='tbname'
把這條sql語句改了,表結構就改了。
sqlite的alter table限制很多,所以一般直接把原表改名。
復制一個表名與原表一樣的,再把改名後的那個原表刪了,以下sql語句可以用。
新表改完欄位類型如果不兼容原表,新表中的該欄位數據讀不出。
所以要改類型可以不用聲明欄位類型
begin
alter table zb RENAME TO tempxxx_1
create table zb(rkdh char(15) ,gbdh char(15) ,cph nchar(9) )
INSERT INTO zb(rkdh,gbdh,cph,) select rkdh,gbdh,cph FROM tempxxx_1
drop table tempXXX_1
commit

⑶ ios 開發 ios系統中sqlite資料庫可以直接操作么

不可以吧!!!!

⑷ 在ios開發中coredata與sqlite資料庫操作有什麼優勢

轉載 sqlite資料庫操作的基本流程是, 創建資料庫, 再通過定義一些欄位來定義表格結構, 可以利用sql語句向表格中插入記錄, 刪除記錄, 修改記錄, 表格之間也可以建立聯系。

這個過程出現了, 表格的結構(schema), 所有表格的結構和相互聯系構成整個資料庫的模型, 資料庫存放的方式(可以是文件或者在內存), 資料庫操作, sql語句(主要是查詢), 表格裡面的記錄。

下面將上面說的文字, 跟CoreData的類作個對應:

表格結構 --> NSEntityDescription
資料庫中所有表格和他們的聯系 -->NSManagedObjectModel
資料庫存放方式 --> NSPersistentStoreCoordinator
資料庫操作 --> NSManagedObjectContext
查詢語句 --> NSFetchRequest
表格的記錄 --> NSManagedObject

可能上面的對應關系並非十分嚴格, 但確實可以幫助理解.

下面再看看CoreData的類
NSEntityDescription
NSManagedObjectModel

NSEntityDescription用來定義表格結構, 所以你就可以理解NSManagedObjectModel中的setEntities:(NSArray *)entities函數大概有什麼用了 . 通常, 定義model, 是用文件CoreData.xcda*****odel, 可以圖形化的操作. 這類似用nib來創建界面.

建個工程, 使用coredata, 模擬器運行之後, 程序對應的document目錄出現一個CoreData.sqlite. 可以利用sqlite3命令來查看裡面的表格結構
用命令行sqlite3 CoreData.sqlite 進入
>.tables
ZEVENT Z_METADATA Z_PRIMARYKEY
可以看到有表格ZEVENT, 對應的CoreData.xcda*****odel文件有名字叫Event的Entity

>.schema ZEVENT
CREATE TABLE ZEVENT ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZTIMES*****P TIMES*****P );
對應的Event中有屬性timeS*****p, 可以看到, 相應的ZEVENT表格中有欄位TIMES*****P

> select * from ZEVENT
1|1|1|306295807.974966
2|1|1|306295810.981875
3|1|1|306295811.982537
這表格有三個記錄, 可以用來初始化三個NSManagedObject, 修改了NSManagedObject, save之後也修改了表格記錄

你可以在CoreData.xcda*****odel添加新的entity, 之後用sqlit3命令來查看資料庫的變化

NSPersistentStoreCoordinator
這個類的對象通常用NSManagedObjectModel的對象來初始化, 這個類抽象出不同的存放方式, 最經常用的是NSSQLiteStoreType.

NSManagedObjectContext
這個類的對象又用NSPersistentStoreCoordinator的對象來初始化, 它裡面有些方法來添加, 刪除NSManagedObject

NSFetchRequest
通常用NSEntityDescription來構造查詢, 也就指定查詢那個表格, 另外可以指定排序.

在CoreData的設計中, 下一層有相應的屬性指向上一層, 所以NSManagedObject有屬性得到NSEntityDescription, NSEntityDescription有屬性得到NSManagedObjectModel.

至於類
NSFetchedResultsController, 只是又封了一下, 和NSFetchRequest合起來使用, 方便取數據, 另外和NSManagedObjectContext關聯, 當資料庫發生變化的時候收到通知.

這文章只初步梳理了一下CoreData各類的關系, 各類的方法還需要一一研究. 文章最開始說CoreData是對sqlite資料庫的一個封裝, 不是嚴格的, CoreData不一定用sqlit來實現, 但他們之間確實有種對應關系。

⑸ ios 從哪些方面去做sqlite 資料庫的優化

先來看看.h文件

#import <Foundation/Foundation.h>
#import <sqlite3.h>

#define kFilename @"testdb.db"
@class sqlTestList;
@interface sqlService : NSObject {
sqlite3 *_database;

}

@property (nonatomic) sqlite3 *_database;
-(BOOL) createTestList:(sqlite3 *)db;//創建資料庫
-(BOOL) insertTestList:(sqlTestList *)insertList;//插入數據
-(BOOL) updateTestList:(sqlTestList *)updateList;//更新數據
-(NSMutableArray*)getTestList;//獲取全部數據
- (BOOL) deleteTestList:(sqlTestList *)deletList;//刪除數據:
- (NSMutableArray*)searchTestList:(NSString*)searchString;//查詢資料庫,searchID為要查詢數據的ID,返回數據為查詢到的數據
@end

@interface sqlTestList : NSObject//重新定義了一個類,專門用於存儲數據
{
int sqlID;
NSString *sqlText;
NSString *sqlname;
}

@property (nonatomic) int sqlID;
@property (nonatomic, retain) NSString *sqlText;
@property (nonatomic, retain) NSString *sqlname;

@end

再來看看.m文件

//
// sqlService.m
// SQLite3Test
//
// Created by fengxiao on 11-11-28.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "sqlService.h"

@implementation sqlService

@synthesize _database;

- (id)init
{
return self;
}

- (void)dealloc
{
[super dealloc];
}

//獲取document目錄並返回資料庫目錄
- (NSString *)dataFilePath{

NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"=======%@",documentsDirectory);
return [documentsDirectory :@"data.db"];//這里很神奇,可以定義成任何類型的文件,也可以不定義成.db文件,任何格式都行,定義成.sb文件都行,達到了很好的數據隱秘性

}

//創建,打開資料庫
- (BOOL)openDB {

//獲取資料庫路徑
NSString *path = [self dataFilePath];
//文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
//判斷資料庫是否存在
BOOL find = [fileManager fileExistsAtPath:path];

//如果資料庫存在,則用sqlite3_open直接打開(不要擔心,如果資料庫不存在sqlite3_open會自動創建)
if (find) {

NSLog(@"Database file have already existed.");

//打開資料庫,這里的[path UTF8String]是將NSString轉換為C字元串,因為SQLite3是採用可移植的C(而不是
//Objective-C)編寫的,它不知道什麼是NSString.
if(sqlite3_open([path UTF8String], &_database) != SQLITE_OK) {

//如果打開資料庫失敗則關閉資料庫
sqlite3_close(self._database);
NSLog(@"Error: open database file.");
return NO;
}

//創建一個新表
[self createTestList:self._database];

return YES;
}
//如果發現資料庫不存在則利用sqlite3_open創建資料庫(上面已經提到過),與上面相同,路徑要轉換為C字元串
if(sqlite3_open([path UTF8String], &_database) == SQLITE_OK) {

//創建一個新表
[self createTestList:self._database];
return YES;
} else {
//如果創建並打開資料庫失敗則關閉資料庫
sqlite3_close(self._database);
NSLog(@"Error: open database file.");
return NO;
}
return NO;
}

//創建表
- (BOOL) createTestList:(sqlite3*)db {

//這句是大家熟悉的SQL語句
char *sql = "create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, testID int,testValue text,testName text)";// testID是列名,int 是數據類型,testValue是列名,text是數據類型,是字元串類型

sqlite3_stmt *statement;
//sqlite3_prepare_v2 介面把一條SQL語句解析到statement結構里去. 使用該介面訪問資料庫是當前比較好的的一種方法
NSInteger sqlReturn = sqlite3_prepare_v2(_database, sql, -1, &statement, nil);
//第一個參數跟前面一樣,是個sqlite3 * 類型變數,
//第二個參數是一個 sql 語句。
//第三個參數我寫的是-1,這個參數含義是前面 sql 語句的長度。如果小於0,sqlite會自動計算它的長度(把sql語句當成以\0結尾的字元串)。
//第四個參數是sqlite3_stmt 的指針的指針。解析以後的sql語句就放在這個結構里。
//第五個參數是錯誤信息提示,一般不用,為nil就可以了。
//如果這個函數執行成功(返回值是 SQLITE_OK 且 statement 不為NULL ),那麼下面就可以開始插入二進制數據。

//如果SQL語句解析出錯的話程序返回
if(sqlReturn != SQLITE_OK) {
NSLog(@"Error: failed to prepare statement:create test table");
return NO;
}

//執行SQL語句
int success = sqlite3_step(statement);
//釋放sqlite3_stmt
sqlite3_finalize(statement);

//執行SQL語句失敗
if ( success != SQLITE_DONE) {
NSLog(@"Error: failed to dehydrate:create table test");
return NO;
}
NSLog(@"Create table 'testTable' successed.");
return YES;
}

//插入數據
-(BOOL) insertTestList:(sqlTestList *)insertList {

//先判斷資料庫是否打開
if ([self openDB]) {

sqlite3_stmt *statement;

//這個 sql 語句特別之處在於 values 裡面有個? 號。在sqlite3_prepare函數里,?號表示一個未定的值,它的值等下才插入。
static char *sql = "INSERT INTO testTable(testID, testValue,testName) VALUES(?, ?, ?)";

int success2 = sqlite3_prepare_v2(_database, sql, -1, &statement, NULL);
if (success2 != SQLITE_OK) {
NSLog(@"Error: failed to insert:testTable");
sqlite3_close(_database);
return NO;
}

//這里的數字1,2,3代表上面的第幾個問號,這里將三個值綁定到三個綁定變數
sqlite3_bind_int(statement, 1, insertList.sqlID);
sqlite3_bind_text(statement, 2, [insertList.sqlText UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 3, [insertList.sqlname UTF8String], -1, SQLITE_TRANSIENT);

//執行插入語句
success2 = sqlite3_step(statement);
//釋放statement
sqlite3_finalize(statement);

//如果插入失敗
if (success2 == SQLITE_ERROR) {
NSLog(@"Error: failed to insert into the database with message.");
//關閉資料庫
sqlite3_close(_database);
return NO;
}
//關閉資料庫
sqlite3_close(_database);
return YES;
}
return NO;
}

//獲取數據
- (NSMutableArray*)getTestList{

NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];
//判斷資料庫是否打開
if ([self openDB]) {

sqlite3_stmt *statement = nil;
//sql語句
char *sql = "SELECT testID, testValue ,testName FROM testTable";//從testTable這個表中獲取 testID, testValue ,testName,若獲取全部的話可以用*代替testID, testValue ,testName。

if (sqlite3_prepare_v2(_database, sql, -1, &statement, NULL) != SQLITE_OK) {
NSLog(@"Error: failed to prepare statement with message:get testValue.");
return NO;
}
else {
//查詢結果集中一條一條的遍歷所有的記錄,這里的數字對應的是列值,注意這里的列值,跟上面sqlite3_bind_text綁定的列值不一樣!一定要分開,不然會crash,只有這一處的列號不同,注意!
while (sqlite3_step(statement) == SQLITE_ROW) {
sqlTestList* sqlList = [[sqlTestList alloc] init] ;
sqlList.sqlID = sqlite3_column_int(statement,0);
char* strText = (char*)sqlite3_column_text(statement, 1);
sqlList.sqlText = [NSString stringWithUTF8String:strText];
char *strName = (char*)sqlite3_column_text(statement, 2);
sqlList.sqlname = [NSString stringWithUTF8String:strName];
[array addObject:sqlList];
[sqlList release];
}
}
sqlite3_finalize(statement);
sqlite3_close(_database);
}

return [array retain];//定義了自動釋放的NSArray,這樣不是個好辦法,會造成內存泄露,建議大家定義局部的數組,再賦給屬性變數。
}

//更新數據
-(BOOL) updateTestList:(sqlTestList *)updateList{

if ([self openDB]) {
sqlite3_stmt *statement;//這相當一個容器,放轉化OK的sql語句
//組織SQL語句
char *sql = "update testTable set testValue = ? and testName = ? WHERE testID = ?";

//將SQL語句放入sqlite3_stmt中
int success = sqlite3_prepare_v2(_database, sql, -1, &statement, NULL);
if (success != SQLITE_OK) {
NSLog(@"Error: failed to update:testTable");
sqlite3_close(_database);
return NO;
}

附上出處鏈接:http://www.cnblogs.com/xiaozhu/archive/2012/12/07/2808170.html

⑹ ios中sqlite怎麼存儲數據的

SQLite3是嵌入在iOS中的關系型資料庫,對於存儲大規模的數據很有效。SQLite3使得不必將每個對象都加到內存中。
基本操作:
(1)打開或者創建資料庫
sqlite3 *database; int result = sqlite3_open("/path/databaseFile", &database);

如果/path/databaseFile不存在,則創建它,否則打開它。如果result的值是SQLITE_OK,則表明我們的操作成功。
注意上述語句中資料庫文件的地址字元串前面沒有@字元,它是一個C字元串。將NSString字元串轉成C字元串的方法是:
const char *cString = [nsString UTF8String];

(2)關閉資料庫
sqlite3_close(database);

(3)創建一個表格
char *errorMsg; const char *createSQL = "CREATE TABLE IF NOT EXISTS PEOPLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_DATA TEXT)"; int result = sqlite3_exec(database, createSQL, NULL, NULL, &errorMsg);

執行之後,如果result的值是SQLITE_OK,則表明執行成功;否則,錯誤信息存儲在errorMsg中。
sqlite3_exec這個方法可以執行那些沒有返回結果的操作,例如創建、插入、刪除等。
(4)查詢操作
NSString *query = @"SELECT ID, FIELD_DATA FROM FIELDS ORDER BY ROW"; sqlite3_stmt *statement; int result = sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil);

如果result的值是SQLITE_OK,則表明准備好statement,接下來執行查詢:
while (sqlite3_step(statement) == SQLITE_ROW) { int rowNum = sqlite3_column_int(statement, 0); char *rowData = (char *)sqlite3_column_text(statement, 1); NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData]; // Do something with the data here } sqlite3_finalize(statement);

使用過其他資料庫的話應該很好理解這段語句,這個就是依次將每行的數據存在statement中,然後根據每行的欄位取出數據。
(5)使用約束變數
實際操作時經常使用叫做約束變數的東西來構造SQL字元串,從而進行插入、查詢或者刪除等。
例如,要執行帶兩個約束變數的插入操作,第一個變數是int類型,第二個是C字元串:
char *sql = "insert into oneTable values (?, ?);"; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(database, sql, -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_int(stmt, 1, 235); sqlite3_bind_text(stmt, 2, "valueString", -1, NULL); } if (sqlite3_step(stmt) != SQLITE_DONE) NSLog(@"Something is Wrong!"); sqlite3_finalize(stmt);

這里,sqlite3_bind_int(stmt, 1, 235);有三個參數:
第一個是sqlite3_stmt類型的變數,在之前的sqlite3_prepare_v2中使用的。
第二個是所約束變數的標簽index。
第三個參數是要加的值。
有一些函數多出兩個變數,例如
sqlite3_bind_text(stmt, 2, "valueString", -1, NULL);

這句,第四個參數代表第三個參數中需要傳遞的長度。對於C字元串來說,-1表示傳遞全部字元串。
第五個參數是一個回調函數,比如執行後做內存清除工作。

⑺ ios中怎麼操作sqlite3資料庫操作

用 FMDB 這個開源庫 ! 對sqlite3做了封裝,用起來很方便 !

⑻ ios sqlite怎麼刪除不了裡面的數據

看一看你的刪除語句寫的是否正確