Android: доступ к файлу базы данных sqlite для файлов с расширением .sqlite

Как читать данные из базы данных базы данных sqlite с расширением .sqlite в приложении для Android?

Solutions Collecting From Web of "Android: доступ к файлу базы данных sqlite для файлов с расширением .sqlite"

Попробуйте этот код:

public class DataBaseHelper extends SQLiteOpenHelper { private Context mycontext; //private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/"; private static String DB_NAME = "(datbasename).sqlite";//the extension may be .sqlite or .db public SQLiteDatabase myDataBase; /*private String DB_PATH = "/data/data/" + mycontext.getApplicationContext().getPackageName() + "/databases/";*/ public DataBaseHelper(Context context) throws IOException { super(context,DB_NAME,null,1); this.mycontext=context; boolean dbexist = checkdatabase(); if (dbexist) { //System.out.println("Database exists"); opendatabase(); } else { System.out.println("Database doesn't exist"); createdatabase(); } } public void createdatabase() throws IOException { boolean dbexist = checkdatabase(); if(dbexist) { //System.out.println(" Database exists."); } else { this.getReadableDatabase(); try { copydatabase(); } catch(IOException e) { throw new Error("Error copying database"); } } } private boolean checkdatabase() { //SQLiteDatabase checkdb = null; boolean checkdb = false; try { String myPath = DB_PATH + DB_NAME; File dbfile = new File(myPath); //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE); checkdb = dbfile.exists(); } catch(SQLiteException e) { System.out.println("Database doesn't exist"); } return checkdb; } private void copydatabase() throws IOException { //Open your local db as the input stream InputStream myinput = mycontext.getAssets().open(DB_NAME); // Path to the just created empty db String outfilename = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myoutput = new FileOutputStream("/data/data/(packagename)/databases /(datbasename).sqlite"); // transfer byte to inputfile to outputfile byte[] buffer = new byte[1024]; int length; while ((length = myinput.read(buffer))>0) { myoutput.write(buffer,0,length); } //Close the streams myoutput.flush(); myoutput.close(); myinput.close(); } public void opendatabase() throws SQLException { //Open the database String mypath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE); } public synchronized void close() { if(myDataBase != null) { myDataBase.close(); } super.close(); } } 

Поместите старую базу данных (old.db) в папку с вашим ресурсом. Введите это внутри onCreate () вашей деятельности:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); .... //=======Code For copying Existing Database file to system folder for use====// // Copying Existing Database into system folder try { String destPath = "/data/data/" + getPackageName() + "/databases/data.db"; File f = new File(destPath); if(!f.exists()){ Log.v(TAG,"File Not Exist"); InputStream in = getAssets().open("old.db"); OutputStream out = new FileOutputStream(destPath); byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); out.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { Log.v("TAG","ioexeption"); e.printStackTrace(); } DBManager dbManager = new DBManager(this); Log.v(TAG,"Database is there with version: "+dbManager.getReadableDatabase().getVersion()); String sql = "select * from prizes"; SQLiteDatabase db = dbManager.getReadableDatabase(); Cursor cursor = db.rawQuery(sql, null); Log.v(TAG,"Query Result:"+cursor); cursor.close(); db.close(); dbManager.close(); .... } 

Теперь вам нужно создать класс DBManager, который подклассы SQLiteOpenHelper. Вставьте абстрактный метод и конструктор. Не забудьте ввести правильное имя базы данных внутри super () dbHelper.

 public class DBManager extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String TAG = "DATABASES"; public DBManager(Context context) { super(context, "data.db", null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { Log.v(TAG,"On create Called:"+db.getPath()); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 

Теперь вы можете получить доступ к базе данных, создав экземпляр DBManager.

 SQLiteDatabase db = dbManager.getReadableDatabase(); Cursor cursor = db.rawQuery(sql, null); ... 

Не забудьте закрыть базу данных, или вы получите SQLiteDatabaseNotClosed Exception.

 db.close(); dbManager.close(); 

Важно то, что в учебнике, когда вы вызываете файл, убедитесь, что вы передаете контекст приложения getApplicationContext() таким образом, что у вас есть доступ к правильным активам, иначе вы можете получить исключение FileNotFound.

Вы захотите попробовать помощник для Android android sqlite . Это сделало для меня уже существующим db кусок пирога.

Я буквально работал примерно через полчаса, потратив 3 часа, пытаясь сделать все это вручную. Забавно, я думал, что делаю то же самое, что и библиотека для меня, но чего-то не хватало!

Если вы планируете создать новую базу данных SQLite, тогда перейдите и реализуйте метод onCreate (), как показано в учебнике.

Но если вы используете базу данных SQLite, созданную другим внешним источником, и вы собираетесь ее вытащить, оставьте метод onCreate () пустым.

Вы можете читать базу данных только из базы данных, поскольку папки ресурсов доступны только для чтения. Если вам нужно сделать больше операций, таких как создание, обновление, удаление, вы можете сделать трюки. Скопируйте базу данных из папки с данными в хранилище и затем сделайте все, что хотите.

Вот краткий пример работы с Android Pre Built Database.

Существует также простая в использовании библиотека для доступа к базе данных из папки с данными. Вы можете проверить Android SQLiteAssetHelper ( https://github.com/jgilfelt/android-sqlite-asset-helper ). Удачи!

Вам нужно преобразовать вашу базу данных .sqlite в .db inorder, чтобы она соответствовала Android.

На первом запуске приложения после установки

 SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.COPY_TO_SYSTEM); 

При последующих запусках

 SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.READ_FROM_DEVICE); 

Просто запускать SQL-запросы

 database.sqlInject("INSERT INTO food VALUES('Banana','Vitamin A');"); 

Получать результаты по массиву в CSV, JSON, XML

 ArrayList<String> rows=new ArrayList<String>(); rows=database.sqlEjectCSV("SELECT * FROM food;"); for (int i=0;i<rows.size();i++) { //Do stuffs with each row } 

Для этого вам нужно включить мою библиотеку. Документация здесь:
https://github.com/sangeethnandakumar/TestTube