android sqlite游标计数为0?
您好,我是新使用SQLite的。当我在android sqlite游标计数为0?,android,sqlite,Android,Sqlite,您好,我是新使用SQLite的。当我在getData()方法中使用原始查询创建游标时,当我希望游标的计数为1时,它会说游标的计数为0。当我将信息存储在表中时,程序运行良好,据我所知,存储正确。任何关于我的计数为何为0的信息都将不胜感激 public class DBHandler extends SQLiteOpenHelper { private static final int DATA_BASE_VERSION = 1; private static final String DATAB
getData()
方法中使用原始查询创建游标时,当我希望游标的计数为1时,它会说游标的计数为0。当我将信息存储在表中时,程序运行良好,据我所知,存储正确。任何关于我的计数为何为0的信息都将不胜感激
public class DBHandler extends SQLiteOpenHelper {
private static final int DATA_BASE_VERSION = 1;
private static final String DATABASE_LINK_NAME = "appData.db";
public static final String TABLE_APP_DATA = "table_data";
public static final String COLUMN_ID = "col_id";
public static final String COLUMN_PERSON1 = "col_person1";
public static final String COLUMN_PERSON2 = "col_person2";
public static final String COLUMN_DS= "col_ds";
public static final String COLUMN_GE= "col_ge";
String QUERY_DATA = "CREATE TABLE " + TABLE_APP_DATA + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY, " +
COLUMN_PERSON1 + " TEXT, " +
COLUMN_PERSON2 + " TEXT, " +
COLUMN_DS + " TEXT, " +
COLUMN_GE + " TEXT " +
");";
public DBHandler(Context context) {
super(context, DATABASE_LINK_NAME, null, DATA_BASE_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_APP_DATA);
onCreate(db);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(QUERY_DATA);
}
//resets the data base
public void reset(){
onUpgrade(getReadableDatabase(),0,0);
}
//saves data application
public void saveData(){
Data data = Data.getInstance();
//clear tables
reset();
//save app data
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_ID, 0);
values.put(COLUMN_PERSON1,data.getPerson1());
values.put(COLUMN_PERSON2,data.getPerson2());
values.put(COLUMN_DS,String.valueOf(data.doesSex()));
values.put(COLUMN_GE,String.valueOf(data.doesGameExists()));
db.insert(TABLE_APP_DATA, null, values);
db.close();
System.out.println("Successfully added app data");
}
//load app data
public void loadData(){
SQLiteDatabase db = getWritableDatabase();
Data.getInstance().updataDataFile(getData(db));
db.close();
}
public Data getData(SQLiteDatabase db){
String query = "SELECT * FROM " + TABLE_APP_DATA + " WHERE 1";
//cursor points to location
Cursor c = db.rawQuery(query,null);
c.moveToFirst();
if(c.getCount() <= 0)
System.out.println("The Cursor count is 0!");
String p1 = c.getString(c.getColumnIndex(COLUMN_PERSON1));
String p2 = c.getString(c.getColumnIndex(COLUMN_PERSON2));
boolean doesSex = Boolean.valueOf(c.getString(c.getColumnIndex(COLUMN_DS)));
boolean gameExists = Boolean.valueOf(c.getString(c.getColumnIndex(COLUMN_GE)));
return new Data(p1,p2,doesSex,gameExists);
}
}
public类DBHandler扩展了SQLiteOpenHelper{
私有静态最终int数据库版本=1;
私有静态最终字符串数据库\u LINK\u NAME=“appData.db”;
公共静态最终字符串TABLE\u APP\u DATA=“TABLE\u DATA”;
公共静态最终字符串列\u ID=“col\u ID”;
公共静态最终字符串列\u PERSON1=“col\u PERSON1”;
公共静态最终字符串列\u PERSON2=“col\u PERSON2”;
公共静态最终字符串列\u DS=“col\u DS”;
public static final String COLUMN\u GE=“col\u GE”;
String QUERY_DATA=“CREATE TABLE”+TABLE_APP_DATA+”(“+
列ID+“整数主键,”+
列_PERSON1+“文本,”+
第2列+文本+
列\u DS+“文本,”+
列_GE+“文本”+
");";
公共DBHandler(上下文){
超级(上下文、数据库链接名称、空、数据库版本);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在,则删除表格”+表格应用程序数据);
onCreate(db);
}
@凌驾
public void onCreate(SQLiteDatabase db){
db.execSQL(查询数据);
}
//重置数据库
公共无效重置(){
onUpgrade(getReadableDatabase(),0,0);
}
//在应用程序中保存数据
公共void saveData(){
Data=Data.getInstance();
//清理桌子
重置();
//保存应用程序数据
SQLiteDatabase db=getWritableDatabase();
ContentValues=新的ContentValues();
value.put(列ID,0);
value.put(列_PERSON1,data.getPerson1());
put(第2列,data.getPerson2());
value.put(COLUMN\DS,String.valueOf(data.doesSex());
value.put(COLUMN_GE,String.valueOf(data.doesGameExists());
db.insert(表格应用数据,空,值);
db.close();
System.out.println(“成功添加应用程序数据”);
}
//加载应用程序数据
公共void loadData(){
SQLiteDatabase db=getWritableDatabase();
Data.getInstance().UpdateDataFile(getData(db));
db.close();
}
公共数据getData(SQLiteDatabase db){
String query=“选择*自”+表格\应用\数据+“其中1”;
//光标指向位置
游标c=db.rawQuery(查询,空);
c、 moveToFirst();
如果(c.getCount(),“WHERE 1”是什么意思?
?您还需要使用列名称和WHERE conditions@ρ魈σѕρєK,您的“WHERE 1”查询被禁用。1应该是一个列名称,例如“WHERE”+“column\u name”;因此,在getData方法中,您可能希望获取列_PERSON1?您是否试图获取整个表或某个特定的值,该值等于可以位于列中的特定值?我有一个数据对象,其中包含2个字符串和2个布尔值,因此这4个值是特定的values@AdamGardner其中1
对原始SQLite没有问题。但不确定是否Android框架会做一些额外的检查。但是如果您运行一个简单的查询,比如-SELECT*fromMyTable,其中1
,这将返回所有行,而SELECT*fromMyTable,其中0
返回0行