0

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

我必须做的所有步骤和事情是什么?

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

编辑:这是我在第二个活动中创建和保存数据库的代码: Android 应用程序在调用 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();

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

我该怎么办?

4

4 回答 4

2

在我自己的 Android 应用程序中,我创建了一个扩展 SQLiteOpenHelper 的类。任何 Activity 都可以创建此类的实例,以便与数据库进行通信。如果您需要示例,可以在此处查看我的课程的完整代码。

于 2013-04-06T23:09:15.207 回答
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 认为它尚不存在并尝试创建它(因为它无法写入而无法创建)

希望这可以帮助;)

于 2013-04-07T15:33:26.013 回答
2

完整而正确的答案是这样的:

import myprojectname.ActivityB.SQLiteDbHelper;

然后使用:

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

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

于 2013-04-07T16:12:45.793 回答
1

您正在通过 Activity 与您的数据库进行交互,这不是一个好方法。您应该创建一个与扩展 SQLiteOpenHelper 的 Activity 分开的普通类文件,并具有您为读取和写入数据库的直接交互创建的公共方法。快速搜索显示了一些这样做的好例子。

然后在您需要从中调用数据的任何地方(例如从您的任何一个 Activites 中调用数据)或写入数据库,您只需要...

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

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

于 2013-04-06T22:54:40.377 回答