Я хочу создать функцию обновления , которая изменит записи столбцов ( вся строка ) в базе данных на основе INTEGER PRIMARY KEY из строка - если это вообще возможно.
У меня есть функция поиска, которая будет находить и загружать данные базы данных в поле EditText для редактирования / обновления.
Кнопка поиска (которая вызывает обработчик поиска) загружает содержимое в поля EditText, которые можно изменить / отредактировать, но при нажатии кнопки для обновления отредактированной записи вся база данных перезаписывается измененной записью EditText.
Просто чтобы уточнить, я хочу изменить одну строку, содержащую ПОРТ, ИМЯ и IP-адрес в базе данных, обновить эту единственную запись и поместить ее обратно в базу данных, не перезаписывая все записи в моей базе данных, как это происходит в настоящее время.
У меня нет возможности просмотреть базу данных в ее необработанном виде в папке data / data / {имя пакета} ..., поскольку я использую старый телефон Samsung (в котором нет файла database.db). по какой-то неизвестной причине - сообщение «Запустить как: Невозможно установить возможности ...») для отладки / запуска приложения и на моем компьютере недостаточно оперативной памяти для поддержки виртуального устройства.
Любая помощь, совет или примеры будут с благодарностью. Я очень новичок в разработке приложений для Android и Java, поэтому, пожалуйста, прости меня, если проблема очевидна или тривиальна.
Вот как создается таблица :
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();
}
}
Функция find выглядит следующим образом:
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 нажатие кнопки update (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();
}
}
});