Android 数据库帮助程序返回-1
我正在尝试使用SQLite创建一个简单的数据保存应用程序,但我似乎无法正常运行。我的DB对象返回-1,插入操作与所有其他函数一样失败。请提供一些帮助!下面是我的代码: 主要活动:Android 数据库帮助程序返回-1,android,database,sqlite,Android,Database,Sqlite,我正在尝试使用SQLite创建一个简单的数据保存应用程序,但我似乎无法正常运行。我的DB对象返回-1,插入操作与所有其他函数一样失败。请提供一些帮助!下面是我的代码: 主要活动: package com.example.sql_indos; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.database.Cursor; imp
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;
}
}
我想澄清一下,应用程序没有崩溃,它运行了,但没有执行任何有用的功能。因此,这一定是逻辑错误,或者某些东西过时了,我对此一无所知!任何帮助都将不胜感激
您没有名为出生日期
的列,但有一个名为dob
的列。在此处将其更改为dob
<>为了便于调试,考虑使用<代码>插入式抛出()/代码>代替<代码>插入()/<代码>,以便获得有用的异常。救生器!非常感谢你!
at com.example.sql_indos.DBHelper.insertuserdata(DBHelper.java:46)
at com.example.sql_indos.MainActivity$1.onClick(MainActivity.java:52)
contentValues.put("Date of Birth", dob);