Я пишу простую грубую операцию с использованием базы данных sqlite. Когда я нажимаю кнопку вставки, данные вставляются успешно. Но когда я нажимаю кнопку поиска, курсор всегда кажется пустым, а счетчик курсора всегда равен 0. Я даю свой код. См., В частности, код в разделах btnSearch.setOnclickListener и btnInsert.setOnclickListener.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_db2);
btnInsert = (Button) findViewById(R.id.btnInsert);
btnSearch = (Button) findViewById(R.id.btnSearch);
btnDelete = (Button) findViewById(R.id.btnDelete);
btnUpdate = (Button) findViewById(R.id.btnUpdate);
edname = findViewById(R.id.editText1);
edphone = findViewById(R.id.editText2);
edaddress = findViewById(R.id.editText3);
db = openOrCreateDatabase("MyDB", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS Info(Name Varchar, phone Varchar, address Varchar)");
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor cursor=null;
try {if (cursor.moveToNext()) {
Toast.makeText(DB.this, "button pressed", Toast.LENGTH_SHORT).show();
int count = cursor.getCount();
Toast.makeText(DB.this, String.valueOf(count), Toast.LENGTH_SHORT).show();
Toast.makeText(DB.this, cursor.getString(cursor.getColumnIndex("Name")), Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(DB.this, "cursor is null", Toast.LENGTH_LONG).show();
}
}
catch (Exception ex){
Toast.makeText(DB.this, "ERROR: "+ ex.toString(), Toast.LENGTH_LONG).show();
}
}
});
btnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = edname.getText().toString();
String phn = edphone.getText().toString();
String addr = edaddress.getText().toString();
String query = "INSERT INTO Info (Name,phone,address)VALUES("+name+","+phn+","+addr+")";
Toast.makeText(DB.this, "data inserted", Toast.LENGTH_SHORT).show();
}
});
}
Надеюсь, у вас есть класс Database, который расширяет SQLiteOpenHelper, и, пожалуйста, напишите все свои запросы для создания в нем таблицы.
Теперь вы инициализируете cursor как cursor = null, это всегда будет возвращать значения null.
Попробуй использовать
Cursor lCursor = null;
try {
SQLiteDatabase lDataBase = this.getReadableDatabase();
lCursor = lDataBase.rawQuery(pQuery, null); // pQuery = you query for search
if (lCursor != null && lCursor.getCount() > 0) {
Toast.makeText(DB.this, "button pressed", Toast.LENGTH_SHORT).show();
int count = cursor.getCount();
Toast.makeText(DB.this, String.valueOf(count), Toast.LENGTH_SHORT).show();
Toast.makeText(DB.this, cursor.getString(cursor.getColumnIndex("Name")), Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(DB.this, "cursor is null", Toast.LENGTH_LONG).show();
}
} catch (Exception ex) {
// Do something when exception occurs
}
Еще одна вещь: ваши данные не сохраняются в базе данных. Потому что вы не выполняете свой запрос. Использовать это
btnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = edname.getText().toString();
String phn = edphone.getText().toString();
String addr = edaddress.getText().toString();
String query = "INSERT INTO Info (Name,phone,address)VALUES("+name+","+phn+","+addr+")";
db.execSQL(query);
Toast.makeText(DB.this, "data inserted", Toast.LENGTH_SHORT).show();
}
});
Хорошо, во-первых, вам нужно применить некоторые общие принципы объектно-ориентированного программирования, такие как Принцип единой ответственности.
Вам нужно изолировать свой База данных, чтобы ничего не знать о бизнес-правилах вашего приложения. Это хороший отправная точка.
О вашей проблеме:
Дополнительный:btnInsert = (Button) findViewById(R.id.btnInsert); Casting больше не требуется в Android Studio 3+, поэтому удалите Cast, чтобы сделать его намного проще = btnInsert = findViewById(R.id.btnInsert);
Try This: To insert data into Info Table
btnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = edname.getText().toString();
String phn = edphone.getText().toString();
String addr = edaddress.getText().toString();
insertData(name,addr,phn);
}
});
public void insertData(String name, String address, String phoneNumber) {
SQLiteDatabase database = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("Name", name);
contentValues.put("phone", address);
contentValues.put("address", phoneNumber);
database.insert("Info", null, contentValues);
}
привет! Я сделал еще один пост на stackoverflow. это ссылка: stackoverflow.com/questions/50333701/… Пожалуйста, прочтите ее и направьте меня, если сможете, я буду вам благодарен