2012-03-21 58 views
0

我要創建iOS中的核心數據的新表,我已經使用了下面的XML文件之前Java創建並想重新使用,如果可能的iOS coredata使用現有的SQLite?

sql.xml文件

<sql> 
<statement> 
CREATE TABLE IF NOT EXISTS place (
     _id INTEGER PRIMARY KEY AUTOINCREMENT, 
     Name VARCHAR(50), 
    Location VARCHAR(50), 
    Description VARCHAR(300), 
    Type VARCHAR(50), 
    longitude DOUBLE(50), 
    latitude DOUBLE(50), 
</statement> 

<statement>INSERT INTO place VALUES(1,'Clare' 
    ,'Co Clare' 
    ,'Clare Description' 
    ,'County' 
    ,'52.924014' 
     ,'-9.353399') 
</statement> 
<statement>INSERT INTO surfSpot VALUES(2,'etc... 

Java代碼

public void onCreate(SQLiteDatabase db){ 
     String s; 
     try{ 
     InputStream in = context.getResources().openRawResource(R.raw.sql); 
     DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     Document doc = builder.parse(in, null); 
     NodeList statements = doc.getElementsByTagName("statement"); 
     for (int i=0; i<statements.getLength(); i++) { 
      s = statements.item(i).getChildNodes().item(0).getNodeValue(); 
      db.execSQL(s); 
     } 
    } catch (Throwable t) { 

    } 
} 

數據庫是靜態的,我想就怎麼做的iOS同樣的事情的建議,一步一步的指示將是理想的答案

+0

core-data不是sqlite的包裝。你不能在覈心數據中重用任意的sqlite數據庫。 – 2012-03-21 11:15:47

回答

2

這恐怕不是Core Data的工作原理。它使用SQLite是一個實現細節。實際上,它甚至沒有使用SQLite;還有其他持久存儲類型。

可能直接插入到Core Data創建的SQLite數據庫中。我強烈建議不要這樣做。這將是非常脆弱的,易於在主要版本更新失敗。

更好的解決方案可能是直接使用SQLite,完全忽略核心數據。核心數據對於大多數應用來說都是一個很好的抽象,但並不是唯一的方法,也不是所有用例的最佳方式。

0

您必須首先認識到Core Data是而不是的數據庫引擎;它是一個對象圖持久性框架。它的持久存儲類型之一恰好是sqlite存儲。因此,像數據庫世界中可識別的「表」這樣的術語不可轉移到核心數據,至少在您的應用程序中將使用的抽象級別上。

您可以使用現有的XML導出來填充Core Data持久性存儲;但意識到sqlite支持存儲格式是不透明的 - 您必須在模擬器的文件系統上找到它,然後編寫一段代碼,將現有的XML導出連接到Core Data的sqlite持久性存儲。這會比它的價值更麻煩。

相關問題