거대한 txt 파일로 앱을 배포하고 사용자 기기로 가져 오지 마십시오. 이것은 시간이 걸리고 성가신 일입니다.
미리 채워진 데이터베이스로 앱을 배포하고 res
- 폴더에서 복사하십시오. 이것을 android-sqlite-asset-helper으로 자동화 할 수 있습니다.
또한 예. 데이터베이스는 항상 내부 메모리에 저장되며 루트가 아닌 장치에서 액세스 할 수 없습니다 (AVD를 사용하지 않는 경우).
는 데이터베이스로 TXT-내용을 가져올 내용을 분석하고 대응하는 SQL-쿼리를 실행하는 스크립트 또는 무언가를 만듭니다. 다시 말하지만, 응용 프로그램은 원시 파일이 아닌 데이터베이스와 함께 제공되어야합니다!
import sqlite3
import re
counter = 0;
pattern = re.compile('^([^\^]+)\^([\w\s]+)\^(yes|no)\^\w+$');
conn = sqlite3.connect("imported.db");
cursor = conn.cursor();
# Create the Table:
conn.execute('''
CREATE TABLE Bands (
name TEXT,
genre TEXT,
popular INTEGER,
selected INTEGER
);''');
# Now, insert:
with open('bands.txt', 'r') as f:
for line in f:
match = pattern.search(line);
if match:
cursor.execute('''
INSERT INTO Bands (name, genre, popular, selected)
VALUES (?,?,?,0)''',
(
match.group(1), match.group(2),
(1 if match.group(3) == 'yes' else 0)
)
);
counter+=1;
conn.commit();
conn.close();
print "Imported ", counter, " bands!";
이것은 TXT 있다고 가정합니다 :
는 좀 지루했고 함께 당신의 TXT 파일에서 모든 항목을 읽고 SQLite는 데이터베이스에 삽입하는 간단한 파이썬 스크립트를 해킹 -file의 이름은
bands.txt
이고, 각 값은
/
으로 구분되며 각 항목은 자체 행에 있습니다. 결과 데이터베이스 파일은
imported.db
입니다.
또한 True|False
-fields (popular, selected)에 모두 INTEGER
을 사용합니다. 이 경우에는 거짓 일 경우 0
이고 참이면 1
입니다.
RegEx는 popular
값에 대해서만 "예"와 "아니오"를 허용합니다.
답변은 프로그램에 달려 있습니다. 분명히 끊임없이 재창조하는 것은 바람직하지 않으므로 그렇게 쓰지 말고 대신 논리를 작성하여 작성하기 전에 존재하는지 확인하십시오. 업그레이드 된 응용 프로그램과 함께 수정 된 원본을 배포 할 수 있다면 더 복잡해 지겠지만 업그레이드 변경 사항을 사용자의 로컬 변경 내용과 병합하는 논리가 필요할 수도 있습니다. –
빠른 답장을 보내 주셔서 감사합니다! 하지만 어떻게하면 txt 파일을 잊어 버리는가? 예를 들어 업데이트가 생길 때까지? (btw,로드 된 SQLite db는 항상 내부 메모리에 저장됩니까?) – murtaugh
일반적으로 ['SQLiteOpenHelper'] (http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper)의 구현을 사용합니다. html). 예를 들어보십시오 [여기] (http : //www.vogella.co.kr/articles/AndroidSQLite/article.html # sqliteoverview_sqliteopenhelper) 또는 [여기] (http://developer.android.com/guide/topics/data/data-storage.html#db)를 클릭하십시오. – JimmyB