Android 数据库帮助程序返回-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

我正在尝试使用SQLite创建一个简单的数据保存应用程序,但我似乎无法正常运行。我的DB对象返回-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;


    }








}





我想澄清一下,应用程序没有崩溃,它运行了,但没有执行任何有用的功能。因此,这一定是逻辑错误,或者某些东西过时了,我对此一无所知!任何帮助都将不胜感激

您没有名为
出生日期
的列,但有一个名为
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);