当前位置: 首页 > 面试题库 >

Android:表中没有名为“变量名”的列MySql数据库错误

贺懿轩
2023-03-14
问题内容

当我尝试在数据库中放置新条目时,出现错误和下面显示的错误。我已经搜索了好几个小时,但无法检测到出了什么问题。任何输入都是极好的!

这是 LogCat错误

02-27 23:02:51.451: E/SQLiteLog(6777): (1) table dager has no column named brutto
02-27 23:02:51.451: E/SQLiteDatabase(6777): Error inserting brutto=0 date=21.03.2013      
hours=4
02-27 23:02:51.451: E/SQLiteDatabase(6777): android.database.sqlite.SQLiteException:    
table dager has no column named brutto (code 1): , while compiling: INSERT INTO     
dager(brutto,date,hours) VALUES (?,?,?)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at 
android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at           android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at com.adev.timelonn.DatabaseHandler.addDay(DatabaseHandler.java:79)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at com.adev.timelonn.AddHours.onClick(AddHours.java:99)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.view.View.performClick(View.java:4084)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.view.View$PerformClick.run(View.java:16966)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.os.Handler.handleCallback(Handler.java:615)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.os.Looper.loop(Looper.java:137)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at android.app.ActivityThread.main(ActivityThread.java:4931)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at java.lang.reflect.Method.invokeNative(Native Method)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at java.lang.reflect.Method.invoke(Method.java:511)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
02-27 23:02:51.451: E/SQLiteDatabase(6777):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at dalvik.system.NativeStart.main(Native   
Method)

我的 数据库文件

 public class DatabaseHandler extends SQLiteOpenHelper {
 private static final int DATABASE_VERSION = 1;

 // Database Name
 private static final String DATABASE_NAME = "timeliste";

 // Contacts table name
 private static final String TABLE_DAYS = "dager";

 // Contacts Table Columns names
 private static final String KEY_ID = "id";
 private static final String KEY_DATE = "date";
 private static final String KEY_HOURS = "hours";
 private static final String KEY_UB = "ub";
 private static final String KEY_BRUTTO = "brutto";

 public DatabaseHandler(Context context) {
  super(context, DATABASE_NAME, null, DATABASE_VERSION);
 }

 // Creating Tables
 @Override
  public void onCreate(SQLiteDatabase db)        
 String CREATE_DAY_TABLE = "CREATE TABLE " + TABLE_DAYS + "(" 
 + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT," + KEY_HOURS + " INTEGER,     
     " 
 + KEY_UB + " INTEGER," + KEY_BRUTTO + "INTEGER," + ")"; 
 db.execSQL(CREATE_DAY_TABLE);
 }

 // Upgrading database
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // Drop older table if existed
  db.execSQL("DROP TABLE IF EXISTS " + TABLE_DAYS);

  // Create tables again
  onCreate(db);
 }

 /**
  * All CRUD(Create, Read, Update, Delete) Operations
  */

 // Adding new contact
 void addDay(AddNewDay newday) {
  SQLiteDatabase db = this.getWritableDatabase();


  ContentValues values = new ContentValues();
  values.put(KEY_DATE, newday.getDate()); // GetDate
  values.put(KEY_BRUTTO, newday.getBrutto()); // GetBruttoLønn
  values.put(KEY_HOURS, newday.getHours()); // GetHours
  values.put(KEY_UB, newday.getUb()); // GetUBTillegg

  // Inserting Row
  db.insert(TABLE_DAYS, null, values);
  db.close(); // Closing database connection
 }

 // Get single day
 AddNewDay getContact(int id) {
  SQLiteDatabase db = this.getReadableDatabase();

  Cursor cursor = db.query(TABLE_DAYS, new String[] { KEY_ID,
    KEY_DATE, KEY_HOURS, KEY_BRUTTO, KEY_UB }, KEY_ID + "=?",
    new String[] { String.valueOf(id) }, null, null, null, null);
  if (cursor != null)
   cursor.moveToFirst();

  AddNewDay newday = new AddNewDay(Integer.parseInt(cursor.getString(0)),
    cursor.getString(1), Integer.parseInt(cursor.getString(2)),
    Integer.parseInt(cursor.getString(3)),Integer.parseInt(cursor.getString(4)));
  // return contact
  return newday;
 }

 // Getting All Contacts
 public List<AddNewDay> getAllContacts() {
  List<AddNewDay> contactList = new ArrayList<AddNewDay>();
  // Select All Query
  String selectQuery = "SELECT  * FROM " + TABLE_DAYS;

  SQLiteDatabase db = this.getWritableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);

  // looping through all rows and adding to list
  if (cursor.moveToFirst()) {
   do {
    AddNewDay days = new AddNewDay();
    days.setID(Integer.parseInt(cursor.getString(0)));
    days.setDate(cursor.getString(1));
    days.setHours(Integer.parseInt(cursor.getString(2)));
    days.setUb(Integer.parseInt(cursor.getString(3)));
    days.setBrutto(Integer.parseInt(cursor.getString(4)));
    // Adding contact to list
    contactList.add(days);
   } while (cursor.moveToNext());
  }

  // return contact list
  return contactList;
 }

 // Updating single contact
 public int updateDay(AddNewDay newday) {
  SQLiteDatabase db = this.getWritableDatabase();

  ContentValues values = new ContentValues();
  values.put(KEY_ID,  newday.getID());
  values.put(KEY_DATE, newday.getDate());
  values.put(KEY_HOURS, newday.getHours());
  values.put(KEY_UB, newday.getUb());
  values.put(KEY_BRUTTO, newday.getUb());

  // updating row
  return db.update(TABLE_DAYS, values, KEY_ID + " = ?",
    new String[] { String.valueOf(newday.getID()) });
 }

 // Deleting single contact
 public void deleteDay(AddNewDay newday) {
  SQLiteDatabase db = this.getWritableDatabase();
  db.delete(TABLE_DAYS, KEY_ID + " = ?",
    new String[] { String.valueOf(newday.getID()) });
  db.close();
 }

 // Getting contacts Count
 public int getContactsCount() {
  String countQuery = "SELECT  * FROM " + TABLE_DAYS;
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(countQuery, null);
  cursor.close();

  // return count
  return cursor.getCount();
 }


}

然后是我的 AddNewDay文件

  public class AddNewDay {

 //private variables
     int _id;
     String _date;
     int _hours;
     int _ubtillegg;
     int _brutto;

     // Empty constructor
     public AddNewDay(){
     }
     // constructor
     public AddNewDay(int id, String date, int hours, int ubtillegg, int            brutto){
      this._id = id;
      this._date = date;
      this._hours = hours;
      this._ubtillegg = ubtillegg;
      this._brutto = brutto;
     }       
     // constructor
     public AddNewDay(String date, int hours, int brutto){
      this._date = date;
      this._hours = hours;
      this._brutto = brutto;
     }
     // getting ID
     public int getID(){
      return this._id;
     }

     // setting id
     public void setID(int id){
      this._id = id;
     }

     // getting date
     public  String getDate(){
      return this._date;
     }

     // setting date
     public void setDate(String date){
      this._date = date;
     }

     // getting hours
     public int getHours(){
      return this._hours;
     }

     // setting hours
     public void setHours(int hours){
      this._hours = hours;
     }

     // getting ubtillegg
     public int getUb(){
      return this._ubtillegg;
     }

     // setting ubtillegg
     public void setUb(int ub){
      this._ubtillegg = ub;
     }

     // getting brutto
     public int getBrutto(){
      return this._brutto;
     }

     // setting brutto
     public void setBrutto(int brutto){
      this._brutto = brutto;
     }

             public String toString() {
         return _date + " jobbet du " + _hours + " timer.";
             }  
            }

这就是我在数据库中添加新条目的方式。

        // # Makes a new object of newday.
        AddNewDay newday = new AddNewDay ();
        newday._date = "21.03.2013";
        newday._id = 1;
        newday._hours = 4;
        newday._ubtillegg = 1500;

        // # Open databse connection and writes new day.
        DatabaseHandler connect = new DatabaseHandler (this);
        connect.addDay(newday);

        // # Updates the dblist with entries.
        GlobalVariables.dblist = connect.getAllContacts();

问题答案:

所以基本上我找到了解决方案。我仍然对它的愚蠢感到困惑。显然,数据库工作是我的超敏感材料!我的问题是我忘记了最后一个“
INTEGER”值中的空格。所以不是" INTEGER"我写了"INTEGER",而是给了我一行,"bruttoINTEGER"而不是“
brutto”。因此,空格是错误。我将createTable函数重写为:

 public void onCreate(SQLiteDatabase db) {
   String CREATE_DAY_TABLE = "CREATE TABLE " + TABLE_DAYS + "(" 
 + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT," + KEY_HOURS + " INTEGER, " 
 + KEY_UB + " INTEGER," + KEY_BRUTTO + " INTEGER" + ");"; 
 db.execSQL(CREATE_DAY_TABLE);
 }


 类似资料:
  • 问题内容: MySQL中有什么方法可以将数据库名称放入变量中?例如,当我有一个名为“ db1”的数据库时,可以执行以下操作: 编辑:还有一个我想做的例子: 问题答案: 付出了很大的努力,是的。

  • 我的问题如下,我有一个Spring Boot应用程序,我使用Jooq for sql,我设置我的pom来生成表。数据库信息设置在环境变量中。它在Intellij内部运行良好,但当我生成。WAR并在客户端上上传应用程序只有当客户端库名与创建jooq代码时我pom.xml中的名称相同时,才有效。表完全一样,唯一可以改变的是库名,所以我在环境变量中查找名称信息。我的变量都设置在属性中,在调试中,我可以看

  • 我知道有一些关于这个的话题,我试着去了解所有的答案,但是这对我的情况没有帮助。我一直收到错误,认为列SecondPhone不存在

  • 问题内容: 好吧,所以我对PHP和SQL / MySQL还是相当陌生,因此感谢您的帮助。 我觉得我采取了正确的方法。我在php.net上搜索了“ MySQL显示所有表名”,它返回了不建议使用的方法,并建议使用MySQL查询,但不确定“模式”是什么意思,但是我搜索了“ SQL通配符”并得到了“% ”符号。根据我发现的所有内容,这应该可以工作并在末尾输出表名,但事实并非如此。有什么建议么?提前致谢。

  • 问题内容: 我正在尝试执行此查询: 这将产生以下错误: Msg 1087,第16级,状态1,第5行 必须声明表变量“ @tablename”。 动态填充表名的正确方法是什么? 问题答案: 对于静态查询(如您的问题中的查询),表名和列名必须是静态的。 对于动态查询,应动态生成完整的SQL,并使用sp_executesql执行它。 这是一个脚本示例,用于比较不同数据库的相同表之间的数据: 静态查询:

  • 下面是我想做的一个例子: 如果表名更改了,我希望能够在变量中更改一次,而不是对所有出现的情况进行查找和替换。 到目前为止,我找到的唯一解决方案是使用动态SQL并将字符串串联起来,如下例所示: