android SQLite操作
- 博客分类:
- Android点滴
在程序里面需要保存很多正常人脑袋都记不住的很多数据的时候,正常人都会想用到一个可以帮我们记忆数据的工具,毫无疑问数据库在此时显得尤为重要。android里面集成了sqlite数据库,很多桌面程序都是用的sqlite,比如firefox的数据库,主要因为体积小,这里说的小是跟微软的sql和orcal比较。
建库建表的过程:继承自SQLiteOpenHelper这个类,名字很形象,数据库的帮助类,意思就是这个类会帮你做一些事情,如果想自己动手最好的办法是去读源码。访问sqlite有很多种方法,这里只是其中一种。
做个最简单的例子:一个Activity一个DB。先贴源码再解释。
DB类
Activity类
运行该工程文件,就已经创建好了一张表,问题也就随之而来了,怎么知道表已经创建好了呢。先找到点成就感才有兴趣继续玩下去。
cmd之前先确定模拟器已经启动了,如果模拟器没启动 cmd--adb shell报个什么错忘记了。
打开cmd,敲如下命令行:adb shell ,如果回车以后看到的是什么内部外部命令的错误信息,则打开android-skd 目录,在platform-tools目录下面找个这么个东西,adb.exe的可运行文件,找到以后把文件路径地址复制到 环境变量PATH里面,这是本人的PATH值 仅供参考:C:\Program Files\Java\jdk1.6.0_26\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Windows7Master;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;D:\Android\android-sdk\platform-tools
传说adb.exe这个文件不在platform-tools就在platform里面,如果俩文件夹里面都没有,自己去重新下载android的SDK。
继续cmd,adb shell以后,敲的所有命令都是linux的,在这个项目里面,敲这样的:
cd data/data/opq.testdb/databases 回车 中间的opq.testdb是自己定义的包名。这个包名是有意思的,应该写当时创建Android工程项目的时候,都会自动建立一个Activity,cd data/data/(包名)/databases (包名)=自动建立的Activity所在的包名,因为所有的Android 的程序都是独立的,包括所有的数据也是独立的,不能互相访问,数据库文件必须依托程序而存在,一个sqlite数据库文件对应一个程序,体会一下区别:在java web里面 多个工程可以共用一个sql或者orcal的同一个表空间,在android里面搞同样的事情结果不怎么样只是会报错。
ls -l 回车
如果什么都没看到,那是不可能的,正常情况下,会有一个叫做,test.db的文件,这个就是在数据库操作类里面定义的DB_NAME值,继续敲命令:sqlite3 test.db 如果是命令是正确的,最开始的 # 会变成这样:sqlite> ,敲命令行: .tables tables前面还有个点啊。火车以后会看到至少一张表名:android_metadata 还有一张是自己创建的表名:TB_NAME所指定的值,从这里以后,接下来的操作都跟sql orcal mysql里面的操作一样了,增删改查的语句大同小异。
开始说SQLiteOpenHelper这个类会帮我们做一些事情,创建这个类以后,它会自动去判断我们指定的数据库文件存不存在,如果存在了则不会去调用onCreate方法,如果数据库文件不存在先建库再调用onCreate方法,在onCreate方法里面写的都是创建表的语句,还有一个 onUpgrade 方法,这个方法本人压根就没发现它被调用过,虽然同样是必须实现的父类方法。
每次打开数据库连接以后记得关闭连接,就是 open 和 close 必须成对的出现,最后 have fun
建库建表的过程:继承自SQLiteOpenHelper这个类,名字很形象,数据库的帮助类,意思就是这个类会帮你做一些事情,如果想自己动手最好的办法是去读源码。访问sqlite有很多种方法,这里只是其中一种。
做个最简单的例子:一个Activity一个DB。先贴源码再解释。
DB类
package opq.database; import java.util.ArrayList; import java.util.List; import opq.entity.StuEntity; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DbHelperAdapter { public static final String DB_NAME = "test.db";//数据库名 public static final String TB_NAME = "tbl_stuInfo";//表名 //字段名 public static final String STU_ID = "_id"; public static final String STUNAME = "stuName";//学生姓名 public static final String STUSEX="stuSex";//学生性别 public static final String STUAGE="stuAge";//学生年龄 Context context;//上下文对象 private TestHelper tHelper;//帮助类 private SQLiteDatabase db;//数据库对象 public DbHelperAdapter(Context context){ this.context=context; } /** * 打开数据库连接 * @return */ public DbHelperAdapter open(){ tHelper = new TestHelper(context); db = tHelper.getWritableDatabase(); return this; } /** * 关闭连接 */ public void close(){ tHelper.close(); } /** * 插入数据 * @param stu实体类 * @return */ public long create(StuEntity stu){ ContentValues cv = new ContentValues(); cv.put(STUNAME,stu.getStuName()); cv.put(STUSEX,stu.getStuSex()); cv.put(STUAGE,stu.getStuAge()); return db.insert(TB_NAME, null, cv); } /** * 删除 * @param stu */ public void delete(StuEntity stu){ db.delete(TB_NAME, STU_ID +"="+stu.getStuId() , null); } /** * 更新 整行数据 * @param stu */ public void update(StuEntity stu){ ContentValues cv = new ContentValues(); cv.put(STUNAME,stu.getStuName()); cv.put(STUSEX ,stu.getStuSex()); cv.put(STUAGE,stu.getStuAge()); db.update(TB_NAME, cv, STU_ID+"="+stu.getStuId(), null); /*最后一个为null 所以是更新整行数据,*/ } /** * 更新单个 * @param strTime */ public void updateTime(String strTime){ ContentValues cv = new ContentValues(); cv.put(STUNAME,"yyy"); db.update(TB_NAME, cv,STU_ID+"=?", new String[] { "0" }); } /** * 查询全部 * @return */ public List<StuEntity> getAll(){ String[] col = {STU_ID, STUNAME , STUSEX,STUAGE}; Cursor cursor = db.query(TB_NAME, col, null, null, null, null, null); List<StuEntity> list = new ArrayList<StuEntity>(); if (cursor.moveToFirst()) { do { StuEntity stu = new StuEntity(); stu.setStuId(Integer.valueOf(cursor.getString(0))); stu.setStuName(cursor.getString(1)); stu.setStuSex(cursor.getString(2)); stu.setStuAge(Integer.valueOf(cursor.getString(3))); list.add(stu); }while (cursor.moveToNext()); } return list; } /*数据库帮助类 内部类*/ public static class TestHelper extends SQLiteOpenHelper{ public TestHelper(Context context){ super(context, DB_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.d("TAG","sqliteHelper onCreate"); String CREATE_TABLE ="create table " +TB_NAME + "( " + STU_ID+ " integer primary key AUTOINCREMENT,"+ STUNAME+ " text not null,"+ STUSEX+" text not null," + STUAGE+" int not null "+ ")"; db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("drop table if exists "+TB_NAME); onCreate(db); Log.d("TAG","sqliteHelper onUpgrade"); } } }
Activity类
package opq.testdb; import opq.database.DbHelperAdapter; import opq.entity.StuEntity; import android.app.Activity; import android.os.Bundle; public class TestdbActivity extends Activity { DbHelperAdapter dbHelperAdapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dbHelperAdapter=new DbHelperAdapter(this); StuEntity stu=new StuEntity(); stu.setStuAge(10); stu.setStuName("asdf"); stu.setStuSex("xx"); dbHelperAdapter.open(); dbHelperAdapter.create(stu); dbHelperAdapter.close(); } }
运行该工程文件,就已经创建好了一张表,问题也就随之而来了,怎么知道表已经创建好了呢。先找到点成就感才有兴趣继续玩下去。
cmd之前先确定模拟器已经启动了,如果模拟器没启动 cmd--adb shell报个什么错忘记了。
打开cmd,敲如下命令行:adb shell ,如果回车以后看到的是什么内部外部命令的错误信息,则打开android-skd 目录,在platform-tools目录下面找个这么个东西,adb.exe的可运行文件,找到以后把文件路径地址复制到 环境变量PATH里面,这是本人的PATH值 仅供参考:C:\Program Files\Java\jdk1.6.0_26\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Windows7Master;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;D:\Android\android-sdk\platform-tools
传说adb.exe这个文件不在platform-tools就在platform里面,如果俩文件夹里面都没有,自己去重新下载android的SDK。
继续cmd,adb shell以后,敲的所有命令都是linux的,在这个项目里面,敲这样的:
cd data/data/opq.testdb/databases 回车 中间的opq.testdb是自己定义的包名。这个包名是有意思的,应该写当时创建Android工程项目的时候,都会自动建立一个Activity,cd data/data/(包名)/databases (包名)=自动建立的Activity所在的包名,因为所有的Android 的程序都是独立的,包括所有的数据也是独立的,不能互相访问,数据库文件必须依托程序而存在,一个sqlite数据库文件对应一个程序,体会一下区别:在java web里面 多个工程可以共用一个sql或者orcal的同一个表空间,在android里面搞同样的事情结果不怎么样只是会报错。
ls -l 回车
如果什么都没看到,那是不可能的,正常情况下,会有一个叫做,test.db的文件,这个就是在数据库操作类里面定义的DB_NAME值,继续敲命令:sqlite3 test.db 如果是命令是正确的,最开始的 # 会变成这样:sqlite> ,敲命令行: .tables tables前面还有个点啊。火车以后会看到至少一张表名:android_metadata 还有一张是自己创建的表名:TB_NAME所指定的值,从这里以后,接下来的操作都跟sql orcal mysql里面的操作一样了,增删改查的语句大同小异。
开始说SQLiteOpenHelper这个类会帮我们做一些事情,创建这个类以后,它会自动去判断我们指定的数据库文件存不存在,如果存在了则不会去调用onCreate方法,如果数据库文件不存在先建库再调用onCreate方法,在onCreate方法里面写的都是创建表的语句,还有一个 onUpgrade 方法,这个方法本人压根就没发现它被调用过,虽然同样是必须实现的父类方法。
每次打开数据库连接以后记得关闭连接,就是 open 和 close 必须成对的出现,最后 have fun
发表评论
-
android开机启动服务
2011-07-08 09:38 2939这是个很简单的过程,这个不像pc机得开机启动,要有精确的内存地 ... -
磨刀霍霍向猪羊Android第一次
2011-07-08 09:35 1192古人有云,工欲善其事必先利其器。开发Android程序,如果没 ... -
HelloWorldAndroid几个控件
2011-07-08 09:32 1039对于程序员来说学习任 ... -
Android手机手势示例
2011-07-08 09:31 1636android的手机主要以触摸 ... -
Activity生命周期和对话框
2011-07-08 09:29 1313在一个Android程序中至少得有一个Activity,And ... -
Android手机手势示例
2011-07-05 09:21 891android的手机主要以触摸屏为主,为了能够让用户体验到更多 ... -
android的Activity生命周期续集
2011-07-05 09:18 1075为手机做的游戏肯定会对来电监听,短信监听,当然,此时此刻监听来 ... -
android开机启动服务v1.0
2011-07-05 09:17 1076这是个很简单的过程,这个不像pc机得开机启动,要有精确的内存地 ...
相关推荐
android sqlite操作
android sqlite操作 demo
现用项目中Sqlite操作类, 1.数据库初始化 2.数据库版本升级 3.从表中查询数据,并返回ArrayList,简单操作不需要建类 4.单一行查询返回、int 返回、string查询返回
android sqlite操作源码,包括增删改查,环境要求4.0以上
mono for android sqlite操作示例源代码、 包括 sqliteconnection 获取 地址设置 commond 链接,操作 完成了 数据库文件创建,数据库表创建, 内容添加等 没做提示窗口, 请用 Android device logging 查找标签:...
操作SQLite数据库,android手机或平板上操作数据库
android Sqlite 基本操作 包含基本增删改插操作
关于Android SQLite的基本操作,留作以后使用
easydao是一个面向android的轻量级快速orm库,它将对象映射到sqlite,操作sqlite数据库变得更加容易。
android中 sqlite数据库操作中常用的SQL 语句,留下备用,防止出错
Android SQLite可视化操作工具,支持SQL数据导入,编辑,查看,SQL查询
开源的android sqlite数据操作工具类。
AndroidSQLite操作实例
这是一个简单的sqlite数据库操作,包含增删改查
写了个小demo对Sqlite数据的操作,欢迎下载!
android sqlite数据库操作,实现数据库的创建,查找,删除更新操作
android SQLite数据库操作源码,包括如何建表,增删改查等操作
Android SQLite 增删改查操作实例
android 用sqlite数据库进行创建表,插入、更新、删除数据.本实例是记录IP地址和端口号
android studio1.2 sqlite的操作 测试通过 转:http://www.jb51.net/article/36062.htm 这个例子的基础上修改