當前位置:首頁 » 密碼管理 » ios訪問資料庫

ios訪問資料庫

發布時間: 2022-08-24 01:05:54

❶ ios leveldb怎麼打開資料庫

下文例子中演示了如何插入、獲取、刪除一條記錄
LevelDB 簡介
一、LevelDB入門
LevelDB是Google開源的持久化KV單機資料庫,具有很高的隨機寫,順序讀/寫性能,但是隨機讀的性能很一般,也就是說,LevelDB很適合應用在查詢較少,而寫很多的場景。LevelDB應用了LSM (Log Structured Merge) 策略,lsm_tree對索引變更進行延遲及批量處理,並通過一種類似於歸並排序的方式高效地將更新遷移到磁碟,降低索引插入開銷,關於LSM,本文在後面也會簡單提及。
根據LevelDB官方網站的描述,LevelDB的特點和限制如下:
特點:
1、key和value都是任意長度的位元組數組;
2、entry(即一條K-V記錄)默認是按照key的字典順序存儲的,當然開發者也可以重載這個排序函數;
3、提供的基本操作介面:Put()、Delete()、Get()、Batch();
4、支持批量操作以原子操作進行;
5、可以創建數據全景的snapshot(快照),並允許在快照中查找數據;
6、可以通過前向(或後向)迭代器遍歷數據(迭代器會隱含的創建一個snapshot);
7、自動使用Snappy壓縮數據;
8、可移植性;

限制:
1、非關系型數據模型(Nosql),不支持sql語句,也不支持索引;
2、一次只允許一個進程訪問一個特定的資料庫;
3、沒有內置的C/S架構,但開發者可以使用LevelDB庫自己封裝一個server;
LevelDB本身只是一個lib庫,在源碼目錄make編譯即可,然後在我們的應用程序裡面可以直接include leveldb/include/db.h頭文件,該頭文件有幾個基本的資料庫操作介面,下面是一個測試例子:

#include <iostream>
#include <string>
#include <assert.h>
#include "leveldb/db.h"

using namespace std;

int main(void)
{

leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;

// open
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());

string key = "name";
string value = "chenqi";

// write
status = db->Put(leveldb::WriteOptions(), key, value);
assert(status.ok());

// read
status = db->Get(leveldb::ReadOptions(), key, &value);
assert(status.ok());

cout<<value<<endl;

// delete
status = db->Delete(leveldb::WriteOptions(), key);
assert(status.ok());

status = db->Get(leveldb::ReadOptions(),key, &value);
if(!status.ok()) {
cerr<<key<<" "<<status.ToString()<<endl;
} else {
cout<<key<<"==="<<value<<endl;
}

// close
delete db;

return 0;
}

上面的例子演示了如何插入、獲取、刪除一條記錄,編譯代碼:

g++ -o test test.cpp libleveldb.a -lpthread -Iinclude

執行./test後,會在/tmp下面生成一個目錄testdb,裡麵包含若干文件:
------------------------------------------------------------
LevelDB是google開源的一個key-value存儲引擎庫,類似於開源的Lucene索引庫一樣。其他的軟體開發者可以利用該庫做二次開發,來滿足定製需求。LevelDB採用日誌式的寫方式來提高寫性能,但是犧牲了部分讀性能。為了彌補犧牲了的讀性能,一些人提議使用SSD作為存儲介質。
對於本地化的Key-value存儲引擎來說,簡單的使用一般都分成三個基本的步驟:(1)打開一個資料庫實例;(2)對這個資料庫實例進行插入,修改和查詢操作;(3)最後在使用完成之後,關閉該資料庫。下面將詳細討論該三個步驟:
一、打開一個資料庫實例
一個leveldb資料庫有一個對應一個文件系統目錄的名字。該資料庫的所有內容都存儲在這個目錄下。下面的代碼描述了怎樣打開一個資料庫或者建立一個新的資料庫。

#include <assert.h>
#include "leveldb/db.h"

leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());

如果打開已存在資料庫的時候,需要拋出錯誤。將以下代碼插在leveldb::DB::Open方法前面:
options.error_if_exists = true;

二、對資料庫的簡單讀、寫操作
LevelDB提供了Put,Delete和Get三個方法對資料庫進行修改和查詢。例如,下面的代碼片段描述了怎樣將key1對應的value值,移到key2對應的值。

std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if(s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
if(s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);

三、關閉資料庫
在對資料庫進行了一系列的操作之後,需要對資料庫進行關閉。該操作比較簡單:

... open the db as described above...
... do something with db ...
delete db;

上面對levelDB的簡單使用做了基本的介紹,接下來就是如何自己寫一個完成並且能運行的例子。
1、下載源碼 git clone https://code.google.com/p/leveldb/
2、編譯源碼 cd leveldb && make all
3、編寫test.cpp

#include <assert.h>
#include <string.h>
#include <leveldb/db.h>
#include <iostream>

int main(){
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());

//write key1,value1
std::string key="key";
std::string value = "value";

status = db->Put(leveldb::WriteOptions(), key,value);
assert(status.ok());

status = db->Get(leveldb::ReadOptions(), key, &value);
assert(status.ok());
std::cout<<value<<std::endl;
std::string key2 = "key2";

//move the value under key to key2

status = db->Put(leveldb::WriteOptions(),key2,value);
assert(status.ok());
status = db->Delete(leveldb::WriteOptions(), key);

assert(status.ok());

status = db->Get(leveldb::ReadOptions(),key2, &value);

assert(status.ok());
std::cout<<key2<<"==="<<value<<std::endl;

status = db->Get(leveldb::ReadOptions(),key, &value);

if(!status.ok()) std::cerr<<key<<" "<<status.ToString()<<std::endl;
else std::cout<<key<<"==="<<value<<std::endl;

delete db;
return 0;
}

4、編譯鏈接 g++ -o test test.cpp ../leveldb/libleveldb.a -lpthread -I../leveldb/include
注意libleveldb.a 和leveldb include的路徑。

5、運行結果./test:

value
key2===value
key NotFound:

❷ ios 怎麼打開sqlite資料庫

ITJOB題庫中也有這道題,大概過程是這樣。新建Empty Appliation,添加一個HomeViewController,和一個組件libsqlite3.dylib,來支持對sqlite3的連接,關閉,增刪改查等操作。
1. HomeViewController.h代碼:
#import <UIKit/UIKit.h>
#import "sqlite3.h"
@interface HomeViewController : UIViewController{
sqlite3 *db; //聲明一個sqlite3資料庫
}
- (NSString *)filePath;//資料庫文件的路徑。一般在沙箱的Documents里邊操作
@end

2. HomeViewController.m代碼:
#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
//該方法用於返回資料庫在Documents文件夾中的全路徑信息
- (NSString *)filePath{
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir :@"Contacts.sqlite"];
}
//打開資料庫的方法
- (void)openDB{
if (sqlite3_open([[self filePath] UTF8String], &db) != SQLITE_OK) {
sqlite3_close(db);
NSAssert(0, @"資料庫打開失敗。");
}
}
- (void)getAllContacts{
NSString *sql = @"SELECT * FROM members";
sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {

char *name = (char *)sqlite3_column_text(statement, 0);
NSString *nameStr = [[NSString alloc] initWithUTF8String:name];

char *email = (char *)sqlite3_column_text(statement, 1);
NSString *emailStr = [[NSString alloc] initWithUTF8String:email];

char *birthday = (char *)sqlite3_column_text(statement, 2);
NSString *birthdayStr = [[NSString alloc] initWithUTF8String:birthday];

NSString *info = [[NSString alloc] initWithFormat:@"%@ - %@ - %@",
nameStr, emailStr, birthdayStr];

NSLog(info);

[nameStr release];
[emailStr release];
[birthdayStr release];
[info release];
}
sqlite3_finalize(statement);
}
}

❸ ios開發是如何訪問資料庫的

第一,我不是高手,第二,我可以分享下我的心得。一般的數據量很小的項目,沒必要使用資料庫,如果只是保存寫用戶信息,大可以用其他的方法,用keychain或者nsuserdefault或者其他的都可以。任何一個項目都需要保存一個使用狀態,不能每次打開項目的時候都和第一次運行一樣,完全新,要給人以使用過的感覺就要存儲一些歷史數據。如果怕影響用戶體驗的話,可以多開線程在後台去對數據操作(數據量大的情況下),記得對線程要回收。如果你對保存數據比較迷茫的話,你可以google一下ios的四種數據持久化,對於sqlite和coredata,我個人認為只是兩種不同的存儲方法,一種是小型輕量級sqlite資料庫,所有移動設備經常用到的,還有一種是蘋果針對ios操作系統開發的coredata數據存儲,具體孰勝孰略還有待你自己去了解,一般如果我的資料庫要非常多的表格互相關聯最後查詢一條結果那麼我會採用sqlite,如果存儲一些有規律的數據那麼我會採用coredata,沒有哪個更好的說法,只能說這兩種都各有千秋,而我聽前輩們說,coredata只是蘋果對sqlite的又一次封裝而已,方便操作但也局限操作

❹ 請問iOS怎麼連接網上的MySQL資料庫

可以使用MySQL推出的MySQLConnector/Net組件,該組件是MySQL為ADO.NET訪問MySQL資料庫設計的.NET專用訪問組件,完成該組件後,需要在項目中引用這個組件,之後在程序中引用命名空間MySql.Data.MySqlClient,即可開始進行連接MySQL資料庫的操作了,示例如下:
protected voidMySqlCon()
{
//資料庫連接字元串跟連接SQLSERVER沒有區別
string constr = "server=localhost;UserId=root;password=root;Database=test";
//下面使用MySql Connector/net提供的專用對象
MySqlConnection mycon = new MySqlConnection(constr);
mycon.Open();
MySqlCommandmycmd = new MySqlCommand("select * from users", mycon);
MySqlDataReader myreader = mycmd.ExecuteReader();
while (myreader.Read())
{
if (myreader.HasRows)
{
MessageBox.Show(myreader.GetString("email") );
}
}
myreader.Close();
mycon.Close();

❺ iOS 訪問oracle資料庫

按道理 開發軟體的環境都有很多可能用資料庫驅動的 比如c#連oracle 就有很多可用 微軟的oledb 有了驅動後 不用安裝oracle 客戶端 直接配置連接字元串 就可以實現訪問

❻ iOS 開發中,可以實現app直接連接伺服器上的mysql資料庫直接取數據么

理論上是可以直接讀取資料庫的,相當於遠程連接著數據。簡單說明一下,就是用客戶端組件,設置資料庫地址、埠、用戶、密碼,然後直接select update,把命令提交到資料庫。
但問題在於資料庫的信息,用戶密碼存儲在客戶端,容易給反編譯出來(難度這個我不清楚,你做ios開發可能清楚點)。而當發生安全問題的時候,要改密碼或者資料庫地址,麻煩事就來了,總不能讓用戶再升級一次(ios的發布期你也知道)。
此外還要考慮數據在傳輸過程中是否加密,是否證書方式,現在的網路,劫持植入廣告滿街都是。好像蘋果那邊有限制今後的新軟體要ssl才行。

❼ ios 怎樣打開sqlite資料庫

新建Empty Appliation,添加一個HomeViewController,和一個組件libsqlite3.dylib,來支持對sqlite3的連接,關閉,增刪改查等操作。
1. HomeViewController.h代碼:
#import <UIKit/UIKit.h>
#import "sqlite3.h"
@interface HomeViewController : UIViewController{
sqlite3 *db; //聲明一個sqlite3資料庫
}
- (NSString *)filePath;//資料庫文件的路徑。一般在沙箱的Documents里邊操作
@end

2. HomeViewController.m代碼:
#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
//該方法用於返回資料庫在Documents文件夾中的全路徑信息
- (NSString *)filePath{
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir :@"Contacts.sqlite"];
}
//打開資料庫的方法
- (void)openDB{
if (sqlite3_open([[self filePath] UTF8String], &db) != SQLITE_OK) {
sqlite3_close(db);
NSAssert(0, @"資料庫打開失敗。");
}
}
- (void)getAllContacts{
NSString *sql = @"SELECT * FROM members";
sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {

char *name = (char *)sqlite3_column_text(statement, 0);
NSString *nameStr = [[NSString alloc] initWithUTF8String:name];

char *email = (char *)sqlite3_column_text(statement, 1);
NSString *emailStr = [[NSString alloc] initWithUTF8String:email];

char *birthday = (char *)sqlite3_column_text(statement, 2);
NSString *birthdayStr = [[NSString alloc] initWithUTF8String:birthday];

NSString *info = [[NSString alloc] initWithFormat:@"%@ - %@ - %@",
nameStr, emailStr, birthdayStr];

NSLog(info);

[nameStr release];
[emailStr release];
[birthdayStr release];
[info release];
}
sqlite3_finalize(statement);
}
}

❽ ios中使用資料庫應注意什麼

iPhone中資料庫使用方法是本文要介紹的內容,直接進入話題介紹,iPhone 中使用名為 SQLite 的資料庫管理系統。它是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,
在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、PHP、Java 等,還有 ODBC 介面,同樣比起 Mysql、PostgreSQL 這兩款開源世界著名的資料庫管理系統來講,它的處理速度比他們都快。
其使用步驟大致分為以下幾步:
1. 創建DB文件和表格
2. 添加必須的庫文件(FMDB for iPhone, libsqlite3.0.dylib)
3. 通過 FMDB 的方法使用 SQLite
創建DB文件和表格
$ sqlite3 sample.db sqlite> CREATE TABLE TEST( ...> id INTEGER PRIMARY KEY, ...> name VARCHAR(255) ...> );

簡單地使用上面的語句生成資料庫文件後,用一個圖形化SQLite管理工具,比如 Lita 來管理還是很方便的。
然後將文件(sample.db)添加到工程中。
添加必須的庫文件(FMDB for iPhone, libsqlite3.0.dylib)
首先添加 Apple 提供的 sqlite 操作用程序庫 ibsqlite3.0.dylib 到工程中。位置如下
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${VER}.sdk/usr/lib/libsqlite3.0.dylib

這樣一來就可以訪問資料庫了,但是為了更加方便的操作資料庫,這里使用 FMDB for iPhone。
svn co http://flycode.googlecode.com/svn/trunk/fmdb fmdb
如上下載該庫,並將以下文件添加到工程文件中:
FMDatabase.h FMDatabase.m FMDatabaseAdditions.h FMDatabaseAdditions.m FMResultSet.h FMResultSet.m

通過 FMDB 的方法使用 SQLite
使用 SQL 操作資料庫的代碼在程序庫的 fmdb.m 文件中大部分都列出了、只是連接資料庫文件的時候需要注意 — 執行的時候,參照的資料庫路徑位於 Document 目錄下,之前把剛才的 sample.db 文件拷貝過去就好了。
位置如下
/Users/xxxx/Library/Application Support/iPhone Simulator/User/Applications/xxxx/Documents/sample.db
BOOL success; NSError *error; NSFileManager *fm = [NSFileManager defaultManager]; NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *writableDBPath = [documentsDirectory :@"sample.db"]; success = [fm fileExistsAtPath:writableDBPath]; if(!success){ NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] :@"sample.db"]; success = [fm ItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; if(!success){ NSLog([error localizedDescription]); } } // 連接DB FMDatabase* db = [FMDatabase databaseWithPath:writableDBPath]; if ([db open]) { [db setShouldCacheStatements:YES]; // INSERT [db beginTransaction]; int i = 0; while (i++ < 20) { [db executeUpdate:@"INSERT INTO TEST (name) values (?)" , [NSString stringWithFormat:@"number %d", i]]; if ([db hadError]) { NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]); } } [db commit]; // SELECT FMResultSet *rs = [db executeQuery:@"SELECT * FROM TEST"]; while ([rs next]) { NSLog(@"%d %@", [rs intForColumn:@"id"], [rs stringForColumn:@"name"]); } [rs close]; [db close]; }else{ NSLog(@"Could not open db."); }

熱點內容
wincc圖形編譯在哪裡 發布:2024-09-17 03:58:26 瀏覽:977
androidubuntu 發布:2024-09-17 03:50:27 瀏覽:701
識夢源碼 發布:2024-09-17 03:50:18 瀏覽:26
諾基亞密碼忘了打什麼電話 發布:2024-09-17 03:27:09 瀏覽:555
樹深度優先演算法 發布:2024-09-17 03:26:58 瀏覽:472
跳轉頁源碼 發布:2024-09-17 03:13:05 瀏覽:543
html文件上傳表單 發布:2024-09-17 03:08:02 瀏覽:785
聊天軟體編程 發布:2024-09-17 03:00:07 瀏覽:726
linuxoracle安裝路徑 發布:2024-09-17 01:57:29 瀏覽:688
兩個安卓手機照片怎麼同步 發布:2024-09-17 01:51:53 瀏覽:207