如何从其他活动更新数据库?

时间:2012-11-22 08:58:16

标签: android database sqlite android-activity sql-update

我几乎是一个新手,我想从另一个活动更新数据库。这意味着我有一个第一个活动,我正在编写一个DataBaseHandler(公共类MyDatabaseHandler扩展了SQLiteOpenHelper)。

然而,在第二项活动中,我正在添加一些数据:

MyDatabaseHandler db = new MyDatabaseHandler(this);
Contact peter = new Contact(1,"Peter", 27);
db.addContact(peter);

现在我想将彼得的年龄从27岁改为28岁,我想从另一项活动中做到这一点。所以,我正在写第三个活动:

MyDatabaseHandler db = new MyDatabaseHandler(this);
Contact peter = new Contact(1,"Peter", 28);
db.updateContact(peter);

但它不起作用。我想如果我给出相同的KEY_ID,在这种情况下为1,我可以从任何地方更改条目。但似乎我错了。能够 有人向我解释什么是正确的方法?

谢谢!

P.S。如果我从同一个活动进行更新,它可以正常工作,但如果我从另一个活动进行更新则不行:(

这是我的更新方法:

 public int updateContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName());
    values.put(KEY_PH_NO, contact.getAge());


    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
}

5 个答案:

答案 0 :(得分:1)

您必须定义一个与db交互的独立类,而不是在活动中包含代码。最好你必须使用ContentProvider。

答案 1 :(得分:1)

使用此代码

抱歉,我的英语不好......所以请加入它。

**DBAadapter db = new DBAadapter(this);
        db.open();
        thou = db.getAllFamilyMembers();

        Log.v("log"," thoughts " + thou); 
        db.close();**

在这个DBAadapter中,当数据库打开close方法时是哪个类。

getAllFamilyMembers()是DBAadapter类方法。

然后使用上面的代码获取其他活动中的数据。

答案 2 :(得分:1)

您在扩展SQLiteOpenHelper方面遇到了麻烦。如文档所述,它用于管理创建和更新(更新已发布的应用程序时)。请稍后为您节省很多麻烦,并查看 SQLitedatebase和更具体的SQLiteClosable。

<强> http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

更直接的答案的相关代码在您的助手类中。但是......保存自己: - )

答案 3 :(得分:1)

你必须做这样的课:

public class Database extends SQLiteOpenHelper  {

    private static final String DATABASE_NAME = "database.db";

    private static final String TABLE_NAME = "Contacts";

    private static final int DATABASE_VERSION = 1;

    private SQLiteDatabase myDb;

    public DatabaseInterventi(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        if(myDb == null || !isMyDbOpen())
            myDb = getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) { 

        Log.i("DatabaseHelper", "onCreate!");

        // Check if table already exists
        if(!isTableExists(TABLE_NAME)){

        Log.i("DatabaseHelper", "Create Table in DB");

        String sql = "CREATE TABLE {0} ({1} INTEGER PRIMARY KEY AUTOINCREMENT," + 
        " {2} TEXT NOT NULL,{3} TEXT NOT NULL, {4} INTEGER NOT NULL);";

        db.execSQL(MessageFormat.format(sql, InfoDBIntervento.TABLE_NAME, "id","Name","Surname","Tel"));

    }
    public void insertContact(String name, String surname, int tel){

        if(!myDb.isOpen())
            openDB();

        ContentValues cv = new ContentValues();
        cv.put("Name", name);
        cv.put("Surname", surname);
        cv.put("Tel", tel);

        myDb.insert(TABLE_NAME, null, cv);

        myDb.close();
    }
    public void updateContact(String name, String surname, int tel){

        if(!myDb.isOpen)
            openDB();

        ContentValues cv = new ContentValues();

        if(name != null)
            cv.put("Name", name);

        if(surname != null)
            cv.put("Surname", surname);

        if(tel != null)
            cv.put("Tel", tel);

        myDb.update(TABLE_NAME, cv, null, null);

        myDb.close();
    }

    public boolean isTableExists(String tableName) {

        if(!myDb.isOpen())
                openDB();

        Cursor cursor = myDb.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
        if(cursor!=null) {
            if(cursor.getCount()>0) {
                cursor.close();
                return true;
            }
        }
        cursor.close();
        return false;
    }

    public void openDB(){

        myDb = getWritableDatabase();
    }
}

然后,您必须对数据库类进行istanziate并调用其方法。

答案 4 :(得分:1)

您可以尝试通过更改SQLiteDatabase来解决问题db = this.getWritableDatabase();到SQLiteDatabase db = sqLiteHelper.getWritableDatabase();

这里可以找到一个很好的例子:http://android-er.blogspot.ro/2011/06/edit-row-in-sqlite-database-using.html