Listing 14.6 Shows Error even in copied code from Solutions File


#1

Having gotten to the end of page 296 (Implicit Intents) the app crashed with LogCat reporting it couldn’t find ‘suspect’ in the database. I tried to diagnose the cause but failed and so I reverted to a backup (End of Chapter 13). However upon reaching the end of 14.6 (Creating crime table) Android Studio flagged the comma in this line:

CrimeTable.Cols.DATE + ", " +

with this error:

')',<column constraint>, <type name> or comma expected, got ';'

I checked to whole onCreate function I could see no difference to that in the book. I typed over the comma with a comma and the error jumped to the previous line but flagging the end quotation mark (same error). I then commented the whole thing and retyped it out but the same error popped up so I copied the onCreate function from the Solutions File and that too had the same error.

If I ‘Run the App’ on my device it crashes on load (obviously) and LogCat reports this:

Caused by: android.database.sqlite.SQLiteException: near ";": syntax error (code 1): , while compiling: create table crimes( _id integer primary key autoincrement, uuid, title, date;, solved)

In between all this I had closed Android Studio, restarted laptop and relaunched Android Studio (thinking it might be a glitch as it did not flag this when I managed to get to page 296) but it still reports the same error. As far as I can see no-one else has had this issue which is why it is baffling me.

Any ideas?

Here is my code for CrimeBaseHelper.java:

Summary

package com.bignerdranch.android.criminalintent.database;

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

import com.bignerdranch.android.criminalintent.database.CrimeDbSchema.CrimeTable;

public class CrimeBaseHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
private static final String DATABASE_NAME = “crimeBase.db”;

public CrimeBaseHelper(Context context) {
    super(context, DATABASE_NAME, null, VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + CrimeTable.NAME + "(" +
            " _id integer primary key autoincrement, " +
            CrimeTable.Cols.UUID + ", " +
            CrimeTable.Cols.TITLE + ", " +
            CrimeTable.Cols.DATE + ", " +
            CrimeTable.Cols.SOLVED +
            ")"
    );
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}


#2

Solved!

Ha, found it! In my defining of table columns in CrimeDbSchema.java I accidently added a ‘;’ within the string quotations for DATE.

I put:

public static final String DATA = "date;";

What a stupid mistake.