Intereting Posts
Кнопка Android Studio Run ничего не делает Dex Loader Невозможно выполнить несколько файлов dex define Получите широту и долготу от имени адреса. НЕ Геокодер Тесты для Android без эмулятора Фильтр Intent для запуска и отправки активности Должен ли я запутывать секрет пользователя OAuth, хранящийся в приложении Android? Android Studio переводит проект на другой компьютер? Извлечение фрагмента из ViewPager NoClassDefFoundError при запуске Testmentation test with ant Как приложения Media Player Android, такие как MXPlayer и MoboPlayer, воспроизводят неподдерживаемые форматы файлов, такие как MKV? Тестирование NEON-оптимизированного cv :: threshold () на мобильном устройстве Dagger2: ошибка, когда два компонента имеют одну и ту же сигнатуру инъекционного метода Диалог ввода текста Ошибка раздувания класса com.google.android.youtube.player.YouTubePlayerView в списке Адаптер Как периодически проверять подключение к Интернету в целом приложении?

Android, как выполнить sql-файл в sqlitedatabase

У меня есть файл «food_db.sql», хранящийся в папке / res / raw, у него есть тонны «вставки».

Мой вопрос заключается в том, как выполнить файл и получить данные в sqlite databse в приложении для Android.

Вот мой код базы данных. Любые предложения?

private static class DbHelper extends SQLiteOpenHelper{ public DbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME + " TEXT NOT NULL, " + KEY_HOTNESS + " TEXT NOT NULL);"); // how do i exec the sql file and get the data into this DB table? } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE); db.execSQL("DROP TABLE IF EXISTS" + RECORD_TABLE); onCreate(db); } } 

Solutions Collecting From Web of "Android, как выполнить sql-файл в sqlitedatabase"

Я написал это специально для вас <3

Я использовал то же имя файла, что и «/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 * eg 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, так что Toasts может выводить сообщения). Посмотрите внимательно, ошибки также «поджарены».

 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(); } 

Наслаждайтесь!

Oh .. btw: Этот код предназначен для файла, в котором каждый insert-Statement имеет свою собственную строку.

 @Override public void onCreate(SQLiteDatabase db) { InputStream is = null; try { is = context.getResources().openRawResource(R.raw.database_init); String initSql = IOUtils.toString(is); db.execSQL(initSql); } catch (IOException e) { Log.e(TAG, "Error loading init SQL from raw", e); } catch (SQLException e) { Log.e(TAG, "Error executing init SQL", e); } finally { IOUtils.closeQuietly(is); } } 

Важным моментом является то, что SQLiteDatabase.execSQL (String sql) выполняет только один оператор SQL, несколько операторов, разделенных точками с запятой, не поддерживаются.

Я пробовал с трудом узнать, почему моя database_init.sql не работает должным образом.

Вставьте всю строку в одну строку:

 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) String insertStmt = ""; while (insertReader.ready()) { insertStmt += insertReader.readLine(); result++; } insertReader.close(); db.execSQL(insertStmt); // returning number of inserted rows return result; }