表名在android设备的sqlite数据库中为null

时间:2013-07-02 04:46:11

标签: android sqlite cursor

我正在构建一个简单的应用程序,它存储一些联系人并检索Android手机设备中的联系人。

我创建了自己的数据库和表格,并将值插入手机中的表格。

我的手机没有扎根。所以我无法访问文件,但我看到值存储在表中。并在模拟器上进行了测试。直到这里很好。

通过从表中获取数据来显示列表中的所有联系人。这也没关系。

但问题是当我尝试删除记录时,它显示logcat中的表名为null(不是例外),并且数据不会被删除。但在模拟器中,数据将从表中删除。我无法通过电话实现这一目标。

这是我的删除代码,

 public boolean onContextItemSelected(MenuItem item) {

    super.onContextItemSelected(item);
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
            .getMenuInfo();
    int menuItemIndex = item.getItemId();
    String[] menuItems = getResources().getStringArray(R.array.menu);
    String menuItemName = menuItems[menuItemIndex];
    String listItemName = Customers[info.position];

    if (item.getTitle().toString().equalsIgnoreCase("Delete")) {
        Toast.makeText(
                context,
                "Selected List item is: " + listItemName + "MenuItem is: "
                        + menuItemName, Toast.LENGTH_LONG).show();

        DB = context.openOrCreateDatabase("CustomerDetails.db",
                MODE_PRIVATE, null);
        try {
            int pos = info.position;
            pos = pos + 1;
            Log.d("", "customers[pos]: " + Customers[info.position]);
            Cursor c = DB
                    .rawQuery(
                            "Select customer_id,first_name,last_name from CustomerInfo",
                            null);
            int rowCount = c.getCount();

            DB.delete(Table_name,
                    "customer_id" + "=" + String.valueOf(pos), null);

            DB.close();
            Log.d("", "" + String.valueOf(pos));
            Toast.makeText(context, "Deleted Customer", Toast.LENGTH_LONG)
                    .show();
            // Customers[info.position]=null;
            getCustomers();
        } catch (Exception e) {
            Toast.makeText(context, "Delete unsuccessfull",
                    Toast.LENGTH_LONG).show();
        }

    }

这是我的logcat,

07-02 10:12:42.976: D/Cursor(1560): Database path: CustomerDetails.db
07-02 10:12:42.976: D/Cursor(1560): Table name   : null
07-02 10:12:42.984: D/Cursor(1560): Database path: CustomerDetails.db
07-02 10:12:42.984: D/Cursor(1560): Table name   : null

不知道数据未被删除的原因。数据存在于表中。

请更正我的代码。   任何帮助表示赞赏!!

2 个答案:

答案 0 :(得分:1)

您的customer_id类型为整数,而您在下一行中将其作为字符串类型传递,

DB.delete(Table_name,"customer_id" + "=" + String.valueOf(pos), null);

这就是它返回false的原因,尝试将其作为整数使用,如下所示,

DB.delete(Table_name,"customer_id" + "=" + pos, null);

答案 1 :(得分:0)

如果可能,也尝试这种方法。

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

public class RegistrationAdapter {
    SQLiteDatabase database_ob;
    RegistrationOpenHelper openHelper_ob;
    Context context;

    public RegistrationAdapter(Context c) {
        context = c;
    }

    public RegistrationAdapter opnToRead() {
        openHelper_ob = new RegistrationOpenHelper(context,
                openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
        database_ob = openHelper_ob.getReadableDatabase();
        return this;

    }

    public RegistrationAdapter opnToWrite() {
        openHelper_ob = new RegistrationOpenHelper(context,
                openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
        database_ob = openHelper_ob.getWritableDatabase();
        return this;

    }

    public void Close() {
        database_ob.close();
    }

    public long insertDetails(String fname, String lname) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(openHelper_ob.FNAME, fname);
        contentValues.put(openHelper_ob.LNAME, lname);
        opnToWrite();
        long val = database_ob.insert(openHelper_ob.TABLE_NAME, null,
                contentValues);
        Close();
        return val;

    }

    public Cursor queryName() {
        String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
                openHelper_ob.LNAME };
        opnToWrite();
        Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols, null,
                null, null, null, null);

        return c;

    }

    public Cursor queryAll(int nameId) {
        String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
                openHelper_ob.LNAME };
        opnToWrite();
        Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols,
                openHelper_ob.KEY_ID + "=" + nameId, null, null, null, null);

        return c;

    }

    public long updateldetail(int rowId, String fname, String lname) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(openHelper_ob.FNAME, fname);
        contentValues.put(openHelper_ob.LNAME, lname);
        opnToWrite();
        long val = database_ob.update(openHelper_ob.TABLE_NAME, contentValues,
                openHelper_ob.KEY_ID + "=" + rowId, null);
        Close();
        return val;
    }

    public int deletOneRecord(int rowId) {
        // TODO Auto-generated method stub
        opnToWrite();
        int val = database_ob.delete(openHelper_ob.TABLE_NAME,
                openHelper_ob.KEY_ID + "=" + rowId, null);
        Close();
        return val;
    }

}

openhelper.java

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class RegistrationOpenHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "REGISTRATION_DB";
    public static final String TABLE_NAME = "REGISTRATION_TABLE";
    public static final String TABLE_NAME_ONE = "REGISTRATION_TABLE_ONE";
    public static final int VERSION = 1;
    public static final String KEY_ID = "_id";
    public static final String FNAME = "F_NAME";
    public static final String PKEY_ID = "pid";
    public static final String PROFILE = "profile";
    public static final String LNAME = "L_NAME";
    public static final String SCRIPT = "create table " + TABLE_NAME + " ("
            + KEY_ID + " integer primary key autoincrement, " + FNAME
            + " text not null, " + LNAME + " text not null );";

    public static final String PROFILE_TABLE = "create table " + TABLE_NAME_ONE + " ("
            + PKEY_ID + " integer primary key autoincrement, " + PROFILE
            + " text not null, );";

  /* public static final String PROFILE_TABLE="create table profiletable(profileid integer primary key autoincrement,profilename text null);";
   public static final String VALUE_TABLE="create table valuetable(id integer primary key autoincrement,value text null,delay );";
   */


    public RegistrationOpenHelper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(SCRIPT);
        db.execSQL(PROFILE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("drop table " + TABLE_NAME);
        db.execSQL("drop table "+TABLE_NAME_ONE);
        onCreate(db);
    }

}