2013-02-09 98 views
2

我的任務是移植和Android應用程序,我幾個月前創建到iOS。Android和IOS中的SQLite數據庫之間的差異

現在,我也曾在iOS中使用過SQLite。不過,我記得它的工作量比Android相當多。特別是在查詢方面。

在Android中我能夠使用下面的命令來執行一個查詢(見下文),其中分貝是SQLite的的一個實例,DBNAME()是返回DB的名稱,getFieldNames的方法()返回一個字段名稱字符串數組,並且其中包含where子句。

Cursor result = db.query(dbName(), getDBFieldNames() , where,null,null,null,null); 

我想在sqlite3的的IOS版本使用了這樣的漂亮和乾淨db.query命令。然而,它(或類似的東西)是否存在,因爲我找不到它?

回答

2

不同之處在於您將使用sqlite的C api,這比Java更困難。這當然是非常不同的,所以不要指望它工作一致。

你應該查看使用sqlite with C/C++的sqlite文檔。

+0

感謝您的意見。我最終完全重新實施並提出了一個很好的解決方案。現在我有一個可擴展的類/對象來提供簡單的對象一個簡單的方法來承諾自己的dB。乾杯。 – 2013-02-11 00:46:36

1

Kekoa是對的。或者,您可以在iOS中使用FMDB,它可以爲您提供一個很好的(但仍然非常輕量級)SQLite包裝器。這個API與你熟悉的API有些不同,但FMDB可以讓你擺脫SQLite C界面的雜草。


因此,在FMDB,你可以打開一個數據庫:

FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; 

你可以打開你的記錄設置像這樣:

FMResultSet *rs = [db executeQuery:@"select rowid,* from test where a = ?", @"hi'"]; 

您可以通過行迭代您結果集如下:

while ([rs next]) { 
    // just print out what we've got in a number of formats. 
    NSLog(@"%d %@ %@ %@ %@ %f %f", 
      [rs intForColumn:@"c"], 
      [rs stringForColumn:@"b"], 
      [rs stringForColumn:@"a"], 
      [rs stringForColumn:@"rowid"], 
      [rs dateForColumn:@"d"], 
      [rs doubleForColumn:@"d"], 
      [rs doubleForColumn:@"e"]); 
} 

而你可以關閉你的結果集,像這樣:

[rs close]; 
+1

我希望我能舉出兩個答案。無論如何,我給了你一個觀點。謝謝。 – 2013-02-11 00:48:03

1

我一直在工作的工具,以幫助輕鬆訪問SQLite數據庫上不論是iOS(與ARC)和Android。該工具接受一個sqlite數據庫文件並自動生成基類和一些輔助類來處理CRUD查詢。還有一些如何在iOS和Android上使用它的例子。我希望這會有所幫助。 https://github.com/pl4u/flyingdb