2017-08-01 89 views
-1

我處於用戶有一個sqlite數據庫的數據根本不應該被篡改的情況。基本上,我想從一個.csv文件或其他行中導入一個表格到他們的數據庫中,而不用接觸任何數據。將表導入到現有的sqlite數據庫android

我注意到沒有庫frmo我可以看到明確這一點。我對SQLite的瞭解並不像我期望的那麼舒服,所以我不確定該去哪裏。

我應該只是讀取每行的文件行復制數據,然後將其插入到創建的表中?每個表格將有400條記錄,但不是太多,所以我認爲它不能那麼低效。我的經驗不足令我擔心,我會以某種方式破壞數據。希望阻止錯誤,這裏的責任..

+1

'固定如果我只是讀每行復制數據,然後將其插入到文件中的行創建的表格?'這似乎是正確的方法。 「有什麼擔心我想我會以某種方式損壞數據'然後將整個批處理包含在一個事務中。數據將全部或沒有。 –

+0

@ModularSynth我擔心SQLOpenHelper。我不確定當我需要導入表格時,是否會遇到一些問題,因爲每個用戶都有不同的數據。我認爲這是不好的做法。 – AeriaGlorisia

回答

0
Here's one way: 

沒有主鍵創建一個新的臨時數據庫表(這樣你就可以在複製之前驗證它。)

例如

CREATE TABLE salespeopleTMP (
    id INTEGER, 
    first_name TEXT NOT NULL, 
    last_name TEXT NOT NULL, 
    commission_rate REAL NOT NULL 
); 

並沒有在表中,看起來像這樣現有的數據:

sqlite> select * from salespeople; 
1|Fred|Flinstone|10.0 
2|Barney|Rubble|10.0 

如果我現在有一個CSV數據文件名爲people.txt看起來像這樣:

3,John,Doe,5.0 
4,Jane,Smith,5.0 

導入CSV數據轉換爲臨時SQLite表

您可以將CSV數據導入到我的SQLite表與這兩個命令:

sqlite的>.separator ','

sqlite的>.import people.txt salespeopleTMP

使用INSERT INTO命令將臨時表 表中的數據導入到您的實際表中

insert into salespeople select * from salespeopleTMP 

刪除臨時表salespeopleTMP

根據和錯誤的https://alvinalexander.com/android/sqlite-csv-import-data-table-primary-key

+0

請格式化這個答案更好。什麼是不代碼不應該顯示爲代碼。 –

相關問題