如何为我的Android应用程序更新SQLdatabase中特定按钮的详细信息?

时间:2014-01-27 11:34:47

标签: android sqlite

我在这里完成了我的教程:Tutorial link

我已经能够添加和使用我成功创建的数据库,但是我现在想要更新一个特定的按钮。我的方法是,我正在浏览所有按钮,并查找与我正在搜索的文本相匹配的按钮(我将始终拥有独特的按钮文本),当我得到一个匹配时,我只是更新值和执行db.update(..)但它没有更新数据库 这是我的数据库代码:

package com.example.oslabproject;

import java.util.LinkedList;
import java.util.List;


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


public class SQLDatabase extends SQLiteOpenHelper{


static final String dbName="DB";

//BUTTONS TABLE FOR BUILDINGS ACTIVITY
static final String BuildingTable="BuildingButtons";
static final String ButtonId="ButtonID";
static final String ActivityName="ActivityName";
static final String BuildingButtonText="ButtonText";
static final int version=1;

//BUTTONS TABLE FOR FLOORS ACTIVITY
static final String FloorTable="FloorButtons";
static final String FloorId="ButtonID";
static final String BuildingName="BuildingName";
static final String FloorButtonText="ButtonText";

//BUTTONS TABLE FOR ROOMS ACTIVITY
static final String RoomTable="RoomButtons";
static final String RoomId="RoomID";
//static final String BuildingName="BuildingName";
static final String FloorName="FloorName";
static final String RoomButtonText="ButtonText";


private static final String[] COLUMNS = {ButtonId,ActivityName,BuildingButtonText};

public SQLDatabase(Context context) {

      super(context, dbName, null,version);

      }

public void onCreate(SQLiteDatabase db) {


      db.execSQL("CREATE TABLE "+BuildingTable+" ("+ButtonId+ " INTEGER PRIMARY KEY, "+
              ActivityName+" TEXT, "+BuildingButtonText+ " TEXT )");

      db.execSQL("CREATE TABLE "+FloorTable+" ("+FloorId+ " INTEGER PRIMARY KEY, "+
              BuildingName+" TEXT, "+FloorButtonText+ " TEXT )");

      db.execSQL("CREATE TABLE "+RoomTable+" ("+RoomId+ " INTEGER PRIMARY KEY, "+
              BuildingName+" TEXT, "+FloorName+" TEXT, "+RoomButtonText+ " TEXT )");


      //    create ContentValues to add key "column"/value
        ContentValues values = new ContentValues();
        NewButton button=new NewButton();
        values.put(ButtonId, button.getId());
        values.put(ActivityName, "Buildings"); 
        values.put(BuildingButtonText, "Apna SJT");
        db.insert(BuildingTable, null, values);

        values.put(ButtonId, button.getId()+1);
        values.put(ActivityName, "Buildings");
        values.put(BuildingButtonText, "Apna TT");
        db.insert(BuildingTable, null, values);




     }
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


      db.execSQL("DROP TABLE IF EXISTS "+BuildingTable);
      db.execSQL("DROP TABLE IF EXISTS "+FloorTable);
      db.execSQL("DROP TABLE IF EXISTS "+RoomTable);
      this.onCreate(db);
     }


//TODO ----------------------------- ADD BUTTONS-------------------------------------



public void addBuildingButton(NewButton button) {
    Log.d("add button", "adding button"+button.getButtonText());
    //  get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    //  create ContentValues to add key "column"/value
    ContentValues values = new ContentValues();

    values.put(ButtonId, button.getId());
    values.put(ActivityName, button.getActivityName()); 
    values.put(BuildingButtonText, button.getButtonText());

    // 3. insert
    db.insert(BuildingTable,  null,values); 
    db.close(); 
}

public void addFloorButton(NewButton button) {
Log.d("add button", "adding button"+button.getButtonText());
    //  get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    //  create ContentValues to add key "column"/value
    ContentValues values = new ContentValues();

    values.put(FloorId, button.getId());
    values.put(BuildingName, button.getBuildingName()); 
    values.put(FloorButtonText, button.getButtonText());

    // 3. insert
    db.insert(FloorTable, null, values); 
    Log.d("add floor button", button.getBuildingName()+" "+button.getButtonText());
    db.close(); 
}

public void addRoomButton(NewButton button) {
    Log.d("add button", "adding button"+button.getButtonText());
    //  get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();


    ContentValues values = new ContentValues();

    values.put(RoomId, button.getId());
    values.put(BuildingName, button.getBuildingName()); 
    values.put(FloorName, button.getFloorName());
    values.put(RoomButtonText, button.getButtonText());

    db.insert(RoomTable,  null,  values);

    Log.d("add room button", button.getBuildingName()+" "+button.getButtonText());
    db.close(); 
}





// TODO ---------------------------------------GET BUTTONS------------------------------------

public List<String> getAllBuildingButtons(String activity_name) {

       List<String> buttons = new LinkedList<String>();

       //build the query
       String query = "SELECT  * FROM " + BuildingTable;

       //get reference to writable DB
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);


       if (cursor.moveToFirst()) {
           do {
               NewButton button = new NewButton();

               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setActivityName(cursor.getString(1));
               button.setButtonText(cursor.getString(2));

               if(button.getActivityName().equals(activity_name))
                   buttons.add(button.getButtonText());

           } while (cursor.moveToNext());
       }
       db.close();
       return buttons;
   }

public List<String> getAllFloorButtons(String building_name) {

       List<String> buttons = new LinkedList<String>();

       //build the query
       String query = "SELECT  * FROM " + FloorTable;

       //get reference to writable DB
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);


       if (cursor.moveToFirst()) {
           do {
               NewButton button = new NewButton();

               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setBuildingName(cursor.getString(1));
               button.setButtonText(cursor.getString(2));

               if(button.getBuildingName().equals(building_name))
               {
                    buttons.add(button.getButtonText());
                    Log.d("floor buttons" , button.getButtonText());
               }
           } while (cursor.moveToNext());
       }
       db.close();
       return buttons;
   }

public List<String> getAllRoomButtons(String building_name,String floor_name) {

       List<String> buttons = new LinkedList<String>();

       //build the query
       String query = "SELECT  * FROM " + RoomTable;

       //get reference to writable DB
       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);


       if (cursor.moveToFirst()) {
           do {
               NewButton button = new NewButton();

               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setBuildingName(cursor.getString(1));
               button.setFloorName(cursor.getString(2));
               button.setButtonText(cursor.getString(3));

               if(button.getBuildingName().equals(building_name) && button.getFloorName().equals(floor_name))
               {
                    buttons.add(button.getButtonText());
                    Log.d("floor buttons" , button.getButtonText());
               }
           } while (cursor.moveToNext());
       }
       db.close();
       return buttons;
   }



// TODO ----------------UPDATE BUTTONS------------------------------------------


public void updateBuildingButton(String oldbuttontext, String newbuttontext) {

     String query = "SELECT  * FROM " + BuildingTable;


       SQLiteDatabase db = this.getWritableDatabase();
       Cursor cursor = db.rawQuery(query, null);

       NewButton button=null;
       if (cursor.moveToFirst()) {
           do {

                button = new NewButton();

               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setActivityName(cursor.getString(1));
               button.setButtonText(newbuttontext);

               if(button.getButtonText().equals(oldbuttontext))
               {
                   Log.d("updating button","match found for "+button.getButtonText());

                   Log.d("old button",button.getActivityName()+" "+button.getButtonText());
                   ContentValues values = new ContentValues();
                   values.put(ButtonId, button.getId());
                   values.put(ActivityName,button.getActivityName());
                   values.put(BuildingButtonText, button.getButtonText());

                   int i=db.update(BuildingTable, values,BuildingButtonText+" = ?", 
                        new String[] { oldbuttontext });

                   //db.execSQL("UPDATE "+BuildingTable+" SET "+BuildingButtonText+"='"+newbuttontext+
                //         "'  WHERE     "+ButtonId+"='"+String.valueOf(button.getId())+"'");
                   Log.d("updating button return value",String.valueOf(i));
               }

           } while (cursor.moveToNext());
       }
       db.close();

       db = this.getWritableDatabase();

       cursor = db.rawQuery(query, null);
       if (cursor.moveToFirst()) {
           do {
               button = new NewButton();

               button.setId(Integer.parseInt(cursor.getString(0)));
               button.setActivityName(cursor.getString(1));
               button.setButtonText(cursor.getString(2));
               Log.d("buttons in buildin table",button.getButtonText());
           }while (cursor.moveToNext());
       }
       db.close();

}













//------------------------------------------------------------------------------


//no use right now
public NewButton getButton(int id){

    // 1. get reference to readable DB
    SQLiteDatabase db = this.getReadableDatabase();

    // 2. build query
    Cursor cursor = 
            db.query(BuildingTable, // a. table
            COLUMNS, // b. column names
            " id = ?", // c. selections 
            new String[] { String.valueOf(id) }, // d. selections args
            null, // e. group by
            null, // f. having
            null, // g. order by
            null); // h. limit

    // 3. if we got results get the first one
    if (cursor != null)
        cursor.moveToFirst();

    // 4. build book object
    NewButton button1 = new NewButton();
    button1.setId(Integer.parseInt(cursor.getString(0)));
    button1.setActivityName(cursor.getString(1));
    button1.setButtonText(cursor.getString(2));



    // 5. return book
    return button1;
}




//------------------------------------------------------------------------


//TESTING PURPOSE
public void deleteall()
{
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(BuildingTable,null,null);
    db.delete(FloorTable,null,null);
    db.delete(RoomTable,null,null);
}

}

这是我的NewButton类:

package com.example.oslabproject;



public class NewButton {

    private static int id=0;
    private static String ActivityName;
    private static String ButtonText;
    private static String BuildingName;
    private static String RoomName;
    private static String FloorName;

    NewButton()
    {

        setId(id);
        id++;
    }

    public String getButtonText() {
        return ButtonText;
    }

    public void setButtonText(String buttonText) {
        ButtonText = buttonText;
    }

    public String getActivityName() {
        return ActivityName;
    }

    public void setActivityName(String activityName) {
        ActivityName = activityName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        NewButton.id = id;
    }

    public  String getBuildingName() {
        return BuildingName;
    }

    public void setBuildingName(String buildingName) {
        BuildingName = buildingName;
    }

    public String getRoomName() {
        return RoomName;
    }

    public void setRoomName(String roomName) {
        RoomName = roomName;
    }

    public String getFloorName() {
        return FloorName;
    }

    public void setFloorName(String floorName) {
        FloorName = floorName;
    }

}

我尝试将mybuilding1重命名为renamedmybuilding这是我的logcat

01-27 17:15:03.945:D /添加按钮(1372):添加buttonmybuilding1
01-27 17:15:19.446:D /更新按钮(1372):找到mybuilding1的匹配项 01-27 17:15:19.456:建筑物表格中的D /按钮(1372):输入建筑物名称
01-27 17:15:19.456:建筑表中的D /按钮(1372):mybuilding
01-27 17:15:19.476:构建表中的D /按钮(1372):mybuilding1

我在我的db.update中添加了一个返回值并在logcat中检查它是1.所以我想更新功能确实正常但我的数据库没有更新

1 个答案:

答案 0 :(得分:1)

您似乎在此功能中无所事事,但更新数据库。为什么不轻松一点?

public void updateBuildingButton(String oldbuttontext, String newbuttontext) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(BuildingButtonText, newbuttontext);
    int i=db.update(BuildingTable, values,BuildingButtonText+" = ?", 
                    new String[] { oldbuttontext });
    Log.d("updating button return value",String.valueOf(i));
    db.close();
}