android - 从数据库中获取信息总是返回 -1
问题描述
我是在 android 上编程的新手,我不明白为什么从 SQLite 数据库中获取整数值总是返回 -1。如果数据库尚不存在,我的应用程序由我创建的主要活动组成,并以这种方式用全零填充第一行
DatabaseHelper databaseHelper = new DatabaseHelper(this);
Cursor data = databaseHelper.getInformation();
if(!data.moveToFisrt()) {
databaseHelper.addInformation(0, 0, 0);
}
现在我开始第二个实现自定义视图的活动。在这个活动中,我实现了一个自定义视图,并在自定义视图中更新了之前在主活动中创建的行,然后我以这种方式调用了 adInformation 方法
第二活动
private CustomView cv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
cv= new CustomView(this);
setContentView(R.layout.activity_game);
}
自定义视图
//all the constructors call init()
private void init(Context context){
/***/
databaseHelper = new DatabaseHelper(getContext());
int w, l, d;
Cursor data = databaseHelper.getInformation();
w = data.getColumnIndex(String.valueOf(1));
l = data.getColumnIndex(String.valueOf(2));
d = data.getColumnIndex(String.valueOf(3));
//here w,l,d are -1
}
这是我的数据库助手
public class DatabaseHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+TABLE_NAME1+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, W INT, D INT, L INT)");
//i have a second table
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME1);
onCreate(db);
}
public boolean addInformation(int w, int l, int d){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
if(w != -1) {
values.put("W", w);
}
if(d != -1)
values.put("D", d);
if(l != -1)
values.put("L", l);
long id = db.insert(TABLE_NAME1, null, values);
db.close();
if(id == -1)
return false;
else
return true;
}
public Cursor getInformation(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "SELECT * FROM " + TABLE_NAME1;
Cursor c = db.rawQuery(query,null);
return c;
}
}
我还注意到我的数据库包含第二个表。第二个选项卡填充在自定义视图中,然后在我返回主要活动时显示。自定义视图中插入的记录正确显示在主活动中。此外,如果在自定义视图中我必须先调用 getInformation,然后调用 addInformation (5,5,5) 并在 getInformation () 之后返回 -1
解决方案
getColumnIndex 将列名转换为列号。除非您的列被命名为“1”、“2”和“3”,否则此代码不正确。我想你想要getInt(getColumnIndex("name of column"))
请记住,SELECT * 返回的列的顺序是任意的,因此不要假设 1、2 和 3 中的内容。而是使用我在上面发布的带有“W”、“D”和“L”的代码
推荐阅读
- php - 来自 php API 的响应不起作用
- apache-flink - 一个窗口上有两种类型的触发器?
- angularjs - 使用 angularjs 和 ibm bluemix 加载图像
- c++ - 回调的这种用法是惯用的吗?
- php - 如何获取与注册相关的注册类型的名称和价格?(雄辩)
- java - Using a webcrawler to fetch data
- android - 如何在服务中将适配器列表项视图与布尔值绑定
- c# - 如何创建通用自定义模型绑定器
- python - 使用 allow_tags 的 Django 2.0 模型管理链接不起作用
- sql - 如何创建 Oracle 审计触发器?