我试图将值加载到android上的SQLite表中。我的应用程序一直在破坏,但除了NullPointerException之外它没有给我一个特定的错误,因为它认为表没有被正确创建。
public class MySQLiteHelper{
private static final String DATABASE_NAME = "breadcrumbs.db";
private static final int DATABASE_VERSION = 1;
public static final String TABLE_BREADCRUMBS = "breadcrumbs";
private static Context context;
static SQLiteDatabase db;
private static SQLiteStatement insertStmt;
private static final String INSERT ="insert into " + TABLE_BREADCRUMBS + " (time,lat,lon) values (?,?,?)";
public MySQLiteHelper(Context context) {
MySQLiteHelper.context = context;
OpenHelper openHelper = new OpenHelper(MySQLiteHelper.context);
MySQLiteHelper.db = openHelper.getWritableDatabase();
MySQLiteHelper.insertStmt = MySQLiteHelper.db.compileStatement(INSERT);
}
public static long insert(long time,int lat,int lon) {
insertStmt.bindLong(1, time);
insertStmt.bindLong(2, lat);
insertStmt.bindLong(3, lon);
return insertStmt.executeInsert();
}
public void deleteAll() {
db.delete(TABLE_BREADCRUMBS, null, null);
}
public List<String[]> selectAll()
{
List<String[]> list = new ArrayList<String[]>();
Cursor cursor = db.query(TABLE_BREADCRUMBS, new String[]
{ "id","time","lat","lon"}, null, null, null, null, null);
int x=0;
if (cursor.moveToFirst()) {
do {
String[] b1=new String[]{cursor.getString(0),cursor.getString(1),cursor.getString(2),
cursor.getString(3)};
list.add(b1);
x=x+1;
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
cursor.close();
return list;
}
public void delete(int rowId) {
db.delete(TABLE_BREADCRUMBS, null, null);
}
private static class OpenHelper extends SQLiteOpenHelper {
OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_BREADCRUMBS + " (id INTEGER PRIMARY KEY, tim REAL, lat REAL, long REAL);");
//db.execSQL("CREATE TABLE " + TABLE_BREADCRUMBS + " (id INTEGER PRIMARY KEY AUTOINCREMENT, time REAL, lat REAL, long REAL);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS " + TABLE_BREADCRUMBS);
onCreate(db);
}
}
我正在使用以下方法在另一个类中调用该方法:
@Override
public void onLocationChanged(Location location) {
int lat = (int) (location.getLatitude() * 1E6);
int lng = (int) (location.getLongitude() * 1E6);
long time = (int)(location.getTime() * 1E6);
GeoPoint point = new GeoPoint(lat, lng);
createMarker();
MySQLiteHelper.insert(time,lat,lng);
mapController.animateTo(point); // mapController.setCenter(point);
}
}
也许我需要以某种方式调用OpenHelper?
答案 0 :(得分:5)
扩展 SQLiteOpenHelper
&amp;覆盖两种方法 onCreate()
和 onUpgrade()
答案 1 :(得分:3)
我相信你需要让你的课程延长SQLiteOpenHelper
。
答案 2 :(得分:3)
通过更改insert语句以匹配列名“tim”而不是“time”来修复。