Jak odczytać dane z pliku bazy danych plików sqlite zasobów z rozszerzeniem .sqlite w mojej aplikacji Android?Android: Dostęp do pliku bazy danych plików sqlite zasobów z rozszerzeniem .sqlite
Odpowiedz
Jeśli planujesz utworzyć nową bazę danych SQLite, przejedź i zastosuj metodę onCreate(), jak pokazano w samouczku.
Ale jeśli używasz bazy danych SQLite, która jest tworzona przez inne zewnętrzne źródło i zamierzasz ją ściągnąć, pozostaw metodę onCreate() pustą.
Ważne jest, aby w samouczku podczas wywoływania pliku upewnić się, że kontekst aplikacji getApplicationContext()
jest taki, że masz dostęp do poprawnych zasobów, w przeciwnym razie możesz uzyskać wyjątek FileNotFound.
Spróbuj kod:
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();
}
}
nice, działa dobrze dla mnie; d –
W faktycznie kodowania tego do produkcji użyj mycontext.getApplicationInfo(). DataDir zamiast twardego kodowania "/ data/data/(nazwa pakietu)". Jest to oficjalny sposób uzyskania katalogu danych aplikacji. – wheredidthatnamecomefrom
Place starą bazę danych (old.db) w folderze aktywów. Wpisz ten wewnątrz onCreate() swojego działania:
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();
....
}
Teraz trzeba zrobić Class DBManager które podklasy SQLiteOpenHelper. Wstaw abstrakcyjną metodę i konstruktor. Nie zapomnij wpisać poprawną nazwę bazy danych wewnątrz super() z 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) {
}
}
Teraz można uzyskać dostęp do bazy danych poprzez utworzenie instancji DBManager.
SQLiteDatabase db = dbManager.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, null);
...
Nie zapomnij zamknąć bazy danych lub otrzymasz wyjątek SQLiteDatabaseNotClosed.
db.close();
dbManager.close();
Będziesz chciał wypróbować android sqlite asset helper. To sprawiło, że otworzenie dla mnie wcześniej istniejącego kawałka bułka z masłem.
Dosłownie miałem to działa w około pół godziny po spędzeniu 3 godzin próbując zrobić to wszystko ręcznie. Zabawne jest to, myślałem, że robię to samo, co biblioteka dla mnie, ale czegoś brakowało!
Można tylko odczytać bazę danych z folderu zasobów, ponieważ foldery zasobów są tylko do odczytu. Jeśli potrzebujesz więcej operacji, takich jak tworzenie, aktualizacja, usuwanie, możesz robić sztuczki. Skopiuj bazę danych z folderu zasobów do magazynu, a następnie możesz zrobić wszystko, co chcesz.
Oto szybki przykład Working with Android Pre Built Database.
Jest łatwy w użyciu biblioteki zbyt dostępu do bazy danych z folderu aktywów. Możesz sprawdzić Android SQLiteAssetHelper (https://github.com/jgilfelt/android-sqlite-asset-helper). Powodzenia!
Konieczna jest konwersja bazy danych .sqlite na .db w celu dopasowania do systemu Android.
w swojej aplikacji za pierwszym uruchomieniu po instalacji
SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.COPY_TO_SYSTEM);
Na kolejnych startów
SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.READ_FROM_DEVICE);
Wystarczy odpalić zapytań SQL
database.sqlInject("INSERT INTO food VALUES('Banana','Vitamin A');");
Pobierz wyniki na tablicy w 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
}
Musisz do tego dodać moją bibliotekę. Dokumenty tutaj:
https://github.com/sangeethnandakumar/TestTube
- 1. Importowanie plików z rozszerzeniem .sqlite do R
- 2. Dostęp do bazy danych sqlite na urządzeniu z systemem Android
- 3. Android: zamykanie bazy danych SQLite
- 4. Schemat bazy danych Android Sqlite
- 5. Testowanie bazy danych SQLite Android
- 6. Zapełnianie Spinner z bazy danych SQLite Android
- 7. Eksport bazy danych SQLite do pliku XML w systemie Android
- 8. SQLite - nie można otworzyć pliku bazy danych
- 9. Aktywność i dostęp do bazy danych SQLite Database
- 10. połączenie bazy danych sqlite golang
- 11. Odzyskaj dużą plamę z bazy danych Android sqlite
- 12. Skopiuj dwie bazy danych SQLite w folderze zasobów w Androidzie
- 13. Android: SQLite używającej niewłaściwej bazy danych
- 14. Dodaj plik HTML do bazy danych SQLite
- 15. Dostęp wielowątkowy z Androidem SQlite
- 16. Budowanie bazy danych sqlite poza projektem Androida?
- 17. Sync bazy danych sqlite z mysql
- 18. Uzyskiwanie dostępu do bazy danych SQLite z wiersza poleceń
- 19. Zmiana nazwy systemu Android Baza danych SQLite
- 20. Tworzenie bazy danych w JDBC Sqlite
- 21. Czy mogę zaszyfrować hasło bazy danych SQLite?
- 22. Powody korzystania czytelny bazy danych SQLite
- 23. Jak użyć skryptu do zapytania bazy danych sqlite Android
- 24. bazy danych sqlite w języku perskim
- 25. Jak podłączyć CakePHP do bazy danych SQLite?
- 26. Maksymalna pojemność bazy danych SQLite
- 27. Kilka pytań o SQLite kursorów bazy danych w Android
- 28. Dlaczego warto korzystać z bazy danych sqlite w systemie Android?
- 29. skutecznie uwolnienie SQLite bazy
- 30. Skopiuj moją własną bazę danych SQLite z folderu zasobów do
Dlaczego umieściłeś plik .sqlite w folderze assets zamiast w/res/raw? – Macarse
Będziesz chciał wypróbować [android sqlite asset helper] (https://github.com/jgilfelt/android-sqlite-asset-helper). To sprawia, że to bułka z masłem. – craned