【问题标题】:ContentValues Insert always return the -1ContentValues Insert 总是返回 -1
【发布时间】:2016-07-31 16:53:12
【问题描述】:

db.insert(table_name,null,contentValues); 总是返回 -1 并且它没有在数据库中插入值。

你能帮我弄清楚我做错了什么吗?

database_class.java:

public class database_class extends SQLiteOpenHelper {
    public static final String database_name = "signup_db";
    public static final String table_name = "signup";
    public static final String column_1 = "FIRST_NAME";
    public static final String column_2 = "SECOND_NAME";
    public static final String column_3 = "EMAIL";
    public static final String column_4 = "PASSWORD";
    public static final String column_5 = "c_password";

    public database_class(Context context){
        super(context,database_name , null, 1);
        //Toast.makeText(context, "Class called ", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table" + table_name + "(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("DROP TABLE IF EXISTS" + table_name);
        onCreate(db);
    }
    public boolean insertData(String first_name, String second_name, String email, String password){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(column_1,first_name);
        contentValues.put(column_2,second_name);
        contentValues.put(column_3,email);
        contentValues.put(column_4,password);
        long result = db.insert(table_name,null,contentValues);
        if (result == -1)
            return false;
        else
            return true;

    }
}

MainActivity 代码:

fn = editText1.getText().toString();
ln = editText2.getText().toString();
em = editText3.getText().toString();
pass = editText4.getText().toString();
cpass = editText5.getText().toString();

if (1 == 1) {
    //boolean isInserted =  mydb.insertData(signup_values[0].toString(),signup_values[1].toString(),signup_values[2].toString(),signup_values[3].toString());
    boolean isInserted =  mydb.insertData(fn,ln,em,pass);
    if(isInserted == true) {
        Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_SHORT).show();
    }
    else
        Toast.makeText(MainActivity.this, "Data not Inserted", Toast.LENGTH_SHORT).show();
}
else
    Toast.makeText(MainActivity.this, "Password Mismatch", Toast.LENGTH_SHORT).show();

【问题讨论】:

  • 我不是 android 开发人员,但鉴于我看不到从数据库中获取错误的方法,我会在尝试执行之前检查您插入的数据库是否可用并打开你的插入。
  • 提示:阅读 java 命名约定。类以大写字母开头,变量的名称中没有 _。此外:你的名字非常可怕!无需保存字符;比如:ln 应该是什么意思?时间?经过?过关?使用能够说明他们所表示的事物的名称。并为您的文本字段使用数组;或给出这些适当的名称。最后:考虑不要在您的字段中到处使用静态。你看 - 你可以让数据库名称成为你在构造函数中给你的类的字段。
  • @GhostCat 尝试解决问题,而不是挑剔语法;)你在浪费你的呼吸
  • @cricket_007 这里的每个人都对不好的问题投反对票或提出关闭请求。这是这个社区的惯例。 Java 程序员也有约定。我不认为告诉人们这件事是浪费时间。并且:不止一次人们回来说:“哦,我不知道我的代码没有遵循约定;我会调查一下;谢谢”。所以谢谢,但我认为我完全能够控制我的呼吸;-)
  • 是的,我没有遵守约定,因为我是 Java 新手。随着时间的推移,我会照顾每一个会议。感谢您的 cmets。

标签: java android sqlite sqliteopenhelper content-values


【解决方案1】:

我认为创建数据库时出错。这样,create 表将失败,然后,insert 也会失败(因为未正确创建表)。

您的代码的其他部分似乎没问题...

这一行,将产生以下字符串:

db.execSQL("create table" + table_name + "(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT)");

结果:

create tablesignup(ID INTEGER PRIMARY KEY AUTOINCREMENT , FIRST_NAME TEXT , SECOND_NAME TEXT , EMAIL TEXT , PASSWORD TEXT)

这不是有效的 SQL 命令。因此,请尝试添加一些空格,例如:

db.execSQL("create table " + table_name + " ( ID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST_NAME TEXT, SECOND_NAME TEXT, EMAIL TEXT, PASSWORD TEXT )");

错误 2

您的onUpgrade() 也因同样的错误而无法工作:

db.execSQL("DROP TABLE IF EXISTS" + table_name);

需要添加一些空格,如:

db.execSQL("DROP TABLE IF EXISTS " + table_name);

终于

我测试了您的代码并且工作正常。也许,之前发生了一些错误,最好“重新安装”数据库。

你可以怎么做:

  • 卸载/安装您的应用

  • 更新您的数据库版本以强制使用onUpgrade()。只需:super(context, database_name , null, 2);onCreate()

【讨论】:

  • 你的回答是合乎逻辑的,我用空格改变了我的查询,但它仍然返回 -1 值。
  • @MudasirRao 我更新了我的答案。然后,我测试了结果代码,它工作正常......如果错误仍然存​​在,请卸载/重新安装应用程序以再次强制创建数据库
  • 非常感谢。现在它工作正常。感谢您的时间。
  • 我很高兴能帮助你@MudasirRao
  • 你能看看这个问题。如果您知道任何解决方案。stackoverflow.com/questions/38686196/…
猜你喜欢
  • 2021-11-24
  • 2016-11-21
  • 2019-10-10
  • 2014-04-13
  • 2017-03-20
  • 2013-11-04
  • 2011-12-09
  • 2012-07-08
  • 1970-01-01
相关资源
最近更新 更多