Я написал это специально для вас <3 </p>
Я использовал то же имя файла, что и у вас "/ raw / food_db.sql" , но это привело к ошибкам Вместо этого мне пришлось назвать его "/ raw / food_db" . Я думаю, это потому, что вы не используете имена файлов в вашем коде, но ResourceIds, которые написаны как «R.raw.food_db» и точка запутывает систему.
Существует метод для вашего DbSource ... при условии, что где-то есть код, подобный этому:
private SQLiteDatabase db;
...
DbHelper dbHelper = new DbHelper(context);
this.db = dbHelper.getWritableDatabase();
Вы положили туда этот метод:
/**
* This reads a file from the given Resource-Id and calls every line of it as a SQL-Statement
*
* @param context
*
* @param resourceId
* e.g. R.raw.food_db
*
* @return Number of SQL-Statements run
* @throws IOException
*/
public int insertFromFile(Context context, int resourceId) throws IOException {
// Reseting Counter
int result = 0;
// Open the resource
InputStream insertsStream = context.getResources().openRawResource(resourceId);
BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream));
// Iterate through lines (assuming each insert has its own line and theres no other stuff)
while (insertReader.ready()) {
String insertStmt = insertReader.readLine();
db.execSQL(insertStmt);
result++;
}
insertReader.close();
// returning number of inserted rows
return result;
}
Назовите это так (я пытался из Activity, чтобы тосты могли выводить сообщения). Присмотритесь, ошибки тоже «поджарены».
try {
int insertCount = database.insertFromFile(this, R.raw.food_db);
Toast.makeText(this, "Rows loaded from file= " + insertCount, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
Наслаждайтесь!
Оу .. кстати: этот код предназначен для файла, в котором каждая инструкция вставки имеет свою собственную строку.