【问题标题】:Error inserting into sqlite databases插入 sqlite 数据库时出错
【发布时间】:2015-02-25 05:35:11
【问题描述】:

我是安卓的新手。从昨天开始我就收到了这个错误,这很令人沮丧,很抱歉造成混乱。 当我运行它时,我得到了错误

            //String texto_a_añadir= et_asistencia.getText().toString();
            //int _texto_a_añadir = Integer.parseInt(texto_a_añadir);
            classRegister(v,1,materiaId);

错误:

.example.sebas.myapplication E/SQLiteLog﹕ (1) table clases has no column named asistencia
02-25 00:26:17.658    2210-2210/com.example.sebas.myapplication E/SQLiteDatabase﹕ Error inserting materia_id=9 asistencia=1
    android.database.sqlite.SQLiteException: table clases has no column named asistencia (code 1): , while compiling: INSERT INTO clases(materia_id,asistencia) VALUES (?,?)

这是源代码。 公共类 ClassDataSource {

public static final String TABLE_CLASES = "clases";
public static final String CLASES_ID = "_id";
public static final String CLASES_MATERIA_ID = "materia_id";
public static final String CLASES_ASISTENCIA = "asistencia";
private final String[] allColumns = {
        CLASES_ID,CLASES_MATERIA_ID,CLASES_ASISTENCIA
};
private SQLiteDatabase database;

public static String createTableQuery(){
    return "CREATE TABLE " + TABLE_CLASES + " ("
            +CLASES_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
            + CLASES_MATERIA_ID + " INTEGER NOT NULL,"
            + CLASES_ASISTENCIA + "INTEGER DEFAULT 0,"
            + "FOREIGN KEY ("+CLASES_MATERIA_ID+") REFERENCES "
            + MateriaDataSource.TABLE_SUBJECTS + " ("+MateriaDataSource.SUBJECT_ID+ "));";


}

public ClaseDataSource(SQLiteDatabase database){
    this.database = database;
}

public Clase createClase(int asistencia,long materia_id){
    ContentValues values = new ContentValues();
    values.put(CLASES_MATERIA_ID, materia_id);
    values.put(CLASES_ASISTENCIA, asistencia);
    long insertID = database.insert(TABLE_CLASES,null,values);
    Cursor cursor = database.query(TABLE_CLASES,allColumns,CLASES_ID + " = " + insertID, null,null,null,null);
    cursor.moveToFirst();
    Clase newClase = cursorToClase(cursor);
    cursor.close();
    return newClase;
}

public void deleteClase(Clase clase) {
    long id = clase.getId_clase();
    System.out.println("Class deleted with id: " + id);
    database.delete(TABLE_CLASES, CLASES_ID + " = " + id, null);
}

public Clase getClaseById(long id){
    Cursor cursor = database.query(TABLE_CLASES,allColumns,CLASES_ID + " = " + id, null,null,null,null);
    cursor.moveToFirst();
    Clase newClase = cursorToClase(cursor);
    cursor.close();
    return newClase;
}

public List<Clase> getAllClasesByMateria(long id){
    List<Clase> clases = new ArrayList<>();
    Cursor cursor = database.query(TABLE_CLASES, allColumns, CLASES_MATERIA_ID + " = " + id, null,null,null,null,null);
    cursor.moveToFirst();
    while(!cursor.isAfterLast()){
        Clase clase = cursorToClase(cursor);
        clases.add(clase);
        cursor.moveToNext();
    }
    cursor.close();
    return clases;
}

private Clase cursorToClase(Cursor cursor) {
    Clase clase = new Clase();
    clase.setId_clase(cursor.getLong(0));
    clase.setId_materia(cursor.getLong(1));
    clase.setAsistencia(cursor.getInt(2));
    return clase;
}

}

【问题讨论】:

  • 你在"INTEGER DEFAULT 0,"开头少了一个空格。

标签: android mysql sqlite


【解决方案1】:

您的创建 SQL 命令有误。

 + CLASES_ASISTENCIA + "INTEGER DEFAULT 0,"// add space before column type

更正:

"CREATE TABLE " + TABLE_CLASES + " ("
        +CLASES_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
        + CLASES_MATERIA_ID + " INTEGER NOT NULL,"
        + CLASES_ASISTENCIA + " INTEGER DEFAULT 0,"
        + "FOREIGN KEY ("+CLASES_MATERIA_ID+") REFERENCES "
        + MateriaDataSource.TABLE_SUBJECTS + " ("+MateriaDataSource.SUBJECT_ID+ "));";

【讨论】:

  • 我相信该表确实已创建;它只有一个名为asistenciaINTEGER 的列。否则,错误将与缺少表有关。
  • 我更改了它,但我继续收到相同的错误:(。还有什么可能?
  • @Sebas 但更改后,您必须卸载您的应用并再次安装一个全新的 apk。
【解决方案2】:
ERROR: .example.sebas.myapplication E/SQLiteLog﹕ (1) table clases has no column named asistencia 02-25 00:26:17.658 2210-2210/com.example.sebas.myapplication E/SQLiteDatabase﹕ Error inserting materia_id=9 asistencia=1 android.database.sqlite.SQLiteException: table clases has no column named asistencia (code 1): , while compiling: INSERT INTO clases(materia_id,asistencia) VALUES (?,?)

您在 CLASES_ASISTENCIA 列中的 INTEGER 之前缺少一个 " "(空格)。

改变

public static String createTableQuery(){
    return "CREATE TABLE " + TABLE_CLASES + " ("
            +CLASES_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
            + CLASES_MATERIA_ID + " INTEGER NOT NULL,"
            + CLASES_ASISTENCIA + "INTEGER DEFAULT 0,"
            + "FOREIGN KEY ("+CLASES_MATERIA_ID+") REFERENCES "
            + MateriaDataSource.TABLE_SUBJECTS + " ("+MateriaDataSource.SUBJECT_ID+ "));";
}

public static String createTableQuery(){
    return "CREATE TABLE " + TABLE_CLASES + " ("
            +CLASES_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
            + CLASES_MATERIA_ID + " INTEGER NOT NULL,"
            + CLASES_ASISTENCIA + " INTEGER DEFAULT 0,"
            + "FOREIGN KEY ("+CLASES_MATERIA_ID+") REFERENCES "
            + MateriaDataSource.TABLE_SUBJECTS + " ("+MateriaDataSource.SUBJECT_ID+ "));";
}

希望这会有所帮助。

【讨论】:

    【解决方案3】:
        public static String createTableQuery(){
            return "CREATE TABLE " + TABLE_CLASES + " ("
                    +CLASES_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + CLASES_MATERIA_ID + " INTEGER NOT NULL,"
                    + CLASES_ASISTENCIA + " INTEGER DEFAULT 0,"
                    + "FOREIGN KEY ("+CLASES_MATERIA_ID+") REFERENCES "
                    + MateriaDataSource.TABLE_SUBJECTS + " ("+MateriaDataSource.SUBJECT_ID+ "));";
        }
    
    // error at here,  "CLASES_ASISTENCIA + "INTEGER DEFAULT 0," need a space befoe integer
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      相关资源
      最近更新 更多