我正在尝试从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);
}
}
答案 0 :(得分:1)
你为什么要在while(...)
内关闭?
while (cursor.moveToNext()) {
// something
cursor.close();
}