我在这里完成了我的教程: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.所以我想更新功能确实正常但我的数据库没有更新
答案 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();
}