我想在iOS核心数据中创建一个新表,我之前使用过以下xml文件在java中创建,并希望在可能的情况下重新使用
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 :(得分:2)
这不是核心数据的工作方式,我担心。它使用SQLite是一个实现细节。事实上,它甚至没有 来使用SQLite;还有其他持久性商店类型。
您可以直接插入Core Data创建的SQLite数据库中。我强烈建议不要这样做。它会非常脆弱,并且在主要版本更新时可能会失败。
更好的解决方案可能是直接使用SQLite,完全忽略核心数据。核心数据是大多数应用程序的一个很好的抽象,但不是唯一的方法,并不是所有用例的最佳方式。
答案 1 :(得分:0)
您必须首先认识到核心数据不数据库引擎;它是一个对象图持久性框架。其持久性商店类型之一恰好是sqlite商店。因此,在数据库世界中可识别的“表”之类的术语不能转移到核心数据,至少在您在应用程序中使用的抽象级别。
您可以使用现有的XML导出来填充Core Data持久性存储;但是要意识到sqlite后备存储格式是不透明的 - 你必须在模拟器的文件系统上找到它,然后编写一个代码块,将现有的XML导出桥接到Core Data的sqlite持久存储。这将比它的价值更麻烦。