Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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 使用long Always返回-1在SQLite中插入数据时出现问题_Java_Android_Android Sqlite - Fatal编程技术网

Java 使用long Always返回-1在SQLite中插入数据时出现问题

Java 使用long Always返回-1在SQLite中插入数据时出现问题,java,android,android-sqlite,Java,Android,Android Sqlite,我很难找到代码中缺少的内容。我正在尝试插入数据,但我的DatabaseHelper类中的“long result==db.insert”始终返回-1。我无法指出我做错了什么。请帮助。任何想法都将非常感谢 我的DatabaseHelper类: public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "drivefinal.db"; public static

我很难找到代码中缺少的内容。我正在尝试插入数据,但我的DatabaseHelper类中的“long result==db.insert”始终返回-1。我无法指出我做错了什么。请帮助。任何想法都将非常感谢

我的DatabaseHelper类:

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "drivefinal.db";
public static final String TABLE_NAME = "drive_table";
public static final String ID = "ID";
public static final String NUMBER = "Number";
public static final String FNAME = "First Name";
public static final String LNAME = "Last Name";
public static final String COORDINATE = "Coordinate";
public static final String ADDRESS = "Address";
public static final String NOTES = "Notes";

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table if not exists " + TABLE_NAME +"(ID INTEGER PRIMARY KEY AUTOINCREMENT ,NUMBER TEXT,FNAME TEXT,LNAME TEXT,COORDINATE TEXT,ADDRESS TEXT,NOTES TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " +TABLE_NAME);
    onCreate(db);
}

public boolean insertData(String number, String fName, String lName, String coordinate, String address, String notes){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(NUMBER, number);
    contentValues.put(FNAME, fName);
    contentValues.put(LNAME, lName);
    contentValues.put(COORDINATE, coordinate);
    contentValues.put(ADDRESS, address);
    contentValues.put(NOTES, notes);

    long result = db.insert(TABLE_NAME,null ,contentValues);
        if(result == -1 )
            return false;
        else
            return true;
}
我的主要活动文件:

public void addData(){
    btnSave.setOnClickListener(
        new View.OnClickListener(){
            @Override
            public void onClick(View v){
                boolean isInserted = myDb.insertData(editTextnumber.getText().toString(),
                        editTextfname.getText().toString(),
                        editTextlname.getText().toString(),
                        editTextcoordinate.getText().toString(),
                        editTextaddress.getText().toString(),
                        editTextnotes.getText().toString());

                        if(isInserted)
                            Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_SHORT).show();
                        else
                            Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
            }
        }

        );
}

}

表定义创建的列名与插入时尝试使用的列名不同

e、 g.您的表将具有列名FNAME而不是名字(etc)

其次,您在尝试使用名为First Name的列时会遇到问题,因为该列包含空格,并且必须将其括起来,例如[First Name]

我建议使用:-

public static final String NUMBER = "Number";
public static final String FNAME = "FirstName"; //<<<<<<<<<< space removed
public static final String LNAME = "LastName"; //<<<<<<<<<< space removed
public static final String COORDINATE = "Coordinate";
public static final String ADDRESS = "Address";
public static final String NOTES = "Notes";
要引入更改(例如,要运行onCreate方法,因为它仅在创建数据库时自动运行),您必须执行以下操作之一:-

  • 删除应用程序的数据
  • 卸载应用程序
  • 更改数据库版本号,例如将
    super(上下文,数据库名称,null,1);
    更改为
    super(上下文,数据库名称,null,2);

然后重新运行应用程序。

表定义创建的列名与插入时尝试使用的列名不同

e、 g.您的表将具有列名FNAME而不是名字(etc)

其次,您在尝试使用名为First Name的列时会遇到问题,因为该列包含空格,并且必须将其括起来,例如[First Name]

我建议使用:-

public static final String NUMBER = "Number";
public static final String FNAME = "FirstName"; //<<<<<<<<<< space removed
public static final String LNAME = "LastName"; //<<<<<<<<<< space removed
public static final String COORDINATE = "Coordinate";
public static final String ADDRESS = "Address";
public static final String NOTES = "Notes";
要引入更改(例如,要运行onCreate方法,因为它仅在创建数据库时自动运行),您必须执行以下操作之一:-

  • 删除应用程序的数据
  • 卸载应用程序
  • 更改数据库版本号,例如将
    super(上下文,数据库名称,null,1);
    更改为
    super(上下文,数据库名称,null,2);

然后重新运行应用程序。

使用
insertOrThrow()
而不是
insert()
来获取更多描述性错误异常。您将了解到您的列名并不是您所期望的那样。@zoe知道了。谢谢you@laalto我将尝试使用
insertOrThrow()
而不是
insert()来实现
了解更多描述性错误例外。您将了解到,您的列名并不是您所期望的那样。@zoe知道了。谢谢you@laalto我会努力实现这一点,我也很欣赏“引入变更”这句话,我也很欣赏“引入变更”这句话。