在创建的 sqlite 数据库中更新整行(包含多列)
Updating an entire row (containing multiple columns) within a sqlite database created
我想创建一个更新函数,它会根据行的整数主键 - 如果可能的话。
我有一个查找功能,可以查找数据库的详细信息并将其加载到 editing/updating 的 EditText 字段中。
查找按钮(调用查找处理程序)将内容加载到可以是 altered/edited 的 EditText 字段中,但是当按下按钮更新编辑的条目时,整个数据库会被更改的内容覆盖EditText 条目。
澄清一下,我想更改数据库中包含端口、名称和 IP 地址的一行,更新该条目并将其放回数据库而不覆盖我所有的数据库条目——正如目前正在发生的那样.
我无法在 data/data/{package name}... 文件夹中看到未经编辑的原始数据库,因为我使用的是旧三星 phone(其中由于某些未知原因不包含 database.db - 声明 "run as: Could not set capabilities..." 消息)对于 debugging/running 我正在使用的应用程序和 PC 没有足够的 RAM 来支持虚拟设备。
任何帮助、建议或示例将不胜感激。我是 Android 应用程序开发和 java 的新手,所以如果问题很明显或微不足道,请原谅我。
这就是 Table 的创建方式:
public static final String TABLE_USER = "User";
public static final String COL_ID = "_id";
public static final String COLUMN_ID = "UserIP";
public static final String COLUMN_NAME = "UserName";
public static final String COLUMN_PORT = "UserPort";
public void onCreate(SQLiteDatabase db)
{
String CREATE_USER_TABLE = "CREATE TABLE IF NOT EXISTS " +
TABLE_USER + "(" + COL_ID + " INTEGER PRIMARY KEY, " +
COLUMN_PORT + " INTEGER, " + COLUMN_NAME
+ " TEXT, " + COLUMN_ID + " TEXT " + ")";
try
{
db.execSQL(CREATE_USER_TABLE);
}catch (SQLException e)
{
e.printStackTrace();
}
}
查找函数如下:
public User findHandler(String username, String IP)
{
String query = "Select * FROM " + TABLE_USER + " WHERE " +
COLUMN_NAME + " = '" + username + "'" + " and " + COLUMN_ID + " =
'" + String.valueOf(IP) + "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
User user = new User();
if (cursor.moveToFirst())
{
cursor.moveToFirst();
user.setUserPort(Integer.parseInt(cursor.getString(1)));
user.setUserName(cursor.getString(2));
user.setID(cursor.getString(3));
cursor.close();
//Log.d("Message1", msg);
}
else
{
user = null;
}
db.close();
return user;
}
在MainActivity中find按钮按下(onClick)如下:
btnfind.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
MyDBHandler dbHandler = new MyDBHandler(getApplicationContext());
User user = dbHandler.findHandler(username.getText().toString(),
userid.getText().toString());
if (user != null)
{
lst.setText(user.getID() + " " + user.getUserName()
+ " " + String.valueOf(user.getUserPort()));
//found_id =(user.getWhere());
// Load into the EditText for editing
userid.setText(user.getID());
username.setText(user.getUserName());
userport.setText(String.valueOf(user.getUserPort()));
}
else
{
lst.setText("No User Found");
}
}
});
update函数如下:
public boolean updateHandler(int Port, String username, String IP)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues args = new ContentValues();
args.put(COLUMN_ID, IP);
args.put(COLUMN_NAME, username);
args.put(COLUMN_PORT, Port);
return db.update(TABLE_USER, args, COL_ID + " = _id " , null) >0;
}
在MainActivity中更新按钮按下(onClick)如下:
btnupdate.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
MyDBHandler dbHandler = new
MyDBHandler(getApplicationContext());
if (userport.length() >= 1 && userid.length() >= 1 &&
username.length() >= 1)
{
userid.getText();
username.getText();
userport.getText();
boolean result =
dbHandler.updateHandler(Integer.parseInt(userport.getText().toString()),
username.getText().toString(), userid.getText().toString());
if (result)
{
dbHandler.updateHandler(Integer.parseInt(userport.getText().toString()),
username.getText().toString(), userid.getText().toString());
lst.setText("Record Updated.");
}else
{
lst.setText("No Match.");
}
}else
{
Toast.makeText(MainActivity.this, "Please enter a valid
user." , Toast.LENGTH_LONG).show();
}
}
});
将COL_ID + " = _id "
更改为COLUMN_ID + " = ?"
并将null
参数更改为值为IP
的数组。
我想创建一个更新函数,它会根据行的整数主键 - 如果可能的话。
我有一个查找功能,可以查找数据库的详细信息并将其加载到 editing/updating 的 EditText 字段中。
查找按钮(调用查找处理程序)将内容加载到可以是 altered/edited 的 EditText 字段中,但是当按下按钮更新编辑的条目时,整个数据库会被更改的内容覆盖EditText 条目。
澄清一下,我想更改数据库中包含端口、名称和 IP 地址的一行,更新该条目并将其放回数据库而不覆盖我所有的数据库条目——正如目前正在发生的那样.
我无法在 data/data/{package name}... 文件夹中看到未经编辑的原始数据库,因为我使用的是旧三星 phone(其中由于某些未知原因不包含 database.db - 声明 "run as: Could not set capabilities..." 消息)对于 debugging/running 我正在使用的应用程序和 PC 没有足够的 RAM 来支持虚拟设备。
任何帮助、建议或示例将不胜感激。我是 Android 应用程序开发和 java 的新手,所以如果问题很明显或微不足道,请原谅我。
这就是 Table 的创建方式:
public static final String TABLE_USER = "User";
public static final String COL_ID = "_id";
public static final String COLUMN_ID = "UserIP";
public static final String COLUMN_NAME = "UserName";
public static final String COLUMN_PORT = "UserPort";
public void onCreate(SQLiteDatabase db)
{
String CREATE_USER_TABLE = "CREATE TABLE IF NOT EXISTS " +
TABLE_USER + "(" + COL_ID + " INTEGER PRIMARY KEY, " +
COLUMN_PORT + " INTEGER, " + COLUMN_NAME
+ " TEXT, " + COLUMN_ID + " TEXT " + ")";
try
{
db.execSQL(CREATE_USER_TABLE);
}catch (SQLException e)
{
e.printStackTrace();
}
}
查找函数如下:
public User findHandler(String username, String IP)
{
String query = "Select * FROM " + TABLE_USER + " WHERE " +
COLUMN_NAME + " = '" + username + "'" + " and " + COLUMN_ID + " =
'" + String.valueOf(IP) + "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
User user = new User();
if (cursor.moveToFirst())
{
cursor.moveToFirst();
user.setUserPort(Integer.parseInt(cursor.getString(1)));
user.setUserName(cursor.getString(2));
user.setID(cursor.getString(3));
cursor.close();
//Log.d("Message1", msg);
}
else
{
user = null;
}
db.close();
return user;
}
在MainActivity中find按钮按下(onClick)如下:
btnfind.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
MyDBHandler dbHandler = new MyDBHandler(getApplicationContext());
User user = dbHandler.findHandler(username.getText().toString(),
userid.getText().toString());
if (user != null)
{
lst.setText(user.getID() + " " + user.getUserName()
+ " " + String.valueOf(user.getUserPort()));
//found_id =(user.getWhere());
// Load into the EditText for editing
userid.setText(user.getID());
username.setText(user.getUserName());
userport.setText(String.valueOf(user.getUserPort()));
}
else
{
lst.setText("No User Found");
}
}
});
update函数如下:
public boolean updateHandler(int Port, String username, String IP)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues args = new ContentValues();
args.put(COLUMN_ID, IP);
args.put(COLUMN_NAME, username);
args.put(COLUMN_PORT, Port);
return db.update(TABLE_USER, args, COL_ID + " = _id " , null) >0;
}
在MainActivity中更新按钮按下(onClick)如下:
btnupdate.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
MyDBHandler dbHandler = new
MyDBHandler(getApplicationContext());
if (userport.length() >= 1 && userid.length() >= 1 &&
username.length() >= 1)
{
userid.getText();
username.getText();
userport.getText();
boolean result =
dbHandler.updateHandler(Integer.parseInt(userport.getText().toString()),
username.getText().toString(), userid.getText().toString());
if (result)
{
dbHandler.updateHandler(Integer.parseInt(userport.getText().toString()),
username.getText().toString(), userid.getText().toString());
lst.setText("Record Updated.");
}else
{
lst.setText("No Match.");
}
}else
{
Toast.makeText(MainActivity.this, "Please enter a valid
user." , Toast.LENGTH_LONG).show();
}
}
});
将COL_ID + " = _id "
更改为COLUMN_ID + " = ?"
并将null
参数更改为值为IP
的数组。