0

私はなんとかデータベースを作成し、データを保存する方法を持っています。それは私の2番目の活動です(1番目の活動から開かれています)。最初のアクティビティでそのデータベースを開き、そこから読み取りたい (現在データがある場合)。

私がしなければならないすべてのステップとことは何ですか?

2番目のアクティビティからSQLiteOpenHelperクラスをインポートしてそのように読んでみましたが、結果はありません。また、まったく同じ SQLiteOpenHelper を 1 番目と 2 番目のアクティビティの両方に配置しようとしましたが、これも正しくありません。

編集:2番目のアクティビティにあるデータベースを作成して保存するための私のコードは次のとおりです: SQLiteHelperの呼び出しでAndroidアプリがクラッシュする

編集 [2]: 私はこのように sth を試しました: 私の 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

ここでは、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) {}
}
}

DBを作成するときに使用します

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

DBから読み取りたい場合は、

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

警告、DB がまだ作成されていない場合、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 に答える
2

私自身の Android アプリで、SQLiteOpenHelper を拡張するクラスを作成しました。どのアクティビティでも、データベースと通信するためにこのクラスのインスタンスを作成できます。例が必要な場合は、ここで私のクラスの完全なコードを見ることができます。

于 2013-04-06T23:09:15.207 に答える
1

アクティビティからデータベースとやり取りしていますが、これは良い方法ではありません。いずれかのアクティビティとは別に、SQLiteOpenHelper を拡張し、データベースへの読み取りと書き込みの直接的な対話のために作成するパブリック メソッドを持つプレーン クラス ファイルを作成する必要があります。簡単に検索すると、これを行う良い例がいくつか表示されます。

次に、そこからデータを呼び出す必要がある場所(アクティビティのいずれかからなど)またはdbに書き込む必要がある場所では、次のようなものだけが必要です...

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

どのメソッドを使用できるか (つまり、db.readFromTable) は、このクラス ファイルでどのメソッドをセットアップするかによって決まります。

于 2013-04-06T22:54:40.377 に答える