2012-03-21 22 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持久性存储。这会比它的价值更麻烦。

相关问题