从Android Studio中的sqlite数据库访问数据

时间:2015-06-02 18:07:41

标签: android

我正在尝试从sqlite数据库获取数据,但它显示了

error-"java.lang.IllegalStateException:attempt to re-open an already closed object :SQLiteQuery : Select *from MyCatlog" .

请帮帮我。谢谢

MyHelper.class
public class MyHelper extends SQLiteOpenHelper {
static final String DATABASE_NAME="MyDatabase";
static final int DATABASE_VERSION=1;
static final String TABLE_NAME="MyCatalog";
static final String UID="ID";
static final String UTITLE="TITLE";
static final String UPRICE="PRICE";
static final String UDESCP="DESCP";
static final String CREATE_TABLE="CREATE TABLE "+  TABLE_NAME"("+UID+"VARCHAR(25) PRIMARY KEY,"+UTITLE+ "VARCHAR(255),"+UPRICE+"VARCHAR(255),"+UDESCP+"  VARCHAR(255));";
private static final String DROP_TABLE="DROP TABLE" +TABLE_NAME+"IF EXISTS";
private Context context;
public MyHelper(Context context)
{
super(context,DATABASE_NAME,null,DATABASE_VERSION);
this.context=context;
Message.message(context,"Constructor called");
}
public void onCreate(SQLiteDatabase db){
Message.message(context, "on create");
db.execSQL(CREATE_TABLE);
Message.message(context,"table created");
}
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
{
Message.message(context,"upgrade called");
db.execSQL(DROP_TABLE);
onCreate(db);
}
public void insertData(String id,String title, String price, String descp)
{
ContentValues contentValues=new ContentValues();
SQLiteDatabase db=getWritableDatabase();
contentValues.put(UID,id);
contentValues.put(UTITLE,title);
contentValues.put(UPRICE,price);
contentValues.put(UDESCP, descp);
db.insert(TABLE_NAME, null, contentValues);
Message.message(context, "inserted");
}
public String getData() {
SQLiteDatabase db = getWritableDatabase();
String selquery = "SELECT * FROM " + TABLE_NAME;
String[] columns = {UID, UTITLE, UPRICE, UDESCP};
Cursor cursor = db.rawQuery(selquery, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index1 = cursor.getColumnIndex(UID);    //to get index of all columns
int index2 = cursor.getColumnIndex(UTITLE);
int index3 = cursor.getColumnIndex(UPRICE);
int index4 = cursor.getColumnIndex(UDESCP);
String id = cursor.getString(index1);
String title = cursor.getString(index2);
String price = cursor.getString(index3);
String descp = cursor.getString(index4);
buffer.append(id + "  " + title + "  " + price + "  " + descp);
cursor.close();
}
return buffer.toString();
}
}

MainActivity.class
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyHelper helper=new MyHelper(this);
SQLiteDatabase sqLiteDatabase=helper.getWritableDatabase();
//helper.onCreate(sqLiteDatabase);
helper.insertData("w2","ab","100","axy");
String data=helper.getData();
Message.message(this,data);
}
}

1 个答案:

答案 0 :(得分:1)

你为什么要在while(...)内关闭?

while (cursor.moveToNext()) {
    // something
    cursor.close();
}