Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ContentValues插入始终返回-1_Java_Android_Sqlite_Sqliteopenhelper_Content Values - Fatal编程技术网

Java ContentValues插入始终返回-1

Java ContentValues插入始终返回-1,java,android,sqlite,sqliteopenhelper,content-values,Java,Android,Sqlite,Sqliteopenhelper,Content Values,db.insert(表名称,null,contentValues)总是返回-1,并且它不会在数据库中插入值 你能帮我找出我做错了什么吗 数据库_class.java: public class database_class extends SQLiteOpenHelper { public static final String database_name = "signup_db"; public static final String table_name = "signup

db.insert(表名称,null,contentValues)
总是返回
-1
,并且它不会在数据库中插入值

你能帮我找出我做错了什么吗

数据库_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;

    }
}
主要活动代码:

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();

我相信在创建数据库时出错。这样,
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 )");
db.execSQL("DROP TABLE IF EXISTS " + table_name);
错误2

由于相同的错误,您的
onUpgrade()
也无法工作:

db.execSQL("DROP TABLE IF EXISTS" + table_name);
需要添加一些空格,如:

db.execSQL("create table " + table_name + " ( ID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST_NAME TEXT, SECOND_NAME TEXT, EMAIL TEXT, PASSWORD TEXT )");
db.execSQL("DROP TABLE IF EXISTS " + table_name);
最后

我测试了你的代码,效果很好。也许,以前发生过一些错误,最好“重新安装”数据库

如何做到:

  • Unistall/安装你的应用程序

  • 将数据库版本更新为force
    onUpgrade()
    。只需执行:
    super(上下文,数据库名称,null,2)
    at
    onCreate()


我认为创建数据库时出错。这样,
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 )");
db.execSQL("DROP TABLE IF EXISTS " + table_name);
错误2

由于相同的错误,您的
onUpgrade()
也无法工作:

db.execSQL("DROP TABLE IF EXISTS" + table_name);
需要添加一些空格,如:

db.execSQL("create table " + table_name + " ( ID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST_NAME TEXT, SECOND_NAME TEXT, EMAIL TEXT, PASSWORD TEXT )");
db.execSQL("DROP TABLE IF EXISTS " + table_name);
最后

我测试了你的代码,效果很好。也许,以前发生过一些错误,最好“重新安装”数据库

如何做到:

  • Unistall/安装你的应用程序

  • 将数据库版本更新为force
    onUpgrade()
    。只需执行:
    super(上下文,数据库名称,null,2)
    at
    onCreate()



我不是android开发人员,但由于我看不到从数据库中获取错误的方法,我会在尝试插入之前检查您要插入的数据库是否可用并已打开。提示:请阅读java命名约定。类以大写字母开头,变量名称中没有uu。另外:你的名字太可怕了!不需要保存字符;比如:ln是什么意思?相对长度单位?通过?注册会计师?使用能说明其所指内容的名称。或者对文本字段使用数组;或者也给那些合适的名字。最后,考虑不要为你的字段使用静态的地方。您可以看到-例如,您可以将db名称作为在构造函数中为类指定的字段。@GhostCat尝试解决问题,而不是挑剔语法;)你在浪费时间breath@cricket_007这里的每个人都对不好的问题投反对票,或提出密切的要求。这是本社区的惯例。Java程序员也有约定;我不认为告诉别人这件事是浪费时间。而且:不止一次,人们回来说:“哦,我不知道我的代码没有遵循惯例;我会调查一下;谢谢。”。谢谢,但我想我完全可以控制我的呼吸;-)是的,我确实没有遵循惯例,因为我是java新手。随着时间的推移,我会处理好每一个会议。谢谢你的评论。我不是android开发人员,但由于我看不到从数据库中获取错误的方法,在尝试插入之前,我会检查你要插入的数据库是否可用并打开。提示:阅读java命名约定。类以大写字母开头,变量名称中没有uu。另外:你的名字太可怕了!不需要保存字符;比如:ln是什么意思?相对长度单位?通过?注册会计师?使用能说明其所指内容的名称。或者对文本字段使用数组;或者也给那些合适的名字。最后,考虑不要为你的字段使用静态的地方。您可以看到-例如,您可以将db名称作为在构造函数中为类指定的字段。@GhostCat尝试解决问题,而不是挑剔语法;)你在浪费时间breath@cricket_007这里的每个人都对不好的问题投反对票,或提出密切的要求。这是本社区的惯例。Java程序员也有约定;我不认为告诉别人这件事是浪费时间。而且:不止一次,人们回来说:“哦,我不知道我的代码没有遵循惯例;我会调查一下;谢谢。”。谢谢,但我想我完全可以控制我的呼吸;-)是的,我确实没有遵循惯例,因为我是java新手。随着时间的推移,我会处理好每一个会议。谢谢你的评论。你的答案是合乎逻辑的,我用空格更改了我的查询,但它仍然返回-1值。@MudasirRao我更新了我的答案。然后,我测试了结果代码,它运行良好。。。如果错误仍然存在,请卸载/重新安装应用程序以强制重新创建数据库。现在工作正常。谢谢你的时间。我很高兴我能帮助你@MudasirRaoCan你看看这个问题。如果你知道任何解决方案。你的答案是合乎逻辑的,我用空格更改了我的查询,但它仍然返回-1值。@MudasirRao我更新了我的答案。然后,我测试了结果代码,它运行良好。。。如果错误仍然存在,请卸载/重新安装应用程序以强制重新创建数据库。现在工作正常。谢谢你的时间。我很高兴我能帮助你@MudasirRaoCan你看看这个问题。如果你知道任何解决办法。