我希望使用更新命令更改所有用户详细信息,具体取决于用户的电子邮件地址。我被告知使用更新命令,但我不了解如何使用更新命令,而且在线文档非常差。谁能帮我?这是我的代码:
public class DatabaseOperations extends SQLiteOpenHelper {
public static int database_version = 1;
public String CREATE_QUERY = "CREATE TABLE " + TableData.TableInfo.TABLE_NAME + "(" + TableData.TableInfo.USER_NAME + " TEXT," + TableData.TableInfo.USER_PASS + " TEXT," + TableData.TableInfo.USER_EMAIL + " TEXT," + TableData.TableInfo.USER_WEIGHT + " INTEGER," + TableData.TableInfo.USER_GOAL + " INTEGER );";
public DatabaseOperations(Context context) {
super(context, TableData.TableInfo.DATABASE_NAME, null, database_version);
Log.d("Database Operations", "Database Created");
}
@Override
public void onCreate(SQLiteDatabase sdb) {
sdb.execSQL(CREATE_QUERY);
Log.d("Database Operations", "Table Created");
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public void putInformation(DatabaseOperations dop, String name, String pass, String email, int weight, int goal) {
SQLiteDatabase SQ = dop.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(TableData.TableInfo.USER_NAME, name);
cv.put(TableData.TableInfo.USER_PASS, pass);
cv.put(TableData.TableInfo.USER_EMAIL, email);
cv.put(TableData.TableInfo.USER_WEIGHT, weight);
cv.put(TableData.TableInfo.USER_GOAL, goal);
long k = SQ.insert(TableData.TableInfo.TABLE_NAME, null, cv);
Log.d("Database Operations", "One Row Inserted");
SQ.close();
}
public Cursor getInformation(DatabaseOperations dop) {
SQLiteDatabase SQ = dop.getReadableDatabase();
String[] columns = {TableData.TableInfo.USER_NAME, TableData.TableInfo.USER_PASS, TableData.TableInfo.USER_EMAIL, TableData.TableInfo.USER_WEIGHT, TableData.TableInfo.USER_GOAL};
Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME, columns, null, null, null, null, null);
return CR;
}
}
使用database.exeSQL("update....");
通过编辑文本或类似内容获取要更改/更新的所有数据。
在此示例中选择要更新的特定行的 ID 或名称 nombre 是一个名称:
String[] args = new String[]{nombre};//name or id whatever you want
db.execSQL("UPDATE " + YOUR_TABLE + " SET columnName1='" + data1 + "', columnName2='"+data2+"' WHERE nombre_column=?", args); //using SET you say that the column will be update with a new string
Toast.makeText(getApplicationContext(), "ALERT", Toast.LENGTH_LONG).show();
在数据库类中:
public void updateRow(long rowID, String rowOne, double rowTwo, double rowThree, String rowFour )
{
// this is a key value pair holder used by android's SQLite functions
ContentValues values = new ContentValues();
values.put(TABLE_ROW_ONE, rowOne);
values.put(TABLE_ROW_TWO, rowTwo);
values.put(TABLE_ROW_THREE, rowThree);
values.put(TABLE_ROW_FOUR, rowFour);
// ask the database object to update the database row of given rowID
try {
db.update(TABLE_NAME, values, TABLE_ROW_ID + "=" + rowID, null);}
catch (Exception e) {
Log.e("DB Error", e.toString());
e.printStackTrace();
}
}
要进行更新:
//Get an instance of the DB
//db.getInstance();
db.updateRow(rowID, rowOne, rowTwo, rowThree, rowFour);
您是否有内容提供程序模式,但这就是我的更新函数看起来正常的方式
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
final int match = sUriMatcher.match(uri);
final SQLiteDatabase database = mDatabase.getWritableDatabase();
int rowsUpdated = 0;
switch (match) {
case USER:
rowsUpdated = database.update(Database.Tables.USER,
values,
selection,
selectionArgs);
break;
case CONTACTLIST:
rowsUpdated = database.update(Database.Tables.CONTACTLIST,
values,
selection,
selectionArgs);
break;
....
}
getContext().getContentResolver().notifyChange(uri, null);
return rowsUpdated;
}
至于update()
方法,您需要使用要更新的值创建一个 ContentValues
对象,并使用 String 数组中的电子邮件传入 whereArgs:
public void updateInformation(String name, String pass, String email, int weight, int goal) {
SQLiteDatabase SQ = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(TableData.TableInfo.USER_NAME, name);
cv.put(TableData.TableInfo.USER_PASS, pass);
cv.put(TableData.TableInfo.USER_WEIGHT,weight);
cv.put(TableData.TableInfo.USER_GOAL,goal);
String[] args = new String[]{email};
SQ.update(TableData.TableInfo.TABLE_NAME, cv, TableData.TableInfo.USER_EMAIL+" = ?", args);
SQ.close();
}
我在您的所有方法中注意到的另一件事是您传入了一个DatabaseOperations
引用,因为此类已经扩展了SQLiteOpenHelper
。
无需在每个方法中传入dop
,只需使用 this
。
因此,在每种方法中,而不是像此处那样使用 dop
:
SQLiteDatabase SQ = dop.getWritableDatabase();
您可以只引用this
:
SQLiteDatabase SQ = this.getWritableDatabase();