Android开发SQLite的数据在哪里怎么存储

darkbjgiven 2018-09-29 12:42:25
我用SQLite做数据库,在主活动里new DataBaseHelper()。
已经写了DataBaseHelper(继承自SQLiteOpenHelper),建了HomeIemData表。
实体类HomeItemData,操作类HomeDataOperator(写有添加、查询等函数)

现在我的问题是不知道在哪里调用添加函数进行数据存储。网上查的都是在测试类里。

有人给我说写一个类处理并组装参数(需要保存的数据)并调用保存函数,
在业务逻辑需要保存数据时调用此方法去存储。

但还是不知道具体是什么类,怎么组装啊,如果是本地的数据是怎么存储。

有没有实例的链接或者讲一下方法。谢谢了!


以下为相关代码,有问题也可以指出啊,谢谢了!

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();
...全文
1116 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大王来寻春 2018-10-08
  • 打赏
  • 举报
回复
有一个地方需要修改一下,不然插入不进去,表名修改一下,就是说表名不能和数据库名相同,不然插不进去

然后,一切OK

darkbjgiven 2018-10-04
  • 打赏
  • 举报
回复
引用 4 楼 han317426731 的回复:

HomeItemData data = new HomeItemData ();
data.setHometitle("1");
data.setHomecontent("2");
data.setHomedata("3");
new HomeDataOperator().Insert(data );

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)
darkbjgiven 2018-10-04
  • 打赏
  • 举报
回复
此外,我还试了一下,写一个HomeDataLibrary存储类,要存储的数据都写在该地方,调用操作类的存储函数 (我的存储函数在HomeDataOperator操作类里面)最后在主函数oncreate里调用存储类。也是出现了一样的log cat,空指针。 真的好着急啊,一直找不到问题啊,只是在不断的报空指针的错误!!!

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);
verejava 2018-10-01
  • 打赏
  • 举报
回复
Android 之 SQLite 数据库 通讯录应用程序 http://www.verejava.com/?id=17469714790332
darkbjgiven 2018-09-30
  • 打赏
  • 举报
回复
我是打算用sqlite做本地数据库,有没有具体一点的讲解,我对数据库存储这里的逻辑不太清楚,谢谢了。
大王来寻春 2018-09-30
  • 打赏
  • 举报
回复
任意找个位置,执行下面的就OK了,你这所有的逻辑都已经写好了,只剩下调用了

HomeItemData data = new HomeItemData ();
data.setHometitle("1");
data.setHomecontent("2");
data.setHomedata(3"");
new HomeDataOperator().Insert();
大王来寻春 2018-09-30
  • 打赏
  • 举报
回复

HomeItemData data = new HomeItemData ();
data.setHometitle("1");
data.setHomecontent("2");
data.setHomedata("3");
new HomeDataOperator().Insert(data );
雕·不懒惰 2018-09-29
  • 打赏
  • 举报
回复
搞不定可以去看下xutil3的数据库模块

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧