ben ekleme sorguları (bazı satırlı sorguları dahil) ile sona erer içerirler bir .sql
dosyası oluşturmak adım
tarafından çözüm adımıdır.
SQLiteOpenHelper
benim onCreate()
yöntemimde getFileLineCount()
kullanarak dosyamın satırlarını sayıyorum. Bu yöntem bana hat sayısını geri verir. Bu satır sayısı hiçbir zaman kullanılmaz, fakat bende tüm sorularınız tek satırsa, oyuna girebilir. Bu yöntemi atlayabilirsiniz.
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE \"" + TABLE_POEM + "\" (\"" + POEM_LOCAL_ID + "\" INTEGER PRIMARY KEY AUTOINCREMENT , \"" + POEM_TEXT + "\" TEXT,\"" + POEM_ID + "\" INTEGER , \"" + POEM_IS_FAV + "\" TEXT);");
int totalLineCount = getFileLineCount("poem.sql");
int insertCount = insertFromFile(db, "poem.sql", totalLineCount);
Log.d("DatabaseHelper", "------------onCreate(SQLiteDatabase db) >>>>>>> completed--------");
}
private int getFileLineCount(String assetFilePath) {
InputStream insertStream = null;
int totalCount = 0;
try {
insertStream = context.getAssets().open(assetFilePath);
totalCount = FileUtil.countLines(new BufferedInputStream(insertStream));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (insertStream != null) {
try {
insertStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return totalCount;
}
Bu yöntemi kullanarak, dosyadan sorgular ekliyorum. Hem tek satır sorguları hem de çok satırlı sorguları işler. Öncelikle satırın ";"
içerip içermediğini kontrol ediyorum, hattın bitmediği anlamına geliyor. Oldukça basit, sonunda oldu.
while ((currentLine = insertReader.readLine()) != null) {
if (currentLine.length() != 0) {
if (currentLine.charAt(currentLine.length() - 1) == ';') {
insertInDb(db, insertStr + "\n" + currentLine);
insertStr = "";
} else {
insertStr += currentLine;
}
}
}
private int insertFromFile(SQLiteDatabase db, String assetFilePath, int totalCount) {
int result = 0;
BufferedReader insertReader = null;
try {
InputStream insertStream = context.getAssets().open(assetFilePath);
insertReader = new BufferedReader(new InputStreamReader(insertStream));
db.beginTransaction();
while (insertReader.ready()) {
// String insertStr = insertReader.toString();
String insertStr = "";
String currentLine;
while ((currentLine = insertReader.readLine()) != null) {
if (currentLine.length() != 0) {
if (currentLine.charAt(currentLine.length() - 1) == ';') {
insertInDb(db, insertStr + "\n" + currentLine);
insertStr = "";
} else {
insertStr += currentLine;
}
}
}
}
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (insertReader != null) {
try {
insertReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
db.endTransaction();
}
return result;
}
private void insertInDb(SQLiteDatabase db, String assetFilePath) throws IOException {
if (assetFilePath != null && assetFilePath.length() > 0) {
SQLiteStatement statement = db.compileStatement(assetFilePath);
statement.execute();
}
}
Bu tekniği db'ye 4000 kayıt eklemek için kullandım. Ve gecikmeden çok çalışıyordu. Bunun için herhangi bir meyilli çözüm varsa. Lütfen postalayın.
Herhangi biri? yardım et??? –
Neden sadece [uygulamayı DB ile gönderiyorsunuz] (http://stackoverflow.com/questions/513084/how-to-ship-an-android-application-with-a-database)? –