【发布时间】:2021-08-18 16:03:38
【问题描述】:
我正在尝试使用 SQLite 创建一个简单的数据保存应用程序,但我似乎无法正常运行。我的数据库对象 返回 -1 并且插入失败,因为所有其他功能。请帮忙!以下是我的代码:
主要活动:
package com.example.sql_indos;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText name,contact,dob;
Button insert,update,delete,view;
DBHelper DB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ΕDITTEXT
name = findViewById(R.id.idname);
contact = findViewById(R.id.idcontact);
dob = findViewById(R.id.iddate);
//BUTTONS
insert = findViewById(R.id.idinsert);
delete = findViewById(R.id.iddelete);
update = findViewById(R.id.idupdate);
view = findViewById(R.id.idview);
DB = new DBHelper(this);
//INSERT
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nameTXT = name.getText().toString();
String contactTXT = contact.getText().toString();
String dobTXT = dob.getText().toString();
Boolean checkinsertdata = DB.insertuserdata(nameTXT,contactTXT,dobTXT);//EDW
if(checkinsertdata == true)
{
Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_SHORT).show();
}else
{
Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
}
}
});
//UPDATE
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nameTXT = name.getText().toString();
String contactTXT = contact.getText().toString();
String dobTXT = dob.getText().toString();
Boolean checkupdatedata = DB.updateuserdata(nameTXT,contactTXT,dobTXT);
if(checkupdatedata == true)
{
Toast.makeText(MainActivity.this, "Updated", Toast.LENGTH_SHORT).show();
}else
{
Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
}
}
});
//DELETE
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nameTXT = name.getText().toString();
Boolean checkdeletedata = DB.deletedata(nameTXT);
if(checkdeletedata == true)
{
Toast.makeText(MainActivity.this, "Deleted", Toast.LENGTH_SHORT).show();
}else
{
Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
}
}
});
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor res = DB.getdata();
if(res.getCount() == 0)
{
Toast.makeText(MainActivity.this, "No entry happened", Toast.LENGTH_SHORT).show();
return;
}
StringBuffer buffer = new StringBuffer();
while(res.moveToNext())
{
buffer.append("Name :" + res.getString(0)+"\n");
buffer.append("Contact :" + res.getString(1)+"\n");
buffer.append("Date of Birth :" + res.getString(2)+"\n\n");
}
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(true);
builder.setTitle("User entries");
builder.setMessage(buffer.toString());
builder.show();
}
});
}
}
数据库助手:
package com.example.sql_indos;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "Userdata.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase DB) {
DB.execSQL("CREATE TABLE Userdetails(name TEXT PRIMARY KEY, contact TEXT, dob TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase DB, int oldVersion, int newVersion) {
DB.execSQL("drop Table if exists Userdetails");
}
//INSERT
public Boolean insertuserdata(String name, String contact, String dob) {
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("Name", name);
contentValues.put("Contact", contact);
contentValues.put("Date of Birth", dob);
long result = DB.insert("Userdetails", null, contentValues);//EDW
if (result == -1) {
return false;
} else {
return true;
}
}
//UPDATE
public Boolean updateuserdata(String name, String contact, String dob) {
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("Name", name);
contentValues.put("Contact", contact);
contentValues.put("Date of Birth", dob);
Cursor cursor = DB.rawQuery("select * from Userdetails where name = ?", new String[]{name});
if (cursor.getCount() > 0) {
long result = DB.update("Userdetails", null, "name=?", new String[]{name});
if (result == -1) {
return false;
}else {
return true;
}
}else {
return false;
}
}
//DELETE
public Boolean deletedata(String name) {
SQLiteDatabase DB = this.getWritableDatabase();
Cursor cursor = DB.rawQuery("select * from Userdetails where name = ?", new String[]{name});
if (cursor.getCount() > 0) {
long result = DB.delete("Userdetails", "name=?", new String[]{name});
if (result == -1) {
return false;
}else {
return true;
}
}else {
return false;
}
}
///edw
//DISPLAY
public Cursor getdata() {
SQLiteDatabase DB = this.getWritableDatabase();
Cursor cursor = DB.rawQuery("select * from Userdetails ", null);
return cursor;
}
}
at com.example.sql_indos.DBHelper.insertuserdata(DBHelper.java:46)
at com.example.sql_indos.MainActivity$1.onClick(MainActivity.java:52)
我想澄清一下,应用程序不会崩溃,它可以运行,但无法执行任何有用的功能。所以它一定是一个逻辑错误或者某些东西已经过时了,我不知道它!任何帮助将不胜感激。
【问题讨论】: