【问题标题】:android.database.sqlite.SQLiteException: table Records has no column named (code 1): , while compiling: INSERT INTO Records() VALUES (?,?,?,?)android.database.sqlite.SQLiteException: table Records has no column named (code 1): ,同时编译:INSERT INTO Records() VALUES (?,?,?,?)
【发布时间】:2017-11-27 13:27:30
【问题描述】:

我的活动代码

        DatabaseHandler db = new DatabaseHandler(this);

        db.addRecord(new Record(Price,Item,Details, currentDateandTime));

我的数据库代码

package budgetreport.com.budgetreport;

   import android.content.ContentValues;
   import android.content.Context;
   import android.database.Cursor;
   import android.database.sqlite.SQLiteDatabase;
   import android.database.sqlite.SQLiteOpenHelper;

   import java.util.ArrayList;
   import java.util.List;

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 3;

// Database Name
private static final String DATABASE_NAME = "Records_Item Purcashes";

// Contacts table name
private static final String TABLE_RECORDS = "Records";

// Contacts Table Columns names
private static final String KEY_PRICE = "Price";
private static final String KEY_ITEM = "Item";
private static final String KEY_DETAILS = "Details";
private static final String KEY_DATE = "Date";

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

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_RECORDS + "("
            + KEY_PRICE + " INTEGER PRIMARY KEY," + KEY_ITEM + " TEXT,"
            + KEY_DETAILS + " TEXT" + KEY_DATE + " TEXT" + ")";
    db.execSQL(CREATE_CONTACTS_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_RECORDS);

    // Create tables again
    onCreate(db);
}
// Adding new contact
public void addRecord(Record record) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_PRICE, record.getPrice()); // Contact Name
    values.put(KEY_ITEM, record.getItem()); // Contact Name
    values.put(KEY_DETAILS, record.getDetails()); // Contact Name
    values.put(KEY_DATE, record.getDetails()); // Contact Phone Number

    // Inserting Row
    db.insert(TABLE_RECORDS, null, values);
    db.close(); // Closing database connection
}
// Getting single contact
public Record getRecord(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_RECORDS, new String[] { KEY_PRICE,
                    KEY_ITEM, KEY_DETAILS, KEY_DATE }, KEY_PRICE + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    Record record = new Record(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2));
    // return contact
    return record;
}
// Getting All Contacts
public List<Record> getAllContacts() {
    List<Record> contactList = new ArrayList<Record>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_RECORDS;

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

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Record record = new Record();
            record.setPrice(Integer.parseInt(cursor.getString(0)));
            record.setItem(cursor.getString(1));
            record.setDetails(cursor.getString(2));
            record.setDate(cursor.getString(3));

            // Adding contact to list
            contactList.add(record);
        } while (cursor.moveToNext());
    }

    // return contact list
    return contactList;
}
// Getting contacts Count
public int getRecordsCount() {
    String countQuery = "SELECT  * FROM " + TABLE_RECORDS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();
}
// Updating single contact
public int updateContact(Record record) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_PRICE, record.getPrice());
    values.put(KEY_DETAILS, record.getDetails());
    values.put(KEY_DATE, record.getDate());

    // updating row
    return db.update(TABLE_RECORDS, values, KEY_PRICE + " = ?",
            new String[] { String.valueOf(record.getPrice()) });
}
// Deleting single contact
public void deleteContact(Record record) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_RECORDS, KEY_PRICE + " = ?",
            new String[] { String.valueOf(record.getPrice()) });
    db.close();
}
}

这是错误

E/SQLiteLog: (1) 表 Records 没有名为 Date 的列 E/SQLiteDatabase:插入日期时出错=צ 详细信息=צ 项目=מ 价格=0 android.database.sqlite.SQLiteException: table Records has no column named Date (code 1): ,同时编译:INSERT INTO Records(Date,Details,Item,Price) VALUES (?,?,?,?) 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法) 在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:896) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:507) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在 android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 在 android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) 在 android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1499) 在 android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1371) 在budgetreport.com.budgetreport.DatabaseHandler.addRecord(DatabaseHandler.java:64) 在budgetreport.com.budgetreport.Report.onClick(Report.java:205) 在 android.view.View.performClick(View.java:5265) 在 android.view.View$PerformClick.run(View.java:21534) 在 android.os.Handler.handleCallback(Handler.java:815) 在 android.os.Handler.dispatchMessage(Handler.java:104) 在 android.os.Looper.loop(Looper.java:207) 在 android.app.ActivityThread.main(ActivityThread.java:5765) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

【问题讨论】:

    标签: android mysql sqlite


    【解决方案1】:

    在 SQL/Sqlite 中,“日期”是一个预定义的函数,您应该为日期列使用不同的名称,例如“str_date”,或者使用 "[" 来表示相同的名称。例如:“[日期]”

    在插入值时,使用这个:

    values.put("[" + KEY_DATE + "]", record.getDate());
    

    创建表时相同:

    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_RECORDS + "("
                + KEY_PRICE + " INTEGER PRIMARY KEY," + KEY_ITEM + " TEXT,"
                + KEY_DETAILS + " TEXT" + "[" + KEY_DATE + "]" + " TEXT" + ")";
    

    【讨论】:

      【解决方案2】:

      在您的创建表查询中,您错过了 KEY_DETAILS 列名后面的逗号。这里是创建表的正确查询。

       String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_RECORDS + "("
              + KEY_PRICE + " INTEGER PRIMARY KEY," + KEY_ITEM + " TEXT,"
              + KEY_DETAILS + " TEXT, " + KEY_DATE + " TEXT" + ")";
      

      【讨论】:

        【解决方案3】:

        这个错误最多分两种情况

        第一。由@sagar_Jathveda 解决了上层答案(有答案已解决的标志) 有些人犯了其他错误
        其他错误解决方案如下

        这里是解决方案: 我面临同样的问题,现在我解决了它

        我们你想制作数据库应用程序然后 你有两个java类 首先是参数 Params.java,另一个是 Contact.java,我们在其中创建构造函数、getter&setter 等。

        Param.java 下面的类代码:(请参阅第 5 行和第 6 行中的错误)并修复该引用

        package com.andro.background.crud_db.param;
        
        public class Params {
            public static final int DB_VERSION=1;
            public static final String DB_NAME="contacts_db"; //(-_-)check this, My mistake was "contact_db" , i write wrong name so it shows error
            public static final String TABLE_NAME="contacts_table"; // Right is "contact_table", this kinda error in your code
        
            //key of our table in db
            public static final String KEY_ID="id";
            public static final String KEY_NAME="name";
            public static final String KEY_PHONE="phone_number";
        }
        

        (在上面的代码中检查这个错误) 如果您犯了同样的错误,那么您的错误将如下代码所示

        2020-02-03 02:57:24.432 10705-10705/com.andro.background.cruddb E/SQLiteLog: (1) table contacts_table has no column named phone_number
        2020-02-03 02:57:24.434 10705-10705/com.andro.background.cruddb E/SQLiteDatabase: Error inserting name=sunnykanumber phone_number=9090909090
            android.database.sqlite.SQLiteException: table contacts_table has no column named phone_number (code 1): , while compiling: INSERT INTO contacts_table(name,phone_number) VALUES (?,?)
                at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
                at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501)
                at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1546)
                at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1417)
                at com.andro.background.cruddb.data.MyDbHandler.addContact(MyDbHandler.java:62)
                at com.andro.background.cruddb.MainActivity.onCreate(MainActivity.java:31)
                at android.app.Activity.performCreate(Activity.java:7009)
                at android.app.Activity.performCreate(Activity.java:7000)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                at android.app.ActivityThread.-wrap11(Unknown Source:0)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                at android.os.Handler.dispatchMessage(Handler.java:106)
                at android.os.Looper.loop(Looper.java:164)
                at android.app.ActivityThread.main(ActivityThread.java:6494)
                at java.lang.reflect.Method.invoke(Native Method)
                at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
        
        
        

        【讨论】:

          猜你喜欢
          • 2017-08-09
          • 2019-10-12
          • 2022-11-20
          • 2010-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-13
          • 2016-07-30
          相关资源
          最近更新 更多