我得到了致命的异常:桌面车没有名为year的列

时间:2012-07-29 05:40:02

标签: android sqlite error-handling

可以找到为什么我得到这个错误可以有人帮忙吗?

package Android.data;

public class CarsDbConstants 
{

public static final String DATABASE_NAME = "cars.db";

public static final int DATABASE_VERSION = 1;
public static final String CARS_TABLE_NAME = "cars";

public static final String CAR_ID = "_id";
public static final String CAR_MANUFACTURER = "manufacturer";
public static final String CAR_YEAR= "year";
public static final String LOG_TAG = "CarsDb";

}

package Android.data;

public class CarsDBHelper extends SQLiteOpenHelper 
{
 public CarsDBHelper(Context context, String name, CursorFactory factory,
        int version)
{
    super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) 
{
    Log.d(LOG_TAG, "Creating all the tables");

    String CREATE_CARS_TABLE = 
            "CREATE TABLE " + CARS_TABLE_NAME + 
       "("  + CAR_ID + " INTEGER PRIMARY KEY,"
            + CAR_MANUFACTURER + " TEXT,"
            + CAR_YEAR + " INTEGER"+")";
    try 
    {
        db.execSQL(CREATE_CARS_TABLE);
    }
    catch (SQLiteException ex)
    {
        Log.e(LOG_TAG, "Create table exception: " + ex.getMessage());
    }
}
  }

   public void addCar(Cars car)
    {
        db = dbhelper.getWritableDatabase();

        ContentValues newCarValues = new ContentValues();
        //newCarValues.put(CAR_ID,car.get_id());
        newCarValues.put(CAR_MANUFACTURER, car.getManufacturer());
        newCarValues.put(CAR_YEAR, car.getYear());


        // Inserting the new row, or throwing an exception if an error occurred
        try
        {
            db.insertOrThrow(CARS_TABLE_NAME, null, newCarValues);
        }
        catch (SQLiteException ex)
        {
            Log.e(LOG_TAG, ex.getMessage());
            throw ex;
        }   
        finally
        {
            db.close();
        }
    }

     package Android.hwsqldb;

     public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    CarsHandler db = new CarsHandler(this);
    insertCars(db);
    Cursor cursor = db.getAllCars();
    this.startManagingCursor(cursor);
    showCars(cursor);
}



private void showCars(Cursor c) {
    Log.d("Reading:", "Reading all cars");

    ArrayList<String> items = new ArrayList<String>();

    while (c.moveToNext()) {
        items.add(String.format("%s: %s\n\t%s, %s",
                c.getInt(c.getColumnIndex(CAR_ID)),
                c.getString(c.getColumnIndex(CAR_MANUFACTURER)),
                c.getInt(c.getColumnIndex(CAR_YEAR))));
    }

    ListView lv = (ListView) findViewById(R.id.listView1);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, items);
    lv.setAdapter(adapter);
}





private void insertCars(CarsHandler db) 
{
    Log.d("Inserting:", "Inserting cars to DB");

    db.addCar(new Cars(1,"Subaru", 1987));
    db.addCar(new Cars(2,"Fiat", 1921));
    db.addCar(new Cars(3,"Susita", 1956));
    db.addCar(new Cars(4,"Mesrsedes", 1923));   
}

错误抛出:

07-29 07:08:47.315: E/AndroidRuntime(1165): FATAL EXCEPTION: main

07-29 07:08:47.315: E/AndroidRuntime(1165): java.lang.RuntimeException: Unable to start activity ComponentInfo{Android.hwsqldb/Android.hwsqldb.MainActivity}: java.util.MissingFormatArgumentException: Format specifier: s

创建的数据库表包含所有数据。

1 个答案:

答案 0 :(得分:0)

public static final String CAR_YEAR =“year”;

您可以更改列名称,如

public static final String CAR_YEAR =“_ year”;

然后测试你的代码并检查数据库和表是否是从android DDMS文件资源管理器中创建的。

您的代码块::

@覆盖 public void onCreate(Cdb) {     Log.d(LOG_TAG,“创建所有表”);

这个参数是什么'SQLiteDatabase db'。可以接受将SQLiteDatabase参数传递给onCreate()方法。

您可以调用SQLiteDatabase类。

SQLiteDatabase db =将新的SQLiteDatabase()转换为onCreate()方法