【问题标题】:Android: table has no column named 'columnname'Android:表没有名为“列名”的列
【发布时间】:2015-11-30 10:36:09
【问题描述】:

我有一个错误:android.database.sqlite.SQLiteException:表 aerzte 没有名为 _vorname 的列

但我的表有 _vorname 列。我找不到错误,请帮助我。 代码如下:

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "data.db"; 
private static final String TABLE_Aerzte = "aerzte";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_Name = "_name";
private static final String COLUMN_Passwort = "_passwort";
private static final String COLUMN_Vorname = "_vorname";

//second table
private static final String TABLE_Patienten = "patienten";
private static final String COLUMN_patID = "_id";
private static final String COLUMN_patName = "_name";
private static final String COLUMN_patVorname = "_vorname";
private static final String COLUMN_patSVNR = "_svnr";



//third table
private static final String TABLE_Werte = "werte";
private static final String COLUMN_wertID = "_id";
private static final String COLUMN_wertpatName = "_name"; //foreign key -> patient (1:n) beziehung
private static final String COLUMN_wertDatzeit = "_datzeit";
private static final String COLUMN_wertTemperatur = "_temperatur";
private static final String COLUMN_wertMessort = "_messort";

 public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
     }


   //create tables:
       @Override
public void onCreate(SQLiteDatabase db) {
    //tabelle arzt
    String query = "CREATE TABLE  "+TABLE_Aerzte+"("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLUMN_Passwort+" TEXT, "+COLUMN_Name+ " TEXT, " +COLUMN_Vorname+ "TEXT " + ");";
    db.execSQL(query);

    //tabelle patient
    String query2 = "CREATE TABLE  "+TABLE_Patienten+"("+COLUMN_patID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLUMN_patName+" TEXT,"+COLUMN_patVorname+" TEXT, "+COLUMN_patSVNR+" LONG" + ");";
    db.execSQL(query2);

    //tabelle wert
    String query3 = "CREATE TABLE  "+TABLE_Werte+"("+COLUMN_wertID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLUMN_wertMessort+" TEXT, "+COLUMN_wertTemperatur+ " INTEGER, "+COLUMN_wertDatzeit+" DATETIME, "+COLUMN_wertpatName+" TEXT, FOREIGN KEY" + ");";
    db.execSQL(query3);

}



//insert
 public void registerPhysician(Fieberwerte fieberwerte) { // public void registerPhysician(etname, etpass, etvorname)

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    //values.put(COLUMN_ID, 1);
    values.put(COLUMN_Passwort, fieberwerte.getPasswort());
    values.put(COLUMN_Name, fieberwerte.getName());
    values.put(COLUMN_Vorname, fieberwerte.getVorname());
    //db.insert(TABLE_Aerzte, null, values);
    db.insertWithOnConflict(TABLE_Aerzte, null, values, SQLiteDatabase.CONFLICT_REPLACE);
    //db.close();
}

我希望你们能帮助我解决这个错误。我检查了几次代码,但没有发现任何错误:-(

【问题讨论】:

  • 离题:这个问题是由无法再重现的问题或简单的印刷错误引起的。

标签: android sqlite insert


【解决方案1】:

你错过了一个空格

" TEXT, " +COLUMN_Vorname+ "TEXT " + ");";

在列名和类型之间添加空格

" TEXT, " +COLUMN_Vorname+ " TEXT " + ");";

【讨论】:

  • 不,现在我有一个语法错误语法错误(代码 1):,编译时:CREATE TABLE werte(_id INTEGER PRIMARY KEY AUTOINCREMENT, _messort TEXT, _temperatur INTEGER, _datzeit DATETIME, _name TEXT, FOREIGN KEY );
  • syntax error 。这意味着CREATE TABLE 查询错误
【解决方案2】:

错误在这里

//tabelle arzt
String query = "CREATE TABLE  "+TABLE_Aerzte+"("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLUMN_Passwort+" TEXT, "+COLUMN_Name+ " TEXT, " +COLUMN_Vorname+ "TEXT " + ");";

COLUMN_Vorname 后面少了一个空格,TEXT 前面加一个空格。

COLUMN_Vorname+ " TEXT " + "

完成此操作后,卸载您的应用程序并尝试一下

【讨论】:

  • 我在“TEXT”之前编辑了一个空格,我卸载了我的应用程序并再次尝试,但仍然出现同样的错误
  • 现在不知何故出现了语法错误, _temperatur INTEGER, _datzeit DATETIME, _name TEXT, FOREIGN KEY);
【解决方案3】:

你必须像这样使用外键创建:

 String query3 = "CREATE TABLE  "+TABLE_Werte+"("+COLUMN_wertID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLUMN_wertMessort+" TEXT, "+COLUMN_wertTemperatur+ " INTEGER, "+COLUMN_wertDatzeit+" DATETIME, "+COLUMN_wertpatName+" TEXT," + " FOREIGN KEY ("+COLUMN_wertTemperatur+") REFERENCES "+TABLE_Patienten+"("+COLUMN_patID+"));";

这里的“COLUMN_wertTemperatur”是创建表中的外键,它引用列名为“COLUMN_patID”的“TABLE_Patienten”表的主键。

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多