Я загружаю файл базы данных в активы, называемые mydb. Затем я использую приведенный ниже код для загрузки файла базы данных в эмулятор. Это работает иногда, но не всегда. Я перезагрузил eclipse, и файл базы данных загрузился правильно. Я не могу заставить его работать на реальном устройстве. Я пробовал это с другим проектом экспериментальных файлов. Я думаю, что есть настройка, которую я не настроил правильно, но я не уверен. Любая помощь будет принята с благодарностью.андроид галактики s реальный файл базы данных устройства для исключения нулевой точки
методы пытались
Я пытался использовать android_meta таблицу, так как это было предположить, чтобы устранить проблемы баз данных не загружены.
У меня также есть записи с использованием такого синтаксиса. Это даже будет работать на устройстве жизни long id = db.insertContact («Wei-Meng Lee», «[email protected]»); Этот код snipet взят из книги развития андроида
Я внесение изменений коды, где указанные в примере
всего журнал неисправности
06-21 15: 17: 56.792: E/AndroidRuntime (556): FATAL EXCEPTION: main 06-21 15: 17: 56.792: E/AndroidRuntime (556): java.lang.RuntimeException: не удается запустить Activity ComponentInfo {alex.android.test.db/alex. android.test.db.AndroidtestdbActivity}: android.database.sqlite.SQLiteException: нет такой таблицы: contacts:, при компиляции: SELECT DISTINCT _id, name , email FROM contacts WHERE _id = 2 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1956) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1981) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.app.ActivityThread.access $ 600 (ActivityThread .java: 123) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1147) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.os.Handler.dispatchMessage (Handler.java:99) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.os.Looper.loop (Looper.java : 137) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.app.ActivityThread.main (ActivityThread. java: 4424) 06-21 15: 17: 56.792: E/AndroidRuntime (556): при java.lang.reflect.Method.invokeNative (собственный метод) 06-21 15: 17: 56.792: E/AndroidRuntime (556)): at java.lang.reflect.Method.invoke (Method.java:511) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) 06-21 15:17 : 56.792: E/AndroidRuntime (556): at dalvik.system.NativeStart.main (родной метод) 06-21 15: 17: 56.792: E/AndroidRuntime (556): вызвано: android.database.sqlite.SQLiteException: нет такой таблицы: контакты: при компиляции: SELECT DISTINCT _id, name, email FROM contacts WHERE _id = 2 06-21 15: 17: 56.792: E/AndroidRuntime (556): при droid.database.sqlite.SQLiteCompiledSql.native_compile (собственный метод) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.database.sqlite.SQLiteCompiledSql. (SQLiteCompiledSql.java:68) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.database.sqlite.SQLiteProgram.compileSql (SQLiteProgram.java:143) 06-21 15: 17: 56.792: E/AndroidRuntime (556): у android. database.sqlite.SQLiteProgram.compileAndbindAllArgs (SQLiteProgram.java: 361) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:127) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:94) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.database.sqlite.SQLiteQuery. (SQLiteQuery.java : 53) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:47) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1564) 06-21 15: 17: 56.792: E/AndroidRuntime (556): на android.database.sqlite.SQLiteDatabase.queryWithFactory (SQLiteDatabase .java: 1449) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at andro id.database.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1405) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at alex.android.test.db.DBAdapter.getContact (DBAdapter.java: 163) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at alex.android.test.db.AndroidtestdbActivity.onCreate (AndroidtestdbActivity.java:32) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.app.Activity.performCreate (Activity.java:4465) 06-21 15: 17: 56.792: E/AndroidRuntime (556): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java: 1049) 06-21 15: 17: 56,792: Е/AndroidRuntime (556): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1920)
общественного класса DBAdapter {
private static final String DB_NAME = "MyDB";
private static final int DB_VERSION = 1;
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_EMAIL = "email";
private static final String TAG = "DBAdapter";
private static final String DATABASE_TABLE = "contacts";
private static Context c;
private SQLiteDatabase db;
private SQLiteOpenHelper sqlDBHelp;
/**
* Constructor for the SQL DB Adapter, copy DB from assets if not exists in /data/data/<package-name>/databases
*
* @param c
*/
public DBAdapter(Context c) {
super();
DBAdapter.c = c;
sqlDBHelp = new SqlDBHelper();
}
/**
* Open the SQL DB as Writable
*/
public void openDB() {
try {
db = sqlDBHelp.getWritableDatabase();
} catch (SQLiteException ex) {
Toast.makeText(c, "DB with filename " + DB_NAME + "coudn't be opend!", Toast.LENGTH_SHORT);
}
}
/**
* Close the SQL DB
*/
public void closeDB() {
db.close();
}
/**
* Helper class for the SQL DB Adapter
*/
static class SqlDBHelper extends SQLiteOpenHelper {
private static final String DB_PATH = "/data/data/" + c.getPackageName() + "/databases/" + DB_NAME;
public SqlDBHelper() {
super(c, DB_NAME, null, DB_VERSION);
createDB();
}
private void createDB() {
SharedPreferences prefs = c.getSharedPreferences("sharedPrefs", 0);
boolean dbExists = prefs.getBoolean("dbExists", false);
Log.d("PM.ADA.SDA", "DB Exists : " + dbExists);
if (!dbExists) {
this.getReadableDatabase();
copyDB();
prefs.edit().putBoolean("dbExists", true).commit();
}
}
public void onCreate(SQLiteDatabase db) {
/*
try {
db.execSQL(DATABASE_TABLE);
} catch (SQLException e) {
e.printStackTrace();
}
*/
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
public void copyDB() {
try {
InputStream is = c.getAssets().open(DB_NAME);
BufferedInputStream bis = new BufferedInputStream(is);
OutputStream os = new FileOutputStream(DB_PATH);
BufferedOutputStream bos = new BufferedOutputStream(os);
byte[] buffer = new byte[64];
int length;
while ((length = bis.read(buffer)) > 0) {
bos.write(buffer, 0, length);
}
bos.flush();
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public long insertContact(String name, String email)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, name);
initialValues.put(KEY_EMAIL, email);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//---deletes a particular contact---
public boolean deleteContact(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
//---retrieves all the contacts---
public Cursor getAllContacts()
{
return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
KEY_EMAIL}, null, null, null, null, null);
}
//---retrieves a particular contact---
public Cursor getContact(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
KEY_NAME, KEY_EMAIL}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
//---updates a contact---
public boolean updateContact(long rowId, String name, String email)
{
ContentValues args = new ContentValues();
args.put(KEY_NAME, name);
args.put(KEY_EMAIL, email);
return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
}
другая деятельность имя TextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DBAdapter db = new DBAdapter(this);
name = (TextView)findViewById(R.id.name);
//---get a contact---
db.openDB();
Cursor c = db.getContact(2);
if (c.moveToFirst())
{
DisplayContact(c);
name.setText(String.valueOf(c.getString(1)));
}
else
name.setText("not found");
Toast.makeText(this, "No contact found", Toast.LENGTH_LONG).show();
db.closeDB();
}
public void DisplayContact(Cursor c)
{
Toast.makeText(this,
"id: " + c.getString(0) + "\n" +
"Name: " + c.getString(1) + "\n" +
"Email: " + c.getString(2),
Toast.LENGTH_LONG).show();
}
}
Я запутался ... ошибка вы вывесили есть 'в alex.android.test.db.DBAdapter $ DatabaseHelper .copyDataBase (DBAdapter.java:88) ', но я не вижу этот метод в любом месте кода, который вы разместили. – Barak
Я еще раз обновил код и использовал другое сообщение, которое я нашел – alex
Похоже, что ваша БД копируется сейчас ... но я уверен, что вы удалили таблицу контактов ... Я предполагаю, что база данных имеет номер версии из 1, закодированных в нем, но ваш код Java имеет версию 2, поэтому он вызвал метод onUpgrade, который удалил таблицу контактов, а затем вызвал ваш пустой 'onCreateMethod', который ничего не сделал. Если это так, измените номер своей версии на один, удалите приложение и переустановите, и вы можете быть в бизнесе. – Barak