【问题标题】:Accessing values from SQlite从 SQlite 访问值
【发布时间】: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)

标签: android sqlite


【解决方案1】:

尝试插入这样的值:

//In your model define method that returns content values for that table like     
public class SomeModel{
private int field1;
public ContentValues getContentValues(){
        ContentValues localContentValues = new ContentValues();
        localContentValues.put("id", getId());
        //Other values...
        return localContentValues;
    }

}
//And in sqliteopen handler do insert like this
//Pass variables to constructor
SomeModel model=new SomeModel(...);
ContentValues modelValues = model.getContentValues();
this.db.insert("SomeModel", null, modelValues );

【讨论】:

  • 谢谢,我使用了您提供的代码,它帮助清理了我的代码。
  • 您应该在每次更改时对数据库进行版本控制,这样可以节省您的时间和错误。如何做到这一点,您可以在堆栈上找到可能的问题/答案,例如:stackoverflow.com/questions/3424156/…
【解决方案2】:

错误是“不存在这样的表”,我之前查看过它并完全错过了它,并修复了代码。现在它可以工作了。问题是我试图通过db.insert(DATABASE_NAME); 插入而不是应该是db.insert(TABLE_NAME);

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2016-12-10
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多