58,452
社区成员




public class DataBaseHelper extends SQLiteOpenHelper {
//DataBaseHelper继承自SQLiteOpenHelper。
private Context mContext;
/*
DataBaseHelper中:
(Context 对数据库进行操作,
数据库名字 创建数据库时使用这个名称,
一般null 在查询数据时返回一个自定义的Cursor,
当前数据库版本号,用于对数据库进行升级操作)
*/
public DataBaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){
super(context,name,factory,version);
mContext=context;
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE HomeIemData (" +
"home_ID integer primary key autoincrement," +
"hometitle text unique," +
"homecontent text unique," +
"homedata text unique);");
//db.execSQL(CREATE_HOMEITEMDATA);//建表,而非数据库。
Toast.makeText(mContext,"Create HomeItemData succeeded",Toast.LENGTH_SHORT).show();
Log.d("TAG", "***********************已经创建好HomeItemData表********************** ");
System.out.println("***********************已经创建好HomeItemData表********************** ");
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
switch (oldVersion){
case 1:
db.execSQL("drop table if exists HomeItemData ");
onCreate(db);
default:
}
}
}
public class HomeItemData {
//HomeItemData 实体类
public static final String TABLE="HomeItemData";
private int home_ID;
private String hometitle;
private String homecontent;
private String homedata;
public int getHome_ID() {
return home_ID;
}
public void setHome_ID(int home_ID) {
this.home_ID = home_ID;
}
public String getHometitle() {
return hometitle;
}
public void setHometitle(String hometitle) {
this.hometitle = hometitle;
}
public String getHomecontent() {
return homecontent;
}
public void setHomecontent(String homecontent) {
this.homecontent = homecontent;
}
public String getHomedata() {
return homedata;
}
public void setHomedata(String homedata) {
this.homedata = homedata;
}
}
public class HomeDataOperator {
// HomeDataOperator 操作类。
private DataBaseHelper dbHelper;
//private SQLiteDatabase db;
public HomeDataOperator(Context context){
dbHelper =new DataBaseHelper(context,"HomeItemData.db",null,1);
}
public void Insert(HomeItemData homeItemData){
SQLiteDatabase db=dbHelper.getWritableDatabase();
//准备数据。
ContentValues values=new ContentValues();
values.put("hometitle",homeItemData.getHometitle());
values.put("homecontent",homeItemData.getHomecontent());
values.put("homedata",homeItemData.getHomedata());
//通过ContentValues中的数据拼接SQL语句,执行插入操作,id为表中的一个列名。
db.insert("HomeItemData","home_ID",values);
db.close();
}
public void delete(int home_ID){
SQLiteDatabase db=dbHelper.getWritableDatabase();
//执行删除操作,在person表中删除id为指定值的记录。
db.delete("HomeItemData","home_ID=?",new String[]{String.valueOf(home_ID)});
db.close();
}
public void update(HomeItemData homeItemData){
SQLiteDatabase db=dbHelper.getWritableDatabase();
//要更新的数据。
ContentValues values=new ContentValues();
values.put("hometitle",homeItemData.getHometitle());
values.put("Homecontent",homeItemData.getHomecontent());
values.put("Homedata",homeItemData.getHomedata());
//更新person表中id为指定值的记录。
db.update("HomeItemData",values,"Home_ID=?",new String[]{String.valueOf(homeItemData.getHome_ID())});
db.close();
}
public HomeItemData query(int Home_ID){
SQLiteDatabase db=dbHelper.getWritableDatabase();
//用游标Cursor接收从数据库检索到的数据。
Cursor cursor=db.query(false,"HomeItemData",new String[]{"hometitle","Homecontent","Homedata"},
"Home_ID=?",
new String[]{String.valueOf(Home_ID)},null,null,null,null);
//判断游标是否为空。
HomeItemData homeItemData=null;
//判断Cursor是否有下一条记录。
//依次取出数据。
if (cursor.moveToFirst()){
homeItemData =new HomeItemData();
homeItemData.setHome_ID(cursor.getInt(cursor.getColumnIndex("home_ID")));
homeItemData.setHometitle(cursor.getString(cursor.getColumnIndex("hometitle")));
homeItemData.setHomecontent(cursor.getString(cursor.getColumnIndex("homecontent")));
homeItemData.setHomedata(cursor.getString(cursor.getColumnIndex("homedata")));
}
//释放资源。
cursor.close();
db.close();
return homeItemData;
}
public List<HomeItemData> findAll(){
//查询所有记录。
List<HomeItemData> lists=new ArrayList<HomeItemData>();
HomeItemData homeItemData=null;
SQLiteDatabase db=dbHelper.getWritableDatabase();
//rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值。
Cursor cursor=db.rawQuery("select * from HomeItemData",null);
while (cursor.moveToNext()){
homeItemData=new HomeItemData();
homeItemData.setHome_ID(cursor.getInt(cursor.getColumnIndex("home_ID")));
homeItemData.setHometitle(cursor.getString(cursor.getColumnIndex("hometitle")));
homeItemData.setHomecontent(cursor.getString(cursor.getColumnIndex("homecontent")));
homeItemData.setHomedata(cursor.getString(cursor.getColumnIndex("homedata")));
lists.add(homeItemData);
}
db.close();
return lists;
}
}
//主活动oncreate里:
dataBaseHelper =new DataBaseHelper(this,"HomeData.db",null,1);
db=dataBaseHelper.getWritableDatabase();
HomeItemData homeItemData=new HomeItemData();
homeItemData.setHomedata("111");
homeItemData.setHomecontent("2222");
homeItemData.setHometitle("33333");
new HomeDataOperator(context).Insert(homeItemData);
我按照这个写主函数的oncreate里,出现了on a null object reference空指针。感觉没道理啊。。。
logcat:
E/AndroidRuntime: FATAL EXCEPTION: main
FATAL EXCEPTION: main
Process: com.example.lenovo.given, PID: 28349
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lenovo.given/com.example.lenovo.given.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2793)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6577)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:235)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:175)
at com.example.lenovo.given.SQLite.HomeDataOperator.Insert(HomeDataOperator.java:30)
at com.example.lenovo.given.MainActivity.initView(MainActivity.java:155)
at com.example.lenovo.given.MainActivity.onCreate(MainActivity.java:94)
public class HomeDataLibrary {
private DataBaseHelper dbHelper;
private SQLiteDatabase db;
private Context context;
public HomeDataLibrary(){
super();
}
public void add(HomeItemData homeItemData){
db=dbHelper.getWritableDatabase();
HomeDataOperator homeDataOperator=new HomeDataOperator(context);
ContentValues values=new ContentValues();
values.put("hometitle","最全的国创资料都在");
values.put("homecontent","留学申请,都需要做哪些准备");
values.put("homedata","科协发布");
homeDataOperator.Insert(homeItemData);
values.clear();
values.put("hometitle","最2全的国创资料都在");
values.put("homecontent","留2学申请,都需要做哪些准备");
values.put("homedata","科2协发布");
homeDataOperator.Insert(homeItemData);
values.clear();
values.put("hometitle","最3全的国创资料都在");
values.put("homecontent","留3学申请,都需要做哪些准备");
values.put("homedata","科2协发布");
homeDataOperator.Insert(homeItemData);
values.clear();
}
}
主函数oncreate里面:
HomeItemData homeItemData=new HomeItemData();
HomeDataLibrary homeDataLibrary=new HomeDataLibrary();
homeDataLibrary.add(homeItemData);
HomeItemData data = new HomeItemData ();
data.setHometitle("1");
data.setHomecontent("2");
data.setHomedata(3"");
new HomeDataOperator().Insert();
HomeItemData data = new HomeItemData ();
data.setHometitle("1");
data.setHomecontent("2");
data.setHomedata("3");
new HomeDataOperator().Insert(data );