将变量从一个活动传输到数据库

时间:2012-03-25 17:45:03

标签: android database android-intent

package nidhin.survey;

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

static final String TABLE = "mygrades";
static final String NAME = "name";
static final String VALUE = "value";

DatabaseHelper(Context context)
{
    super(context, "grades.sqlite", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) 
{

    db.execSQL("CREATE TABLE " + TABLE + " (_id INTEGER PRIMARY KEY AUTOINCREMENT," + 
               " name TEXT, value REAL);");
    ContentValues cv = new ContentValues();

    cv.put(NAME, "1.Do you have a car");
    cv.put(VALUE, "yes");
    db.insert(TABLE, NAME, cv);

    cv.put(NAME, "2.What is the make");
    cv.put(VALUE, "mazda");
    db.insert(TABLE, NAME, cv);

    cv.put(NAME, "3.What is the year");
    cv.put(VALUE, "2010");
    db.insert(TABLE, NAME, cv);

    cv.put(NAME, "4.What do you like about the car ");
    cv.put(VALUE, "its fast" );
    db.insert(TABLE, NAME, cv);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
    // TODO Auto-generated method stub
    android.util.Log.w("mygrades", "Upgrading database, this will destroy all data");
    db.execSQL("DROP TABLE IF EXISTS " + TABLE);
    onCreate(db);
}

}

我在另一项活动中进行了调查,并且值将从该活动传递到此数据库活动。我正在考虑将调查中的答案作为字符串变量传递给数据库,然后数据库可以存储答案。

这是一种有效的方法吗?或者还有其他方法吗?内容提供商如何提供帮助?

2 个答案:

答案 0 :(得分:1)

不太确定你的意思是“将它们作为字符串变量传递”。我所做的是在DatabaseHelper中创建公共方法,并使用它们从其他活动向db添加记录。

public long createEventType(String eventType, String eventTypeDesc) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(EVENTTYPE_NAME, eventType);
    initialValues.put(EVENTTYPE_DESC, eventTypeDesc);
    return mDb.insertWithOnConflict(EVENTTYPE_TABLE, null, initialValues,
            SQLiteDatabase.CONFLICT_IGNORE);
}

然后,当我想从另一个活动中添加这种类型的记录时,我只需这样做:

mDbHelper.createEventType(title, desc);

答案 1 :(得分:1)

有助于了解您计划在调查中提出多少问题,如何构建问题以及您是否计划及时更新调查问题(或者您对收集的数据做了什么? )。如果您计划在代码中插入六个以上的问题,那么数据库是一个很好的选择,同时将答案存储为Strings是一个不错的选择(但这取决于您实际构建问题的方式)。 / p>

如果问题的数量非常少(并且不打算更新调查,或者是一次性调查),您也可以将它们存储在内部存储上的文件中(它将是私有的,因此只有您的应用程序可以访问它。)

如果您打算将应用中的数据公开给用户手机上安装的其他应用,则ContentProvider非常有用。我怀疑您是否计划将该调查的结果公开给其他已安装的应用,因此ContentProvider不应该让您感兴趣。

相关问题