2012-01-04 4 views
0

У меня есть база данных С внешним ключом Я использую инструкцию SELECT * FROM, но я все время получаю сообщение об ошибке при попытке просмотреть базу данных.Ошибка в инструкции SELECT * FROM База данных SQLite SQLite

SELECT * FROM ЗАЯВЛЕНИЕ

private final String MY_QUERY = "SELECT * FROM wwTable mLat INNER JOIN wwTimeTable _id ON wwTable._id=wwTimeTable.mName WHERE Table._id=wwTimetabel.mForeign"; 

МОИ КЛЮЧИ

public static final String KEY_ROWID = "_id"; 
public static final String KEY_ROWIDLL = "_id"; 
public static final String KEY_ROWIDTIME = "_id"; 
public static final String KEY_NAME = "mName"; 
public static final String KEY_LAT = "mLat"; 
public static final String KEY_LON = "mLon"; 
public static final String KEY_HOUR = "mHour"; 
public static final String KEY_MINUT = "mMinut"; 
public static final String KEY_DAY = "mDay"; 
public static final String KEY_MONTH = "mMonth"; 
public static final String KEY_YEAR = "mYear"; 
public static final String KEY_FOREIGN = "mForeign"; 

OnCreate ExecSQL

@Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL("CREATE TABLE " + WW_TABLE + 
        " (" + KEY_ROWIDLL + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_LAT + " TEXT NOT NULL, " + 
        KEY_LON + " TEXT NOT NULL);"); 
      db.execSQL("CREATE TABLE " + WW_TIMETABLE + 
        " (" + KEY_ROWIDTIME + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_HOUR + " TEXT NOT NULL, " + 
        KEY_FOREIGN + " INTEGER," + 
        " FOREIGN KEY ("+KEY_FOREIGN+") REFERENCES "+WW_TABLE+" ("+KEY_ROWIDLL+") ON DELETE CASCADE);"); 

CURSOR RAWQUERY

public Cursor fetchTime() { 
     // TODO Auto-generated method stub 
     //return ourdb.query(WW_TIMETABLE, new String[] {KEY_ROWIDTIME, KEY_HOUR, KEY_FOREIGN}, null, null, null, null, null); 
     return ourdb.rawQuery(MY_QUERY, new String[]{String.valueOf(KEY_FOREIGN)}); 

    } 

КАК ПРОСМОТРЕТЬ ВСЕ ЕГО ВНУТРИ ОДНОГО LISTACTIVITY

private void fillData() { 
    // Get all of the rows from the database and create the item list 

    mTimeNotesCursor = mDbHelper.fetchTime(); 
    startManagingCursor(mTimeNotesCursor); 
    // startManagingCursor(mNotesCursor); 

    // Create an array to specify the fields we want to display in the list (only TITLE) 
    String[] from = new String[]{WWDatabase.KEY_HOUR,WWDatabase.KEY_FOREIGN}; 

    //String[] fromTime = new String[]{WWDatabase.KEY_HOUR}; 


    // and an array of the fields we want to bind those fields to (in this case just text1) 
    int[] to = new int[]{R.id.textView2, R.id.textView3}; 

    //int[] toTime = new int[]{R.id.textView4}; 

    // Now create a simple cursor adapter and set it to display 
    SimpleCursorAdapter notes = 
     new SimpleCursorAdapter(this, R.layout.time_text_row, mTimeNotesCursor, from, to); 

    setListAdapter(notes); 
    // SimpleCursorAdapter notesTime = 

     //new SimpleCursorAdapter(this, R.layout.time_text_row, mTimeNotesCursor, fromTime, toTime); 
     //setListAdapter(notesTime); 
} 

СТЭК TRACE

01-04 09:47:30.260: E/AndroidRuntime(273): FATAL EXCEPTION: main 
01-04 09:47:30.260: E/AndroidRuntime(273): java.lang.RuntimeException: Unable to start activity ComponentInfo{www.freshapp.com.wherewhen.html/www.freshapp.com.wherewhen.html.TimeViewer}: android.database.sqlite.SQLiteException: near "Table": syntax error: , while compiling: SELECT * FROM wwTable mLat INNER JOIN wwTimeTable _id ON wwTable._id=wwTimeTable.mName WHERE Table._id=wwTimetabel.mForeign 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.os.Looper.loop(Looper.java:123) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-04 09:47:30.260: E/AndroidRuntime(273): at java.lang.reflect.Method.invokeNative(Native Method) 
01-04 09:47:30.260: E/AndroidRuntime(273): at java.lang.reflect.Method.invoke(Method.java:521) 
01-04 09:47:30.260: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-04 09:47:30.260: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-04 09:47:30.260: E/AndroidRuntime(273): at dalvik.system.NativeStart.main(Native Method) 
01-04 09:47:30.260: E/AndroidRuntime(273): Caused by: android.database.sqlite.SQLiteException: near "Table": syntax error: , while compiling: SELECT * FROM wwTable mLat INNER JOIN wwTimeTable _id ON wwTable._id=wwTimeTable.mName WHERE Table._id=wwTimetabel.mForeign 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315) 
01-04 09:47:30.260: E/AndroidRuntime(273): at www.freshapp.com.wherewhen.html.WWDatabase.fetchTime(WWDatabase.java:143) 
01-04 09:47:30.260: E/AndroidRuntime(273): at www.freshapp.com.wherewhen.html.TimeViewer.fillData(TimeViewer.java:57) 
01-04 09:47:30.260: E/AndroidRuntime(273): at www.freshapp.com.wherewhen.html.TimeViewer.onCreate(TimeViewer.java:41) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-04 09:47:30.260: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
01-04 09:47:30.260: E/AndroidRuntime(273): ... 11 more 

Я хотел бы любую помощь по этому вопросу. Я искал какое-то время.

+2

что это ошибка, которую вы получаете? можете ли вы добавить stacktrace? – elijah

+0

@elijah, я добавил добавленную стопку. – Christian

+1

и StevieG и dmon выявили проблемы с вашим запросом; ваш stacktrace жалуется на то, что один StevieG идентифицирован. – elijah

ответ

2

Ваш пункт, где ссылается на объект с именем Table которые вы не получили в ЕКОМ. Кроме того, существует не так много смысла в альясинга ваши таблицы, если вы не используете псевдонимы ..

Я предполагаю, что это должно быть:

private final String MY_QUERY = "SELECT * FROM wwTable INNER JOIN wwTimeTable ON wwTable._id=wwTimeTable.mName WHERE wwTable._id=wwTimetable.mForeign"; 
+0

Он прекратил давать мне ошибку, которую я получал. Благодарю. Тем не менее, я получаю ошибку 'невозможно запустить 'на' return ourdb.rawQuery (MY_QUERY, new String [] {String.valueOf (KEY_FOREIGN)}); ' – Christian

+0

Не знаете, почему вы пытаетесь передать параметр запросу который не имеет никаких определений. Попробуйте: 'return ourdb.rawQuery (MY_QUERY, null);' – StevieG

+0

Я попытался получить нулевое значение в ListActivity – Christian

1

Удалите mLat после wwTable в инструкции от оператора.

Правильный синтаксис: select * from table inner join other_table ...

Смежные вопросы