Android的sqlight - 始终为空
问题描述:
每次我使用数据库其空,我只是不明白。Android的sqlight - 始终为空
我使用的SQL此代码时,我有一个查询:
public class GameSQLHelper {
static final String[] COUNTRIES = new String[] {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra"
};
private static final String DB_PATH = "/countryCityGame/databases/";
private static final String DATABASE_NAME = "events.db";
private static final int DATABASE_VERSION = 1;
private final Context mCtx;
// Table name
public static final String TABLE = "myDataBase";
// Columns
public static final String LETTER = "letter";
public static final String TYPE = "type";
public static final String VALUE = "value";
//my database
SQLiteDatabase myDataBase;
private static class DatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = null;
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table " + TABLE + "(" + BaseColumns._ID
+ " integer primary key autoincrement, " + LETTER + " text not null, "
+ TYPE + " text not null," + VALUE + " text not null);";
Log.d("EventsData", "onCreate: " + sql);
db.execSQL(sql);
insertValuesToDB(db);
}
private void insertValuesToDB(SQLiteDatabase db) {
if (db == null){
}
else{
db.execSQL("INSERT INTO "
+ TABLE
+ " ("+LETTER+","+ TYPE +"," + VALUE +")"
+ " VALUES ('A', 'country', 'Angola');");
ContentValues initialValues = new ContentValues();
for (int i = 0 ; i < COUNTRIES.length ; i++){
Character tmp = (Character)COUNTRIES[i].charAt(0);
initialValues.put(VALUE, COUNTRIES[i]);
initialValues.put(TYPE, "country");
initialValues.put(LETTER,tmp.toString(tmp));
db.insert(TABLE, null, initialValues);
}
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS notes");
onCreate(db);
}
}
/**
* Constructor - takes the context to allow the database to be
* opened/created
*
* @param ctx the Context within which to work
*/
public GameSQLHelper(Context ctx) {
this.mCtx = ctx;
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion >= newVersion)
return;
String sql = null;
if (oldVersion == 1)
sql = "alter table " + TABLE + " add note text;";
if (oldVersion == 2)
sql = "";
Log.d("EventsData", "onUpgrade : " + sql);
if (sql != null)
db.execSQL(sql);
}
public void openDataBase() throws SQLException{
//Open the database
String myPath = DB_PATH + DATABASE_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
public boolean existInDataBase(String serchStr){
Cursor c = null ;
try{
openDataBase();
c = myDataBase.query(true, TABLE, new String[] {TYPE
}, VALUE + "=" + serchStr, null,
null, null, null, null);
}
catch(Exception e){
Log.d("sqlExacption", e.getMessage());
}
if (c == null)
return false;
return true;
}
}
每当我调用这个类(我认为初始化它的一个instace:mDbHelper = new GameSQLHelper(this);
其中,这是一个活动)
我总是让我的mDbHelper为null,我该如何改变它?这是我第一次使用mysql平台以外的SQL工作,所以我有点理解这个概念,而android记事本的例子并没有帮助我。
答
请勿通过SQLiteDatabase#openDatabase
打开数据库。相反,请创建DatabaseHelper
的实例并在其上调用。
请问您能否给出一个解释上述的例子。 thanx – 2010-06-18 16:57:10
有人可以给我看一个例子吗? – 2010-06-19 21:08:02