[英]Android sqlite database null pointer exception
当我尝试将数据插入我的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;
}
}
在Android中,ID列应为_id
,而不是您设置的id
:
public static final String KEY_ROWID = "id";
可能值得一看。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.