我已设法创建数据库并拥有保存数据的方法。这是我的第二项活动(从第一项活动开始)。我想在第一个活动中打开该数据库并从中读取(如果现在有任何数据)。
我需要做的所有步骤和事情是什么?
我尝试从第二个活动导入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导致错误:无法对非静态方法进行静态引用
我该怎么办?
答案 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)将取决于您在此类文件中设置的方法。