无法更新SQLite数据库中的行

时间:2013-05-29 10:26:56

标签: android android-sqlite android-cursor

我是android开发的新手。我正在尝试更新数据库的行,但每当我使用db.update(DATABASE_TABLE,args,KEY_ROWID +“=”+ rowId,null)时,我的回报为0

package com.multi.xxxxx;

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_ISBN = "isbn";
    public static final String KEY_TITLE = "title";
    public static final String KEY_PUBLISHER = "publisher";    
    private static final String TAG = "DBAdapter";

//    private static final String DATABASE_NAME = "books";
//    private static final String DATABASE_TABLE = "titles";

    public static final String DATABASE_NAME = "books";
    public static final String DATABASE_TABLE = "titles";

    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
        "create table titles (_id integer primary key autoincrement, "
        + "isbn text not null, title integer not null, " 
        + "publisher 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 isbn, String title, String publisher) 
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ISBN, isbn);
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_PUBLISHER, publisher);
        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;
    }

    //---retrieves all the titles---
    public Cursor getAllTitles() 
    {
        return db.query(DATABASE_TABLE, new String[] {
                KEY_ROWID, 
                KEY_ISBN,
                KEY_TITLE,
                KEY_PUBLISHER
            }, 
            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_ISBN, 
                                KEY_TITLE,
                                KEY_PUBLISHER
                    }, 
                    KEY_ROWID + "=" + rowId, 
                    null,
                    null, 
                    null, 
                    null, 
                    null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    //---updates a title---
    public boolean updateTitle(long rowId, String isbn, String title, String publisher) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_ISBN, isbn);
        args.put(KEY_TITLE, title);
        args.put(KEY_PUBLISHER, publisher);
        return db.update(DATABASE_TABLE, args, 
                     KEY_ROWID+"="+rowId, null) > 0;
    }

}

从下面的类

调用上面类的更新方法
package com.multi.xxxx;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.util.Log;

public class DatabaseUpdateActivity extends Activity {

    EditText edit1,edit2,edit3;
    Button update;
    Button delete;

    public static  long rowID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_contacts);
         final DBAdapter db = new DBAdapter(this);
         db.open();
         edit1=(EditText)findViewById(R.id.et_name);
         edit2=(EditText)findViewById(R.id.et_mobile_phone);
         edit3=(EditText)findViewById(R.id.et_work_email);
         update = (Button) findViewById(R.id.btn_add);
         delete = (Button) findViewById(R.id.btn_contacts);
        update.setText("Update");
        delete.setText("Delete");
        int id = (int)rowID;

        //Cursor c = db.getTitle(rowID);
        Cursor c = db.getAllTitles();

        c.moveToFirst();

        if (c != null && c.moveToFirst()) Log.d("cursor = ", c.getString(c.getColumnIndex(DBAdapter.KEY_ISBN)));


        if (c != null)
        {
            c.moveToPosition(id);

            edit1.setText(c.getString(c.getColumnIndex(DBAdapter.KEY_ISBN)));
            edit2.setText(c.getString(c.getColumnIndex(DBAdapter.KEY_TITLE)));
            edit3.setText(c.getString(c.getColumnIndex(DBAdapter.KEY_PUBLISHER)));
        }



        update.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 String editText1=edit1.getText().toString();
                    String editText2=edit2.getText().toString();
                    String editText3=edit3.getText().toString();
                    //long result=db.insertTitle(editText1, editText2, editText3);
                    //long result;
                    if ( editText2.isEmpty() == false)
                    {
                        boolean isUpdated = db.updateTitle(rowID,editText1,editText2, editText3);
                        db.updateTitle(rowID,editText1,editText2, editText3);
                        if (isUpdated == true)
                        {
                            Toast.makeText(DatabaseUpdateActivity.this,"DataUpdated",Toast.LENGTH_LONG).show();
                            edit1.setText("");
                            edit2.setText("");
                            edit3.setText("");
                            finish();
                        }

                    }
                    else
                        Toast.makeText(DatabaseUpdateActivity.this,"Fill Phone Number",Toast.LENGTH_LONG).show();

            }
        });

        delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                boolean isDeleted = db.deleteTitle(rowID);
                if (isDeleted == true)
                {
                    Toast.makeText(DatabaseUpdateActivity.this,"DataDeleted",Toast.LENGTH_LONG).show();
                    finish();

                }

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.database_update, menu);
        return true;
    }

    public  void setRowId(long id) {

        rowID = id;
    }

}

this is the link where i use that code 我搜索很多,但无法找到满意的答案。

1 个答案:

答案 0 :(得分:0)

检查此代码。这是更新功能,

    public void updateevent(String selecteditemid)
{

        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues args = new ContentValues();
        args.put(KEY_STATUS, "yes");
        db.update(TABLE_EVENTS, args, KEY_ID + "=" + selecteditemid, null);

}

并称之为,

updateevent("1");

它将更新id = 1的行。