2014-08-27 46 views
-1

我正在处理一些遗留代码。这个数据库是如何在外部存储上创建的?

我注意到,如果我卸载该应用程序的数据库没有被删除(当我做了选择,我得到“老记”),

因此我必须假设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> 
+0

因此'DB_NAME'没有路径? [getPath](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#getPath%28%29)返回什么? – 2014-08-27 07:32:16

+0

如何确认db没有被删除。 ?如果应用程序卸载完成,数据库一定会被删除。 – Sush 2014-08-27 07:41:58

+0

@CL。您好CL,并感谢,我得到'/数据/数据/我的包名/数据库/我的应用程序名称' – 2014-08-27 07:53:32

回答

1

给出的路径与你的名字/ data //如果将其保存到externalstorage中。但最好的方法是将任何数据库文件保存在您的私有应用程序存储下。

对于上述两种情况在卸载应用程序时这些文件夹被删除

+0

嗨,关键是这个数据库似乎被保存在外部存储(我不知道我喜欢它),但我不明白如何它发生:-( – 2014-08-27 07:56:04

相关问题