当我尝试在我的Android应用程序中将数据插入我的sqlite数据库时,我得到一个空指针异常。我查看了代码,一切似乎都井然有序,我很困惑为什么我得到空指针异常。代码如下:
import java.sql.Blob;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter {
public static final String KEY_ROWID = "id";
public static final String KEY_STUDENTNAME = "studentname";
public static final String KEY_DOB = "dob";
public static final String KEY_ADDRESS1 = "address1";
public static final String KEY_ADDRESS2 = "address2";
public static final String KEY_TOWN = "town";
public static final String KEY_POSTCODE = "postcode";
public static final String KEY_PHONE = "phone";
public static final String KEY_STUDENT_PIC = "studentpic";
private static final String TAG = "DBAdapter";
private static final String DATABASE_NAME = "studentDB3";
private static final String DATABASE_TABLE = "tblstudents";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE =
"create table tblstudents (id integer primary key autoincrement, "
+ "studentname text not null, dob text not null, "
+ "address1 text not null, address2 text not null, "
+ "town text not null, postcode text not null, "
+ " phone text not null, studentpic blob);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w(TAG, "Upgrading database from version " + oldVersion
+ " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS tblStudents");
onCreate(db);
}
}
//---opens the database---
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
//---closes the database---
public void close()
{
DBHelper.close();
}
//---insert a title into the database---
public long insertStudent(String studentname, String dob, String address1, String address2, String town, String postcode, String phone, byte[] studentpic)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_STUDENTNAME, studentname);
initialValues.put(KEY_DOB, dob);
initialValues.put(KEY_ADDRESS1, address1);
initialValues.put(KEY_ADDRESS2, address2);
initialValues.put(KEY_TOWN, town);
initialValues.put(KEY_POSTCODE, postcode);
initialValues.put(KEY_PHONE, phone);
initialValues.put(KEY_STUDENT_PIC, studentpic);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//---deletes a particular title---
public boolean deleteTitle(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID +
"=" + rowId, null) > 0;
}
//---retrieves all the titles---
public Cursor getAllStudents()
{
return db.query(DATABASE_TABLE, new String[] {
KEY_ROWID,
KEY_STUDENTNAME,
KEY_DOB,
KEY_ADDRESS1,
KEY_ADDRESS2,
KEY_TOWN,
KEY_POSTCODE,
KEY_PHONE,
KEY_STUDENT_PIC
},
null,
null,
null,
null,
null);
}
//---retrieves a particular title---
public Cursor getStudent(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID,
KEY_STUDENTNAME,
KEY_DOB,
KEY_ADDRESS1,
KEY_ADDRESS2,
KEY_TOWN,
KEY_POSTCODE,
KEY_PHONE,
KEY_STUDENT_PIC
},
KEY_ROWID + "=" + rowId,
null,
null,
null,
null,
null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
//---updates a student---
public boolean updateStudent(long rowId, String studentname,
String dob, String address1, String address2, String town,
String postcode, String phone, byte[] studentpic)
{
ContentValues args = new ContentValues();
args.put(KEY_STUDENTNAME, studentname);
args.put(KEY_DOB, dob);
args.put(KEY_ADDRESS1, address1);
args.put(KEY_ADDRESS2, address2);
args.put(KEY_TOWN, town);
args.put(KEY_POSTCODE, postcode);
args.put(KEY_PHONE, phone);
args.put(KEY_STUDENT_PIC, studentpic);
return db.update(DATABASE_TABLE, args,
KEY_ROWID + "=" + rowId, null) > 0;
}
}
答案 0 :(得分:1)
在Android中,ID列应该是_id
,而不是id
,因为您设置了:
public static final String KEY_ROWID = "id";
值得一看。