我正在处理一些遗留代码。这个数据库是如何在外部存储上创建的?
我注意到,如果我卸载该应用程序的数据库没有被删除(当我做了选择,我得到“老记”),
因此我必须假设DB是外部创建存储,
但我不明白这是怎么发生的,因为没有数据库的路径给出。
请你能帮我理解发生了什么?
这是助手:
private class CustomSQLiteOpenHelper extends SQLiteOpenHelper {
public CustomSQLiteOpenHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String s;
try {
Toast.makeText(context, "1", 2000).show();
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();
// Log.d("SQL:", s);
db.execSQL(s);
}
} catch (Throwable t) {
Toast.makeText(context, t.toString(), 50000).show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS jobs");
onCreate(db);
}
}
这是R.raw.sql
(所执行的SQL语句):包下的Android
<sql>
<statement>
CREATE TABLE IF NOT EXISTS [jobs] (
[jobNo] TEXT NOT NULL UNIQUE COLLATE NOCASE,
[test_id] NUMERIC NOT NULL,
[totalqty] NUMERIC NOT NULL,
[testedqty] NUMERIC NOT NULL DEFAULT 0,
[passedqty] NUMERIC NOT NULL DEFAULT 0,
[created] TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime')),
[LastUpdated] TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime')),
[LastReportedRecord] NUMERIC NOT NULL DEFAULT 0,
[ReportNumber] NUMERIC NOT NULL DEFAULT 0,
[active] NUMERIC NOT NULL DEFAULT 0
);
</statement>
<statement>
CREATE TRIGGER job_lastupdate
AFTER UPDATE ON jobs FOR EACH ROW
BEGIN
UPDATE jobs
SET LastUpdated = (datetime('now','localtime'))
WHERE rowid = old.rowid;
END;
</statement>
<statement>
CREATE TABLE IF NOT EXISTS [recipients] (
[email] TEXT NOT NULL UNIQUE COLLATE NOCASE
);
</statement>
<statement>
CREATE TABLE IF NOT EXISTS [test] (
[desc] TEXT NOT NULL COLLATE NOCASE,
[type] INTEGER NOT NULL,
[created] TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime'))
);
</statement>
<statement>INSERT INTO test (desc, type) VALUES('Open Test', 1);</statement>
<statement>INSERT INTO test (desc, type) VALUES('Closed Test', 2);</statement>
<statement>
CREATE TABLE IF NOT EXISTS [testlimit] (
[desc] TEXT NOT NULL COLLATE NOCASE,
[test_id] INTEGER NOT NULL,
[seqNo] INTEGER NOT NULL,
[s0lower] NUMERIC NOT NULL,
[s1lower] NUMERIC NOT NULL,
[s2lower] NUMERIC NOT NULL,
[s0upper] NUMERIC NOT NULL,
[s1upper] NUMERIC NOT NULL,
[s2upper] NUMERIC NOT NULL,
[stability] NUMERIC NOT NULL,
[created] TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime')),
[modified] TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime'))
);
</statement>
<statement>
CREATE TRIGGER testlimit_lastupdate
AFTER UPDATE ON testlimit FOR EACH ROW
BEGIN
UPDATE testlimit
SET modified = (datetime('now','localtime'))
WHERE rowid = old.rowid;
END;
</statement>
<statement>INSERT INTO testlimit (desc, test_id, seqNo, s0lower, s1lower, s2lower, s0upper, s1upper, s2upper, stability) VALUES('Rest', 1, 1, 0, 0, 0, 25, 25, 25, 100); </statement>
<statement>INSERT INTO testlimit (desc, test_id, seqNo, s0lower, s1lower, s2lower, s0upper, s1upper, s2upper, stability) VALUES('Low', 1, 2, 800, 900, 900, 1000, 1100, 1100, 50);</statement>
<statement>INSERT INTO testlimit (desc, test_id, seqNo, s0lower, s1lower, s2lower, s0upper, s1upper, s2upper, stability) VALUES('High', 1, 3, 3600, 2900, 2900, 3699, 3100, 3100, 50);</statement>
<statement>INSERT INTO testlimit (desc, test_id, seqNo, s0lower, s1lower, s2lower, s0upper, s1upper, s2upper, stability) VALUES('Rest', 2, 1, 0, 0, 0, 4095, 4095, 4095, 4095); </statement>
<statement>INSERT INTO testlimit (desc, test_id, seqNo, s0lower, s1lower, s2lower, s0upper, s1upper, s2upper, stability) VALUES('50g', 2, 2, 500, 800, 800, 1800, 3000, 3000, 100);</statement>
<statement>
CREATE TABLE IF NOT EXISTS [deviceRecords] (
[devid] TEXT UNIQUE NOT NULL COLLATE NOCASE,
[serial] TEXT UNIQUE COLLATE NOCASE,
[version] TEXT NOT NULL COLLATE NOCASE,
[created] TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime'))
);
</statement>
<statement>
CREATE TABLE IF NOT EXISTS [testRecords] (
[job_id] INT NOT NULL,
[dev_id] NUMERIC NOT NULL,
[zero0min] NUMERIC NOT NULL,
[zero0max] NUMERIC NOT NULL,
[zero0avg] NUMERIC NOT NULL,
[zero1min] NUMERIC NOT NULL,
[zero1max] NUMERIC NOT NULL,
[zero1avg] NUMERIC NOT NULL,
[zero2min] NUMERIC NOT NULL,
[zero2max] NUMERIC NOT NULL,
[zero2avg] NUMERIC NOT NULL,
[weight0min] NUMERIC NOT NULL,
[weight0max] NUMERIC NOT NULL,
[weight0avg] NUMERIC NOT NULL,
[weight1min] NUMERIC NOT NULL,
[weight1max] NUMERIC NOT NULL,
[weight1avg] NUMERIC NOT NULL,
[weight2min] NUMERIC NOT NULL,
[weight2max] NUMERIC NOT NULL,
[weight2avg] NUMERIC NOT NULL,
[test_id] INT NOT NULL,
[result] TEXT NOT NULL COLLATE NOCASE,
[operator] TEXT COLLATE NOCASE,
[created] TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime'))
);
</statement>
</sql>
因此'DB_NAME'没有路径? [getPath](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#getPath%28%29)返回什么? – 2014-08-27 07:32:16
如何确认db没有被删除。 ?如果应用程序卸载完成,数据库一定会被删除。 – Sush 2014-08-27 07:41:58
@CL。您好CL,并感谢,我得到'/数据/数据/我的包名/数据库/我的应用程序名称' – 2014-08-27 07:53:32