cursor不从sqlite数据库中检索数据

时间:2011-12-02 19:59:48

标签: java android sqlite

我在sqlite数据库中面临问题。实际上我有3个.java文件和一个数据库助手类,其中创建了我的数据库,表创建插入等所有CRUD函数,我试图从其他一些活动类调用它们,但它不是调用而不是从中检索数据表。这是我的文件,请任何人告诉我我在哪里犯错误。

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语句,现在没有问题。但是如果我在调用插入函数后调用另一个活动类,则会显示“forcesclose”错误。下一个活动类如下:

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类中出错的地方。

1 个答案:

答案 0 :(得分:0)

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

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

在你的onDestroy或暂停。 呼叫

m.close();

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

编辑:

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

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

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

然后,您将拥有在您需要插入和检索信息的活动中关闭和打开数据库的方法。