我有sqlite数据库,我插入一行但它会显示forceclose

时间:2011-12-28 04:12:58

标签: android android-layout android-manifest

这个包含sqlite数据库的代码,当我点击插入按钮时,我需要一个按钮和删除按钮我希望在我的表中插入一行代码没有任何错误不显示错误但是在模拟器中它将显示强制关闭错误< / p>

包com.android.sample;

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

public class DBAdapter 
{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "name";
//    public static final String KEY_FNAME = "fname";
//    public static final String KEY_PID = "pid";
//    public static final String KEY_SEX = "sex";
//  
    private static final String TAG = "DBAdapter";

    private static final String DATABASE_NAME = "sqldb";
    private static final String DATABASE_TABLE = "Mytable";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
        "create table Mytable (_id integer primary key autoincrement, "+ "name text not null);";

    private final Context context; 

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db; 

    public DBAdapter(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
        int newVersion) 
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion 
                    + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS titles");
            onCreate(db);
        }
    }    

    //---opens the database---
    public DBAdapter open() throws SQLException 
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---closes the database---    
    public void close() 
    {
        DBHelper.close();
    }

    //---insert a title into the database---
    public long insertTitle(String name) 
    {
        ContentValues initialValues = new ContentValues();
      //  initialValues.put(KEY_ROWID, _id);
        initialValues.put(KEY_NAME, name);
//        initialValues.put(KEY_FNAME, fname);
//        initialValues.put(KEY_PID,pid);
//        initialValues.put(KEY_SEX,sex);
//        
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //---deletes a particular title---
    public boolean deleteTitle(long rowId) 
    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + 
                "=" + rowId, null) > 0;
    }






    public Cursor getAllTitles() 
    {
        return db.query(DATABASE_TABLE, new String[] {
                KEY_ROWID, 
                KEY_NAME,
                }, 
                null, 
                null, 
                null, 
                null, 
                null);
    }

    //---retrieves a particular title---
    public Cursor getTitle(long rowId) throws SQLException 
    {
        Cursor mCursor =
                db.query(true, DATABASE_TABLE, new String[] {
                        KEY_ROWID,
                        KEY_NAME,
                     }, 
                        KEY_ROWID + "=" + rowId, 
                        null,
                        null, 
                        null, 
                        null, 
                        null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    //---updates a title---
    public boolean updateTitle(long _id, String name, 
    String fname, String pid,String sex) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_ROWID, _id);
        args.put(KEY_NAME, name);

        return db.update(DATABASE_TABLE, args, 
                         KEY_ROWID , null) > 0;
    }
}

SQlit data example


package com.android.sample;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class sqlieDataExample extends Activity {
    Button insert_but,cancle_but,retrive_but;
    String str;
    TextView tv;
    DBAdapter db;

     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.sqliteexample);
            Intent in=getIntent();
            Bundle b=in.getExtras();
            if(b!=null)
            {
                 str=b.getString("mudata");
            }
            db=new DBAdapter(getApplicationContext());
            db.open();
            insert_but=(Button)findViewById(R.id.insert_but);
            cancle_but=(Button)findViewById(R.id.cancle_but);
            retrive_but=(Button)findViewById(R.id.retrive_but);
            tv=(TextView)findViewById(R.id.textView1);
            tv.setText(str);

            insert_but.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                db.insertTitle(str);


                }});
            cancle_but.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    //db.deleteTitle(2);
                    Intent in=new Intent(getApplicationContext(),contactssample.class);
                    startActivity(in);
                    // TODO Auto-generated method stub
                    //finish();

                }});
            retrive_but.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Cursor cr=db.getAllTitles();
                    cr.moveToFirst();
                    do
                    {
                        System.out.println("vinod "+cr.getString(1));
                    }while(cr.moveToNext());


                }});

}
}

2 个答案:

答案 0 :(得分:0)

而不是传递应用程序上下文

 db=new DBAdapter(getApplicationContext());

尝试

  db=new DBAdapter(sqlieDataExample.this);

答案 1 :(得分:0)

str之前检查db.insertTitle(str);的值,可能是空的NULL