【问题标题】:Database Helper returns -1数据库助手返回 -1
【发布时间】: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)

我想澄清一下,应用程序不会崩溃,它可以运行,但无法执行任何有用的功能。所以它一定是一个逻辑错误或者某些东西已经过时了,我不知道它!任何帮助将不胜感激。

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:
    contentValues.put("Date of Birth", dob);
    

    您没有名为Date of Birth 的列,但有一个名为dob 的列。在此处将其更改为dob

    为了更容易调试,请考虑使用insertOrThrow() 代替insert(),以便获得有用的异常。

    【讨论】:

    • 救命稻草!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多