2013-08-07 53 views
0

所以我對SQL很陌生。我試圖把一個XML文件,使其成爲一個數據庫,我可以搜索。我有一個語法錯誤,但看不到它/不夠熟悉,看不到它。 這裏是我的onCreate方法Android SQLiteException語法錯誤

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    settings = PreferenceManager.getDefaultSharedPreferences(this); 
    sPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    sContext = getApplicationContext(); 
    boolean boot = settings.getBoolean("launch", false); 
    if (boot == false) { 
     createData(); 
    } 
    dataSource = new StopsDataSource(this); 
    dbhelper = new StopsDBHelper(this,"stops",null,1); 
    mDatabase = dbhelper.getWritableDatabase(); 
    dataSource.open(); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     //Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show(); 
    }else{ 
     showGPSDisabledAlertToUser(); 
    } 
    //MyLocationListener = new MyLocationListener(); 



    notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
} 

的creatData()

private void createDate() { 
    PullParser parser = new PullParser(); 
    List<Stops> stops = parser.parseXML(this); 

    for (Stops stop: stops) { 
     dataSource.create(stop); 
    } 
} 

而且DBHelper

public class StopsDBHelper extends SQLiteOpenHelper { 

public static final String TABLE_STOPS = "stops"; 
public static final String COlUMN_ID = "stopID"; 
public static final String COLUMN_STOP_NAME = "stopName"; 
public static final String COLUMN_STOP_LAT = "stopLat"; 
public static final String COLUMN_STOP_LON = "stopLon"; 
public static final String TABLE_CREATE = "CREATE TABLE" + TABLE_STOPS + "(" + COlUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COlUMN_ID + " TEXT, " + COLUMN_STOP_LAT + " TEXT, " 
     + COLUMN_STOP_LON + " TEXT, " + COLUMN_STOP_NAME + " TEXT" + ")"; 
public StopsDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, name, factory, version); 
} 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    sqLiteDatabase.execSQL(TABLE_CREATE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) { 
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_STOPS); 
    onCreate(sqLiteDatabase); 
} 

}

我得到的錯誤是

08-06 19:21:06.041 5784-5784/ccalgary.transit.helper E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{ccalgary.transit.helper/ccalgary.transit.helper.MainActivity}: android.database.sqlite.SQLiteException: near "TABLEstops": syntax error (code 1): , while compiling: CREATE TABLEstops(stopID INTEGER PRIMARY KEY AUTOINCREMENT, stopID TEXT, stopLat TEXT, stopLon TEXT, stopName TEXT) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2356) 
     at android.app.ActivityThread.access$600(ActivityThread.java:150) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5195) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: android.database.sqlite.SQLiteException: near "TABLEstops": syntax error (code 1): , while compiling: CREATE TABLEstops(stopID INTEGER PRIMARY KEY AUTOINCREMENT, stopID TEXT, stopLat TEXT, stopLon TEXT, stopName TEXT) 
     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 
     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 
     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663) 
     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594) 
     at ccalgary.transit.helper.StopsDBHelper.onCreate(StopsDBHelper.java:25) 
     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 
     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
     at ccalgary.transit.helper.MainActivity.onCreate(MainActivity.java:75) 
     at android.app.Activity.performCreate(Activity.java:5104) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2260) 
     ... 11 more 

它與TABLE_CREATE有問題,我看不到任何明顯的錯誤。有什麼建議麼?提前致謝。

回答

1

是的,你在這裏有語法錯誤。改變這一行

public static final String TABLE_CREATE = "CREATE TABLE" + TABLE_STOPS + "(" + COlUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COlUMN_ID + " TEXT, " + COLUMN_STOP_LAT + " TEXT, " 
    + COLUMN_STOP_LON + " TEXT, " + COLUMN_STOP_NAME + " TEXT" + ")"; 

要這樣:

public static final String TABLE_CREATE = "CREATE TABLE " + TABLE_STOPS + "(" + COlUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COlUMN_ID + " TEXT, " + COLUMN_STOP_LAT + " TEXT, " 
    + COLUMN_STOP_LON + " TEXT, " + COLUMN_STOP_NAME + " TEXT" + ")"; 

你只是缺少表和表名之間的空間在您的查詢

+0

比我更好的答案 –

+0

是的,這工作謝謝你。我現在就去恥辱現在......我的頭在恥辱現在.... –

+0

是的,它曾經發生在我的始終在一開始,這就是你如何學習,你可以標記答案正確,如果它解決了你的問題 – Peshal

0

有表和站之間沒有空格。這很可能會解決它。你需要創建錶停止不CREATE TABLESTOP

相關問題