【发布时间】:2014-03-17 23:50:32
【问题描述】:
我正在尝试访问我的 SQlite 表中的所有值并将它们存储为整数值,但每次我运行程序时它都会崩溃
当我单击按钮(在模拟器上或在手机上运行)时,它会崩溃,而我希望看到 textview 更改文本(取决于我单击的按钮)
代码如下:
(main_activity)
int x = 0;
int y =0;
int[] stats = new int[]{};
@Override
public void onClick(View arg0) {
switch(arg0.getId()){
case R.id.button1:
x= 1;
Database db = new Database(this);
db.open();
db.createEntry(x, y);
stats = db.getStatistics();
db.close();
x= 0;
txt_view.setText("");
txt_view.setText(Integer.toString(stats[0]));
break;
case R.id.button2:
y=1;
Database db2 = new Database(this);
db2.open();
db2.createEntry(x, y);
stats = db2.getStatistics();
db2.close();
cravings = 0;
db2.getStatistics();
txt_view2.setText("");
txt_view2.setText(Integer.toString(stats[1]));
break;
}
}
这是我的数据库类
public class Database extends Activity{
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
public static final String DATABASE_NAME = "DB_NAME";
public static final String TABLE_NAME = "DB_TABLE";
public static final String NUM_SMOKES = "NUM_X";
private static final int DATABASE_VERSION = 1;
public static final String NUM_CRAVINGS = "NUM_Y";
public static final String CreateMyDatabase = "create table "+ TABLE_NAME +" ("+NUM_SMOKES+" integer default 0,"+NUM_CRAVINGS+" integer default 0)";
private static class DbHelper extends SQLiteOpenHelper{
public DbHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CreateMyDatabase);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("drop table if exists "+ TABLE_NAME);
onCreate(db);
}}
public Database(Context c ){
ourContext = c;}
public Database open() throws SQLException{
ourHelper = new DbHelper(ourContext, DATABASE_NAME, null, DATABASE_VERSION);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close(){
ourHelper.close();
}
public long createEntry(int x, int y){
ContentValues cv = new ContentValues();
cv.put(NUM_X, x);
cv.put(NUM_Y, y);
return ourDatabase.insert(DATABASE_NAME, null, cv);
}
public int[] getStatistics(){
String[] column = new String[]{NUM_X,NUM_Y};
Cursor c = ourDatabase.query(DATABASE_NAME, column, null, null, null,
null, null);
int x=0;
int y= 0;
int i_X= c.getColumnIndex(NUM_X);
int i_Y= c.getColumnIndex(NUM_Y);
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
y+= c.getInt(i_Y);
x+= c.getInt(i_X);
}
int[] X&Y= new int[]{x, y};
return X&Y;
}
感谢您的帮助!
【问题讨论】:
-
您在日志中得到什么错误信息?
-
不存在这样的表,我之前浏览过它并完全错过了它,并修复了代码。现在工作。问题是我试图通过 db.insert(DATABASE_NAME) 插入而不是 db.insert(TABLE_NAME)