【问题标题】:SQLite Insert method doesn't work in my appSQLite 插入方法在我的应用程序中不起作用
【发布时间】:2020-01-27 16:35:58
【问题描述】:

我在我的项目中使用SQLiteOpenHelper,当我使用 add_leader 方法时一切正常,但是当我使用 add_Person 方法时它返回 false。 这是 sqlite 的第二个实例。

我使用 manjaro 18 linux

有什么帮助吗?

public class SqliteHelper extends SQLiteOpenHelper { 


@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL("CREATE TABLE " + START+ "("+KIND+" text) ");
    sqLiteDatabase.execSQL("CREATE TABLE " + PERRSON + "("+ID_PER+" INTEGER PRIMARY KEY AUTOINCREMENT ,"
            +FULLNAME_PER+" text,"+BIRTH_DAY_PER+"text," +BIRTH_MONTH_PER+" text,"+BIRTH_YEAR_PER+" text,"
            +LEVEL_EDUCATION+" text,"+MOY_ONE+" text,"+MOY_TWO+" text,"+MOY_THREE+"text) ");
    sqLiteDatabase.execSQL("CREATE TABLE " + LEADER + "("+ID_LEADER+" INTEGER PRIMARY KEY AUTOINCREMENT ,"+FULLNAME_LDR+" text,"+
            BIRTH_DAY_LDR+" text,"+BIRTH_MONTH_LDR+" text,"+BIRTH_YEAR_LDR+" text) ");

}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " + START);
    sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " + PERRSON);
    sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS " + LEADER);

    onCreate(sqLiteDatabase);
}




public boolean add_Person(String name, String date_day, String date_month, String date_year,
                          String level,String moy1,String moy2,String moy3) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(FULLNAME_PER, name);
    cv.put(BIRTH_DAY_PER, date_day);
    cv.put(BIRTH_MONTH_PER, date_month);
    cv.put(BIRTH_YEAR_PER, date_year);
    cv.put(LEVEL_EDUCATION, level);
    cv.put(MOY_ONE, moy1);
    cv.put(MOY_TWO, moy2);
    cv.put(MOY_THREE, moy3);
    long results = db.insert(PERRSON, null, cv);
    db.close();
    if (results == -1) return false;
    else return true;
}


public boolean add_leader(String fullname, String date_day, String date_month, String date_year) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(FULLNAME_LDR, fullname);
    cv.put(BIRTH_DAY_LDR, date_day);
    cv.put(BIRTH_MONTH_LDR, date_month);
    cv.put(BIRTH_YEAR_LDR, date_year);
    long results = db.insert(LEADER, null, cv);
    db.close();
    if (results == -1) return false;
    else return true;

}

【问题讨论】:

  • 您不应该将Text 类型用于仅限于数字的字段。文字很大!

标签: android sqlite android-sqlite sql-insert


【解决方案1】:

您的 PERRSON 表未创建,因为创建表查询中存在间距问题。 在 BIRTH_DAY_PER,MOY_THREE 列中发现间距问题。

替换这段代码

 sqLiteDatabase.execSQL("CREATE TABLE " + PERRSON + "("+ID_PER+" INTEGER PRIMARY KEY AUTOINCREMENT ,"
            +FULLNAME_PER+" text,"+BIRTH_DAY_PER+"text," +BIRTH_MONTH_PER+" text,"+BIRTH_YEAR_PER+" text,"
            +LEVEL_EDUCATION+" text,"+MOY_ONE+" text,"+MOY_TWO+" text,"+MOY_THREE+"text) ");

有了这个

 sqLiteDatabase.execSQL("CREATE TABLE " + PERRSON + "("+ID_PER+" INTEGER PRIMARY KEY AUTOINCREMENT ,"
            +FULLNAME_PER+" text,"+BIRTH_DAY_PER+" text," +BIRTH_MONTH_PER+" text,"+BIRTH_YEAR_PER+" text,"
            +LEVEL_EDUCATION+" text,"+MOY_ONE+" text,"+MOY_TWO+" text,"+MOY_THREE+" text)");

【讨论】:

    【解决方案2】:
       sqLiteDatabase.execSQL("CREATE TABLE " + PERRSON + "(" + ID_PER + " INTEGER PRIMARY KEY AUTOINCREMENT ,"
                + FULLNAME_PER + " text," + BIRTH_DAY_PER + " text," + BIRTH_MONTH_PER + " text," + BIRTH_YEAR_PER + " text,"
                + LEVEL_EDUCATION + " text," + MOY_ONE + " text," + MOY_TWO + " text," + MOY_THREE + " text" + ")");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 2012-08-05
      • 2020-08-10
      • 2019-10-12
      • 2016-03-02
      • 1970-01-01
      相关资源
      最近更新 更多