SQLite数据库打开后,Android应用程序崩溃

时间:2013-02-22 06:50:52

标签: android sqlite

我正在尝试创建一个应用程序,它可以获取您当前的地理位置并将其存储到SQLite数据库中。然后,我希望能够检索该位置进行查看。我有代码来获取位置,但在我创建数据库后,应用程序崩溃了。

这是我的主要活动代码

public class WhereAmI extends Activity {

SQLiteOpenHelper dbhelper;
SQLiteDatabase database;

double lat;
double lng;



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locationManager.getBestProvider(criteria, true);

  Location location = locationManager.getLastKnownLocation(provider);
updateWithNewLocation(location);

locationManager.requestLocationUpdates(provider, 2000, 10,
                                       locationListener);

//Open Database
dbhelper = new dbHelper(this);
database = dbhelper.getWritableDatabase();

//ContentValues cv = new ContentValues();
//cv.put(dbHelper.COULMN_LON, lng);
//cv.put(dbHelper.COLUMN_LAT, lat);
//database.insert(dbHelper.TABLE_LOCATION, null, cv);
}

private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
  updateWithNewLocation(location);
}

public void onProviderDisabled(String provider){
  updateWithNewLocation(null);
}

public void onProviderEnabled(String provider){ }
public void onStatusChanged(String provider, int status, 
                            Bundle extras){ }
};

private void updateWithNewLocation(Location location) {
String latLongString;
TextView myLocationText; 
myLocationText = (TextView)findViewById(R.id.myLocationText);
if (location != null) {
  lat = location.getLatitude();
  lng = location.getLongitude();
  latLongString = "Lat:" + lat + "\nLong:" + lng;
} else {
  latLongString = "No location found"; 
}
myLocationText.setText("Your Current Position is:\n" + 
                       latLongString);

}

}


Here is my Database Class

package com.paad.whereami;

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


public class dbHelper extends SQLiteOpenHelper {


public static final String DATABASE_NAME = "geo.db";
public static final int DATABASE_VERSION = 1;

public static final String TABLE_LOCATION = "tablename";
public static final String COLUMN_ID = "locationId";
public static final String COULMN_LON = "longitude";
public static final String COLUMN_LAT = "latitude";

private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_LOCATION + 
        " (" + COLUMN_ID + " INTEGER RIMARY KEY AUTOINVREMENT, " 
        + COULMN_LON + " DOUBLE, " + COLUMN_LAT + " DOUBLE, " + ")";


//Context context;


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

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(TABLE_LOCATION);




}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOCATION);
    onCreate(db);

}

}

以下是我遇到的Android运行时错误。

02-22 06:46:57.543: E/AndroidRuntime(1526): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paad.whereami/com.paad.whereami.WhereAmI}: android.database.sqlite.SQLiteException: near "tablename": syntax error (code 1): , while compiling: tablename
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.os.Looper.loop(Looper.java:137)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-22 06:46:57.543: E/AndroidRuntime(1526): Caused by: android.database.sqlite.SQLiteException: near "tablename": syntax error (code 1): , while compiling: tablename
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.Activity.performCreate(Activity.java:5104)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-22 06:46:57.543: E/AndroidRuntime(1526):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)

2 个答案:

答案 0 :(得分:2)

在onCreate方法中,这是一个简单的错误,你使用了错误的常量。

将onCreate方法更改为

public void onCreate(SQLiteDatabase db) {
    db.execSQL(TABLE_CREATE);
}

答案 1 :(得分:1)

PRIMARY KEY和AUTOINCREMENT中的拼写错误

在最后一次DOUBLE

之后还有一个额外的“,”

更改为...

private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_LOCATION + 
        " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
        + COULMN_LON + " DOUBLE, " + COLUMN_LAT + " DOUBLE );";