Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Hi I keep receiving this error and I've gone over my database structure many times and cannot see what I've done wrong

Below is my error

11-27 18:42:17.590: E/AndroidRuntime(16335): FATAL EXCEPTION: main
11-27 18:42:17.590: E/AndroidRuntime(16335): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.doja.myapp/com.doja.myapp.Database}: android.database.sqlite.SQLiteException: near "Database": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS Device Database (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, date TEXT NOT NULL, time TEXT NOT NULL, duration TEXT NOT NULL);
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.os.Looper.loop(Looper.java:137)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.ActivityThread.main(ActivityThread.java:4898)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at java.lang.reflect.Method.invokeNative(Native Method)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at java.lang.reflect.Method.invoke(Method.java:511)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at dalvik.system.NativeStart.main(Native Method)
11-27 18:42:17.590: E/AndroidRuntime(16335): Caused by: android.database.sqlite.SQLiteException: near "Database": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS Device Database (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, date TEXT NOT NULL, time TEXT NOT NULL, duration TEXT NOT NULL);
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1012)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at com.doja.myapp.DBAdapter$DBHelper.onCreate(DBAdapter.java:60)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at com.doja.myapp.DBAdapter.open(DBAdapter.java:73)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at com.doja.myapp.Database.openDB(Database.java:74)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at com.doja.myapp.Database.onCreate(Database.java:23)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.Activity.performCreate(Activity.java:5206)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
11-27 18:42:17.590: E/AndroidRuntime(16335):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
11-27 18:42:17.590: E/AndroidRuntime(16335):    ... 11 more
11-27 18:42:17.630: D/dalvikvm(16335): GC_CONCURRENT freed 170K, 10% free 12372K/13639K, paused 12ms+2ms, total 30ms

This is the database class

package com.doja.myapp;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.view.Menu;
import android.widget.TextView;

public class Database extends Activity {

DBAdapter myDb;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_database);

    Intent intent = getIntent();

    openDB();

    //long newId = myDb.insertRow("Doja", "12/12/2013", "06:34", "2.34 seconds");

    // Query for the record we just added.
    // Use the ID:

    //Cursor cursor = myDb.getAllRows();
    //Cursor cursor = myDb.getRow(newId);
    //displayRecordSet(cursor);

}

private void displayRecordSet(Cursor cursor) {
    // TODO Auto-generated method stub
    String message = "";
    // populate the message from the cursor

    // Reset cursor to start, checking to see if there's data:
    if (cursor.moveToFirst()) {
        do {
            // Process the data:
            int id = cursor.getInt(DBAdapter.COL_ROWID);
            String name = cursor.getString(DBAdapter.COL_NAME);
            String date = cursor.getString(DBAdapter.COL_DATE);
            String time = cursor.getString(DBAdapter.COL_TIME);
            String duration = cursor.getString(DBAdapter.COL_DURATION);

            // Append data to the message:
            message += "id:" + id
                       +", Name:" + name
                       +", Date:" + date
                       +", Time:" + time
                       +", Duration:" + duration
                       +"\n";
        } while(cursor.moveToNext());
    }

    cursor.close();
    displayText(message);
}

private void displayText(String message) {
    // TODO Auto-generated method stub
    TextView textView = (TextView) findViewById(R.id.textView);
    textView.setText(message);
}

private void openDB() {
    // TODO Auto-generated method stub
    myDb = new DBAdapter(this);
    myDb.open();
    Cursor cursor = myDb.getAllRows();
}

@Override
protected void onDestroy() {
    super.onDestroy();  
    closeDB();
}

private void closeDB() {
    // TODO Auto-generated method stub
    myDb.close();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.database, menu);
    return true;
}

}

my DBAdapater class

package com.doja.myapp;

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

public class DBAdapter {

private static final String TAG = "DBAdapter";

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "Results";
static final String DATABASE_TABLE = "Device Database";

private static final String KEY_ROWID = "_id";
public static final int COL_ROWID = 0;

static final String KEY_NAME = "name";
static final String KEY_DATE = "date";
static final String KEY_TIME = "time";
static final String KEY_DURATION = "duration";

public static final int COL_NAME = 1;
public static final int COL_DATE = 2;
public static final int COL_TIME = 3;
public static final int COL_DURATION = 4;

public static final String[] ALL_KEYS = new String[] {KEY_ROWID, KEY_NAME, KEY_DATE, KEY_TIME, KEY_DURATION};

private static final String DATABASE_TABLE_CREATE =
            "CREATE TABLE IF NOT EXISTS " + DATABASE_TABLE + " (" 
            + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + KEY_NAME + " TEXT NOT NULL, " 
            + KEY_DATE + " TEXT NOT NULL, " 
            + KEY_TIME + " TEXT NOT NULL, " 
            + KEY_DURATION + " TEXT NOT NULL"
            + ");";

private DBHelper myDBHelper;
private final Context myContext;
private SQLiteDatabase myDatabase;

public DBAdapter(Context ctx) {
    this.myContext = ctx;
    myDBHelper = new DBHelper(myContext);
}

private static class DBHelper extends SQLiteOpenHelper {    

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


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(DATABASE_TABLE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }
}

// Open the database connection.
public DBAdapter open() {
    myDatabase = myDBHelper.getReadableDatabase();
    return this;
}

// Close the database connection.
public void close() {
    myDBHelper.close();
}

// Add a new set of values to the database.
public long insertRow(String name, String date, String time, String duration) {

    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_NAME, name);
    initialValues.put(KEY_DATE, date);
    initialValues.put(KEY_TIME, time);
    initialValues.put(KEY_DURATION, duration);

    // Insert it into the database.
    return myDatabase.insert(DATABASE_TABLE, null, initialValues);
}

// Delete a row from the database, by rowId (primary key)
public boolean deleteRow(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    return myDatabase.delete(DATABASE_TABLE, where, null) != 0;
}

public void deleteAll() {
    Cursor c = getAllRows();
    long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
    if (c.moveToFirst()) {
        do {
            deleteRow(c.getLong((int) rowId));              
        } while (c.moveToNext());
    }
    c.close();
}

// Return all data in the database.
public Cursor getAllRows() {
    String where = null;
    Cursor c =  myDatabase.query(true, DATABASE_TABLE, ALL_KEYS, 
                        where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

// Get a specific row (by rowId)
public Cursor getRow(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    Cursor c =  myDatabase.query(true, DATABASE_TABLE, ALL_KEYS, 
                    where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

// Change an existing row to be equal to new data.
public boolean updateRow(long rowId, String name, String date, String time, String duration) {
    String where = KEY_ROWID + "=" + rowId;

    ContentValues newValues = new ContentValues();
    newValues.put(KEY_NAME, name);
    newValues.put(KEY_DATE, date);
    newValues.put(KEY_TIME, time);
    newValues.put(KEY_DURATION, duration);

    // Insert it into the database.
    return myDatabase.update(DATABASE_TABLE, newValues, where, null) != 0;
}

}

and within my main activity

public void openDatabase(View view) {
        Intent openDatabase = new Intent(MainActivity.this, Database.class);
        MainActivity.this.startActivity(openDatabase);
        startActivity(openDatabase);    
    }
share|improve this question
 
Change your table name with Device_Database –  ZouZou Nov 27 '13 at 18:56
add comment

1 Answer

up vote 2 down vote accepted

You can't call your table

Device Database 

you're not allowed to have a blank in your name. Suggestions, which would work:

DeviceDatabase
Device_Database
share|improve this answer
 
Thank you! It works! –  Doja Nov 27 '13 at 19:43
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.