У меня есть встроенная база данных с моим приложением. он находится в папке с активами. Пользователь должен иметь возможность добавлять новые строки в базу данных при нажатии кнопки. У меня есть следующий код, который:sqlite insert on button click
insertrow.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
db.open();
try
{
String editmacs=editmac.getText().toString();
db.insertrow(editmacs);
// Context context = getApplicationContext();
}
catch (Exception ex)
{
Toast.makeText(getApplicationContext(), "cannot update", Toast.LENGTH_LONG).show();
}
db.close();
}
});
и соответствующий метод в моем классе SQliteOpenHelper является:
public static SQLiteDatabase myDb;
public static String DATABASE_TABLE="access_points";
public static final String KEY_column1 = "col1";
public static final String KEY_column2 = "col2";
public static final String KEY_column3= "col3";
public static final String KEY_column4 = "col4";
public long insertrow(String editmacs)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_column1, editmacs);
initialValues.put(KEY_column2, "uf");
initialValues.put(KEY_column3, "ub");
initialValues.put(KEY_column4, "uz");
return myDb.insert(DATABASE_TABLE, null, initialValues);
}
Проблема с кнопкой мыши на editmacs (KEY_column1) не включены в базу данных. Но вставляются другие значения (FOR EXAMPLE "uz") (я тестировал вставленные значения с sql-запросом). Во время вставки с помощью buttonpress я не получаю никакого исключения. Может ли кто-нибудь сказать, почему значение editmacs из edittext не вставлено? Заранее спасибо.
Хорошо, я получил решение от комментариев Гийома (см. Ниже). Запросы, связанные с вставкой, в порядке. Проблема в другом месте. Посмотрите на следующий код:
buttonuserentry.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
db.open();
try
{
String mac = "";
mac = db.getuserentry();
Context context = getApplicationContext();
String text = mac;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
catch (Exception ex)
{
Context context = getApplicationContext();
CharSequence text = ex.toString();
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
db.close();
}
});
ранее, я использую это:
CharSequence mac = "";
mac = db.getuserentry();
Context context = getApplicationContext();
String text = mac;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
Поскольку я использовал CharSequence, он показывал последний вставленный MAC-адрес из исходной базы данных. Исходная встроенная база данных объявила этот столбец как текст (поэтому это означает Text = CharSequence в Sqliteman). Мой ожидаемый MAC-адрес - это последний введенный пользователем MAC-адрес. Этот MAC-адрес из вида editmac преобразуется в String. Таким образом, нужно получить его как String, а не как CharSequence. Еще раз спасибо Гийому за помощь в руководстве меня к решению.
проверить тип данных KEY_column1 по сравнению с ключом KEY_column2 –
u можете проверить значение -> если оно пустое или нет Log.i («debug», editmacs); – Dezigo
@ Sunil, я создал встроенную базу данных из Sqliteman, а типы данных для всех столбцов - это текст. –