我从某个地方复制了一个sqlite使用的示例。他们定义了5列,我将其更改为4列。
相关部分在这里:

    private final String DB_NAME = "mcustomerDbName";
    private final String TABLE_NAME = "mcustomeTableName";
    SQLiteDatabase customersDB = null;
    /** Called when the activity is first created. */


     ..........................................

这是表4列的上下文
    private void mFillDbsTable(){
        try {

            customersDB.execSQL("INSERT INTO " +
                    TABLE_NAME +
                    " Values ('ABARTH','500','Abarth','15.3846153846154' );");
            customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ( 'ABARTH ', 'Grande Punto ', '1.4 T-Jet 155 ', '14.9253731343284 ' );");
            customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ( 'ALFA ROMEO ', 'MiTo ', '1.4 16v TB 120  ', '16.3934426229508 ');");
            customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ( 'ALFA ROMEO ', 'MiTo ', '1.3 JTDm 90 ', '22.2222222222222 ');");
            customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ( 'ALFA ROMEO ', '147 ', '1.6 (120 bhp) ', '12.1951219512195 ');");
            customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ( 'ALFA ROMEO ', '147 ', '2.0 ', '11.2359550561798 ');");

     ..........................................

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /*setContentView(R.layout.activity_delek);**/
     ArrayList<String> results = new ArrayList<String>();
        try {
            customersDB =  this.openOrCreateDatabase(  DB_NAME, MODE_PRIVATE, null);
            customersDB.execSQL("CREATE TABLE IF NOT EXISTS " +
                    TABLE_NAME +
                    " (Name VARCHAR," +
                    " Street VARCHAR, Block VARCHAR, City VARCHAR);");
            mFillDbsTable();
             Cursor c = customersDB.rawQuery("SELECT Name, Street, Block, City  FROM "    +
                    TABLE_NAME +
                       " where Name == 'TOYOTA' or Name == 'Yosi' ", null);
            if (c != null ) {
                if  (c.moveToFirst()) {
                    do {
                        String name = c.getString(c.getColumnIndex("Name"));
                           String street = c.getString(c.getColumnIndex("Street"));

                              String city = c.getString(c.getColumnIndex("City"));

                            results.add(name + ", " + street + " "+ city );
                    }while (c.moveToNext());
                }
            }
            setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results));
         } catch (SQLiteException se ) {
            Log.e(getClass().getSimpleName(), "create/Open the database problem");
        } finally {
            if (customersDB != null)
                customersDB.execSQL("DELETE FROM " +   TABLE_NAME);
                customersDB.close();
        }

我在日志中收到此消息:
 10-01 21:59:59.434: I/Database(1067): sqlite returned: error code = 1, msg = table            mcustomeTableName has 5 columns but 4 values were supplied.

为什么??我有4列

最佳答案

该表可能已经存在于上一次运行中,没有进行任何更改,但在数据库中仍然有5列(如果不存在,则创建表)。您可以通过从ADP登录到sqllite来验证这一点。在运行应用程序之前,只需删除表即可。

此外,在插入语句中提供一个列列表。无论如何,这都是一个好习惯,因为您的应用程序将对模式更改更加健壮:

"INSERT INTO " + TABLE_NAME + " (Name, Street, Block, City) Values (" ...etc

09-16 10:46