2013-05-29 3 views
-1

Я новичок в разработке Android. я пытаюсь обновления строки базы данных, но каждый раз, когда я получаю 0 в ответ, когда я использую db.update (DATABASE_TABLE, арг, KEY_ROWID + «=» + RowId, нуль)Невозможно обновить строку в базе данных SQLite

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 я найти много, но не смог найти удовлетворительный ответ.

+0

Нам нужно увидеть немного бота больше. Где вы вызываете updateTitle()? Есть ли ошибки в Logcat? – Opiatefuchs

+0

@Opiatefuchs, как я могу добавить больше кода в существующую почту. Я использую переполнение стека в первый раз. – multi

+0

Скопируйте и вставьте, но остерегайтесь формы. В блоке ответа есть вопросительный знак в правом верхнем углу. Нажмите эту кнопку, затем вы увидите основную информацию, щелкнув одну из ссылок ... – Opiatefuchs

ответ

0

Проверить это code.Here функция обновления,

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"); 

Он обновит строку, в которой идентификатор = 1.

Смежные вопросы