База данных (3300): sqlite вернул: код ошибки = 1, msg = нет такой таблицы: Но имя таблицы проверяется? - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь вставить данные в таблицу, которая является частью более крупного проекта. Я получаю сообщение об ошибке выше и не могу понять, как создать таблицу. Код, который создал таблицу, приведен ниже, а имя таблицы - инспекции. Так что я очень растерялся.

Вот информация logcat

 02-27 18:38:45.956: I/Database(3559): sqlite returned: error code = 1, msg = no such table:       inspections
 02-27 18:38:45.967: E/Database(3559): Error inserting co_driver= driver=ewrre vehicle_id=ET 432 status=1 date_time=40 vehicle_type=truck
 02-27 18:38:45.967: E/Database(3559): android.database.sqlite.SQLiteException: no such table: inspections: , while compiling: INSERT INTO inspections(co_driver, driver, vehicle_id, status, date_time, vehicle_type) VALUES(?, ?, ?, ?, ?, ?);
02-27 18:38:45.967: E/Database(3559):   at android.view.View.performClick(View.java:2408)

Вот код, который создает таблицу

    private static final String DATABASE_CREATE = "create table inspections ("
    + "_id integer  primary key autoincrement, "
    + "vehicle_id   string  not null, "
    + "vehicle_type string  not null, "
    + "datetime     integer not null, "
    + "driver       string  not null, "
    + "codriver     string  , "
    + "status       integer not null "
    + ");";

public static void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
}

public static void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    Log.w(InspectionsTable.class.getName(), "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS inspections");
    onCreate(database);
}

Это класс DBhelper

   public class SignalSetDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "db";
private static final int DATABASE_VERSION = 1;

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

// Method is called during creation of the database
@Override
public void onCreate(SQLiteDatabase db) {
    CurrentStateTable.onCreate(db);
    HoursOfServiceTable.onCreate(db);
    InspectionsTable.onCreate(db);
    }

// Method is called during an upgrade of the database,
// e.g. if you increase the database version
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    CurrentStateTable.onUpgrade(database, oldVersion, newVersion);
    HoursOfServiceTable.onUpgrade(database, oldVersion, newVersion);
}
 }

Это адаптер класса

 public class InspectionDBAdapter {
private static final String KEY_ROWID ="_id";
private static final String KEY_VEHICLE_ID="vehicle_id";
private static final String KEY_VEHICLE_TYPE="vehicle_type";    
private static final String KEY_DATETIME="date_time";
private static final String KEY_DRIVER="driver";
private static final String KEY_CO_DRIVER="co_driver";  
private static final String KEY_STATUS="status";
private static final String DB_TABLE="inspections";
private Context context;
private SQLiteDatabase db;
private SignalSetDBHelper dbHelper;

public InspectionDBAdapter(Context context) {
    this.context = context;
}

public InspectionDBAdapter open() throws SQLException {
    dbHelper = new SignalSetDBHelper(context);
    db = dbHelper.getWritableDatabase();
    return this;
}

public void close() {
    dbHelper.close();
}

public void insertInspection( String vehicle_id, String vehicle_type, 
        int datetime, String driver, String codriver, int status)
{

    ContentValues newContact= createContentValue(vehicle_id, vehicle_type, 
         datetime,  driver, codriver,  status);

    db.insert(DB_TABLE, KEY_STATUS, newContact);

}

private static ContentValues createContentValue(String vehicle_id, String vehicle_type, 
        int datetime, String driver, String codriver, int status)
{
    ContentValues newContact= new ContentValues();
    newContact.put(KEY_VEHICLE_ID  , vehicle_id);
    newContact.put(KEY_VEHICLE_TYPE , vehicle_type);
    newContact.put(KEY_DATETIME  , datetime);
    newContact.put(KEY_DRIVER  , driver);
    newContact.put(KEY_CO_DRIVER , codriver);
    newContact.put(KEY_STATUS  , status);

    return newContact;

1 Ответ

2 голосов
/ 28 февраля 2012

Попробуйте сделать ваш класс SignalSetDBHelper следующим образом:

public class SignalSetDBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "db";
    private static final int DATABASE_VERSION = 1;
    private static final String INSPECTION_CREATE = "create table inspections ("
    + "_id integer  primary key autoincrement, "
    + "vehicle_id   string  not null, "
    + "vehicle_type string  not null, "
    + "datetime     integer not null, "
    + "driver       string  not null, "
    + "codriver     string  , "
    + "status       integer not null "
    + ");";

    public SignalSetDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }       
    @Override
    public void onCreate(SQLiteDatabase db) {

        database.execSQL(INSPECTION_CREATE); 
        //do same for other two tables
    }            
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {

        database.execSQL("DROP TABLE IF EXISTS inspections");
        // do same for other two tables
        onCreate(database);        
    }
}

А в вашем коде класса SignalSetDBHelper в методе onUpgrade вы не включили InspectionsTable.onUpgrade (база данных, oldVersion, newVersion); и после всех утверждений вы также должны добавить onCreate (database); попробуйте добавить это к существующему коду и посмотрите, какой успех вы получите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...