从另一个活动中创建的数据库中读取 - 所有步骤

时间:2013-04-06 22:24:12

标签: android database eclipse sqlite

我已设法创建数据库并拥有保存数据的方法。这是我的第二项活动(从第一项活动开始)。我想在第一个活动中打开该数据库并从中读取(如果现在有任何数据)。

我需要做的所有步骤和事情是什么?

我尝试从第二个活动导入SQLiteOpenHelper类并以此方式读取,但没有结果。另外,尝试在第1和第2个活动中完全放置相同的SQLiteOpenHelper,这也是不对的。

编辑: 这是我在第二个活动中创建和保存数据库的代码: Android app crashing on calling SQLiteHelper

编辑[2]: 我试过这样的事: 我的第二个活动(在SQLiteDbHelper中):

public String getSP(){
        String sp;          
        String[] projection = {
                SQLiteDbHelper.COLUMN_NAME_SP, SQLiteDbHelper.COLUMN_NAME_ST};
        Cursor cursor = null;
        cursor = this.getReadableDatabase().query(SQLiteDbHelper.TABLE_NAME, projection, null, null, null, null, null);
        if(cursor != null){
            if(cursor.moveToFirst()){
                sp = cursor.getString(cursor.getColumnIndexOrThrow(SQLiteDbHelper.COLUMN_NAME_SP));
                return sp;
            }
        }
        cursor.close();
        return " - ";
    }

而且,在我的第一个活动中,我需要数据库的结果:

String sp = SQLiteDbHelper.getSP();

但是,it0s导致错误:无法对非静态方法进行静态引用

我该怎么办?

4 个答案:

答案 0 :(得分:2)

在我自己的Android应用程序中,我创建了一个扩展SQLiteOpenHelper的类。任何Activity都可以创建此类的实例,以便与数据库进行通信。如果你想要一个例子,你可以看到我的班级here的完整代码。

答案 1 :(得分:2)

这里,使用此示例来扩展SQLiteOpenHelper

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

public class YourSQLAdapter {
public static final String DBNAME  = "filename.db";
public static final String TABLE   = "tablename";
public static final int    VERSION = 1;

public static final String KEY_ID = "_id";
    // Add other fields here

private SQLiteDatabase sqLiteDatabase;
private SQLiteHelper sqLiteHelper;
private Context mContext;

    //this is how I write the create db script, you may do it you own way;)
public static String a = "TEXT";
public static String b = "INTEGER";
public static String c = "PRIMARY KEY";
public static String d = "AUTOINCREMENT";
public static String e = " ";
public static String f = ",";

private static final String SCRIPT_CREATE_DATABASE =
      "CREATE TABLE IF NOT EXISTS " + TABLE + e + "(" + 
      KEY_ID  + e + b + e + c + e + d + f + e + ");";


public YourSQLAdapter(Context context){
    mContext = context;
}

public void close() {
    sqLiteHelper.close();
}

public int deleteAll() {
    return sqLiteDatabase.delete(TABLE, null, null);
}

public long insert(String value) {
    ContentValues cv = new ContentValues();
    rooster.put("fieldname(or use its key value)", value);
    return sqLiteDatabase.insert(TABLE, null, cv);
}

public YourSQLAdapter openToRead() throws SQLException {
    try {
        sqLiteHelper = new SQLiteHelper(mContext, DBNAME, null, 1);
        sqLiteDatabase = sqLiteHelper.getReadableDatabase();
    } catch (Exception e){}
    return this;
}

public YourSQLAdapter openToWrite() throws SQLException {
    try {
        sqLiteHelper = new SQLiteHelper(mContext, DBNAME, null, 1);
        sqLiteDatabase = sqLiteHelper.getWritableDatabase();
    } catch (Exception e){}
    return this;
}

public Cursor queueAll() {
    String[] KEYS = { KEY_ID /* and all other KEYS*/ };
    return sqLiteDatabase.query(TABLE, KEYS, null, null, null, null, null);
}

public Cursor queueDay(String query) {
    String[] KEYS = { KEY_ID /* and all other KEYS*/ };
    return sqLiteDatabase.query(TABLE, KEYS, query, null, null, null, null);
}

public class SQLiteHelper extends SQLiteOpenHelper {
    public SQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SCRIPT_CREATE_DATABASE);
    }

    public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {}
}
}

创建数据库时使用

YourSQLAdapter sql = new YourSQLAdapter(context);
sql.openToWrite();

如果你想从数据库中读取

YourSQLAdapter sql = new YourSQLAdapter(context);
sql.openToRead();

警告,如果尚未创建数据库,则会在openToRead()上出现异常,因为SQLiteOpenHelper看到它还不存在并尝试创建它(因为它无法写入而无法写入)

希望这会有所帮助;)

答案 2 :(得分:2)

完整而正确的答案是:

import myprojectname.ActivityB.SQLiteDbHelper;

然后使用:

SQLiteDbHelper db = new SQLiteDbHelper(this);
String sp = SQLiteDbHelper.getSP();

感谢大家分享他们的想法,他们帮助我实现了这个目标!

答案 3 :(得分:1)

您正在从一个Activity与您的数据库进行交互,这不是一个很好的方法。您应该创建一个普通的类文件,该文件与扩展SQLiteOpenHelper的Activity分开,并且具有您为读取和写入数据库的直接交互创建的公共方法。快速搜索shows some good examples of doing this.

然后你需要从它调用数据的任何地方(比如来自你的任何一个Activites)或写入数据库,你只需要像......这样的东西......

MyDBClassName db = new MyDBClassName();
String someStoredValue = db.readFromTable(RowID-or-searchargs);

您可以使用哪些方法(即db.readFromTable)将取决于您在此类文件中设置的方法。