gpt4 book ai didi

java - 游标未从 sqlite 数据库检索数据

转载 作者:行者123 更新时间:2023-12-01 05:34:41 24 4
gpt4 key购买 nike

我在 sqlite 数据库中遇到问题。实际上我有 3 个 .java 文件和一个数据库帮助程序类,其中创建了我的数据库,创建了表插入等所有 CRUD 函数,我试图从其他一些 Activity 类中调用它们,但它没有调用也没有从中检索数据 table 。这是我的文件,请任何人告诉我哪里出错了。

MainActivity.java

package mad.project;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatabaseHelper m = new DatabaseHelper(this);
m.onCreate();

Button menubutton4 = (Button) findViewById(R.id.InsertRecipeButton);

menubutton4.setOnClickListener(new View.OnClickListener() {

public void onClick(View argo) {

Intent intent4 = new Intent(MainActivity.this, TryActivity.class);
startActivity(intent4);
}
});
}
}

当我单击按钮时,我们将到达 TryActivity 类,如下所示:

package mad.project;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class TryActivity extends Activity{

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.insertrecipe);
final DatabaseHelper m = new DatabaseHelper(this);
final EditText RecipeBox = (EditText) findViewById(R.id.RecipeBox);
Button submit_button = (Button) findViewById(R.id.SubmitRecipe);

submit_button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
String a=RecipeBox.getText().toString();
m.Insert_Recipe_Into_DB(a);
Intent intent23 = new Intent(TryActivity.this,RoughActivity.class);
startActivity(intent23);
}
});}}

在这个类中,我创建了Databsehelper类的对象“m”,该对象用于调用DatabaseHelper类的Insert_Recipe_Into_DB函数。到目前为止,如果我从上面删除 Intents 语句,就没有问题了。但是,如果我在调用插入函数后调用另一个 Activity 类,它会显示“forcesclose”错误。下一个 Activity 类别如下:

RoughActivity.java

package mad.project;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class RoughActivity extends Activity{

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final DatabaseHelper m = new DatabaseHelper(this);
String [] rec ;
rec=m.get_recipe();
int rec_len = rec.length;
String [] todaymenu = new String[rec_len];
for(int i = 1;i<=rec_len;i++)
{
todaymenu[i]=rec[i-1];
}
this.setListAdapter(newArrayAdapter<String>(RoughActivity.this,
R.layout.todays_menu_view,R.id.Today,rec));
}

private void setListAdapter(ArrayAdapter<String> arrayAdapter) {
// TODO Auto-generated method stub
}
}

DatabaseHelper.java

package mad.project;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper{

static final String dbName="CookBookDatabase";

public DatabaseHelper(Context context)
{
super(context, dbName, null, 33);
// TODO Auto-generated constructor stub
}
static final String Try_Table= "Try_Table";
static final String Recipe= "Recipe";

public void onCreate() {
execSQL("CREATE TABLE "+Try_Table+" ( "+ Recipe + " VARCHAR ) " );
}

private void execSQL(String string) {
// TODO Auto-generated method stub
}

public void Insert_Recipe_Into_DB(String a)
{
SQLiteDatabase db= this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(Recipe, a);
db.insert(Try_Table, Recipe, cv);
db.close();
}

String[] get_recipe()
{
String [] recipe = null;
SQLiteDatabase db=this.getReadableDatabase();

Cursor count =db.rawQuery("SELECT COUNT(*) FROM "+Try_Table, null);

count.moveToFirst();
if(count.getInt(0) == 0)
{
db.close();
return recipe;
}
if(count.getInt(0)!= 0 )
{

Cursor cur=db.rawQuery("SELECT * FROM "+Try_Table, null);

int br_count =cur.getCount();
if(br_count != 0)
{
int i=0, index;
recipe= new String[br_count];
cur.moveToFirst();
do {
index=cur.getColumnIndex(Recipe);
recipe[i++]=cur.getString(index);

}while(cur.moveToNext());
}
}


db.close();
return recipe;
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub

}
}

请告诉我在 DatabaseHelper 类还是 RoughActivity 类中哪里出错了。

最佳答案

您需要在检索数据或将数据插入 SQLite 数据库的 Activity 中打开数据库。还要确保完成后将其关闭。

final DatabaseHelper m = new DatabaseHelper(this);
m.open();

在你的 onDestroy 或暂停中。调用

m.close();

这可能是问题所在,因为我看不到您在代码中打开数据库的位置。

编辑:

在您的 DatabaseHelper 类中。创建一个方法。

public void open(){
db.open();
}

public void close(){
db.close()
}

然后,您将可以在需要插入和检索信息的 Activity 中关闭和打开数据库。

关于java - 游标未从 sqlite 数据库检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8361906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com