-
首先创建一个类来重写onCreate和onUpgrade @Override// 首次创建数据库的时候调用,一般用于新建数据库、数据表 public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("create table if not exists stutb(_id integer primary key autoincrement, name text not null, age integer not null, sex text not null)"); db.execSQL("insert into stutb(name,age,sex) values('张三',19,'男')"); } @Override// 当数据库的版本发生变化的时候,会自动执行 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } 然后在mainActivity中调用数据库并进行查询操作(如图)查看全部
-
getWritableDatabase()和getReadableDatabase()的相同点以及区别: 1. getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例,正常情况下获得的实例都可以对数据库进行读写操作。 2. getWritableDatabase取得的实例是以读写的方式打开数据库,如果打开的数据库磁盘满了,此时只能读不能写,此时调用了getWritableDatabase的实例,那么将会发生错误(异常)。 3. getReadableDatabase取得的实例是先调用getWritableDatabase以读写的方式打开数据库,如果数据库的磁盘满了,此时返回打开失败,继而用getReadableDatabase的实例以只读的方式去打开数据库。查看全部
-
使用原生的sql语句很容易写错(这也导致效率的降低),还好安卓有其他的方法可以写入数据,无需每次都去写sql语句,我们可以使用ContentValue,另外,不推荐使用前面学的 execSQL(sql)。 ContentValuse: --这个类是用来存储一组可以被ContentResolver处理的值。 * ContentValues values = new ContentValues(); //类似 hashMap key value。 * values.put("name","张三"); * 执行对应的Sql操作。查看全部
-
首先创建数据库和表(与上节课一样) SQLiteDatabase db = openOrCreateDatabase("stu.db", MODE_PRIVATE, null); db.execSQL("create table if not exis。。。) /增加:使用 ContentValues 向表格中添加数据 ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("sex", "男"); values.put("age",19); long rawId = db.insert("stutb", null, values);//表名,,将values包含的数据插入到表格中 values.clear();//清空values,方便下次操作,不然数据会叠加。 values.put("name", "张三封"); values.put("sex", "男"); values.put("age",29); db.insert("stutb", null, values); values.clear(); values.clear(); //删除 db.delete("stutb", "name like ?", new String[]{"%封%"});//表名,删除条件,条件的补充 //修改 values.put("sex", "女"); db.update("stutb", values, "_id > ?", new String[]{"3"});//将全部ID>3的人的性别改为女 //查看(表名,null意味着所有列都查找,条件与占位符,占位符具体,"groupBy","having","orderBy"排序) Cursor c = db.query("stutb", null, "_id > ?", new String[]{"0"}, null, null, "name"); if (c!=null) { String[] columns = c.getColumnNames(); while (c.moveToNext()) {查看全部
-
注意事项 1. 命名规范:数据库的名字最好有后缀".db",方便在第三方数据库工具上使用。 2. 主键必须以下划线开头,例如“_id”,原因在于适配器,例如像ListView的适配器只通过下划线去找主键。 3. 操作完之后,记得手动关闭游标Cursor和数据库。 ----------------------- --Cursor是Android查询数据后得的一个管理数据集合的类,正常情况下,如果查询得到的数据量较小时不会有内存的问题,而且虚拟机能够保证Cursor最终会被释放掉。 --然而,如果Cursor的数据量特别大,特别是如果里面有Blob信息的时候,应该保证Cursor占用的内存被及时地清理掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动地将Cursor关闭,因为在源码中我们发现,如果等到垃圾回收器来回收,也就是如果不手动关闭,系统就会报错,会给用户以错误提示。 ------------------------ 如图,游标接口 Cursor 的一些方法查看全部
-
通过execSQL进行数据操作(比较复杂,不建议使用) // 打开或创建(如果有就打开,没有就创建,没有“覆盖”的问题)一个数据库 SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);// 数据库名,权限,游标(不需要) //创建表(usertb),创建主键(_id),创建列(name,age,sex db.execSQL("create table if not exists usertb (_id integer primary key autoincrement, name text not null, age integer not null, sex text not null)";); db.execSQL("insert into usertb (name,age,sex) values('张三','男',20)";);//查询语句 Cursor cursor = db.rawQuery("select * from usertb",null); // 查询数据,以游标形式,第二个参数代表条件 if (cursor!=null){ //表示查询成功 while(cursor.moveToNext()){ Log.i("info","_id"+cursor.getInt(cursor.getColumnIndex("_id")));// 先获得列的编号,再通过编号获得对应的值。 Log.i("info","name="+cursor.getString(cursor.getColumnIndex("name"))); Log.i("info","sex="+cursor.getString(cursor.getColumnIndex("sex"))); Log.i("info","age="+cursor.getInt(cursor.getColumnIndex("age"))); } cursor.close(); // 释放资源 } db.close(); // 关闭数据,释放内存查看全部
-
SQlite常用语句查看全部
-
SQLite是用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。 SQLite:轻量级、性能不错,管理成本小。在管理、维护方面都非常出色,功能强大。 ——支持高达2TB大小的数据库 ——以单个文件的形式存在 ——以B-Tree的数据结构形式存储在磁盘 特点主要包括: 1.轻量级:一个动态库、单文件 2.独立性:没有依赖,无需安装 3.隔离性:全部在一个文件夹中 4.跨平台:支持众多操作系统 5.多语言接口:支持众多编程语言 6.安全性:事务(在下面细说) 关于事务处理的安全性问题: ---通过数据库的排它锁和共享锁来实现独立的事务处理 ---多个进程可以在同一时间内从同一个数据库读取数据,但只有一个可以写入数据(保证数据的一致性,但也牺牲了效率) 基本满足移动的、嵌入设备的开发。 -------------------- SQLite支持的数据类型: NULL、INTEGER、REAL、TEXT、BLOB。分别表示 空值、整型、浮点型、字符串型、二进制对象。 有意思的是,它既然支持多种编程语言,但有的语言是没有像REAl或者BLOB这样的数据类型,要怎么解决呢?那就是采用“弱引用”,也叫动态数据类型。 动态数据类型(弱引用): ---当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。 但最好不要使用不支持的类型。 ----------------------- 使用须知: ---由于资源占有少、性能良好和零管理成本,嵌入式数据库有了它的用武之地。例如Android、IOS。 ---没有可用于 SQLite 的网络服务器、只能通过网络共享,可能存在文件锁定(Windows)或者性能问题。 ---只提供数据库级的锁定。 ---没有用户账户的概念,而是根据文件系统确定所有数据库的权限。查看全部
-
在button中设置android:onClick="doClick" String name=pref.getString("username","" ); if (name==null) { checkBox1.setChecked(false); }else { checkBox1.setChecked(true); ed_name.setText(name); } } public void doclick(View v){ switch (v.getId()) {查看全部
-
通过getSharedPreferences获取SharedPreferences对象(文件名,权限) 数据在DDMS中的各自的包名下的文件里 通过定义Editor对象,编辑SharedPreference对象 editor.putString 存入所需的文件 putString 存入整数型数据 getString获得存入的字符数据 .commit(); 表示提交操作查看全部
-
Android的四种数据存储方式: 1. SharedPreferences 2. SQLite 3. Content Provider 4. File --------------------- SharedPreferences: 1. 是一种轻型的数据存储方法; 2. 本质是基于 XML 文件存储 key-value 键值对数据; 3. 通常用来存储一些简单的配置信息。一般是放置当前应用的属性值,信息量不多,所以用数据库的话不划算,还可能造成时间上的浪费。 只能实现非常简单的存放数据和读取数据。SharedPreferences只能识别简单的数据类型,比如String、int,对于复杂的类型,比如自定义的类型,可能就无法存储了(或者通过转码操作转变为字符串也倒是可以存储)。 SharedPreferences属于Android自带的轻量级的存储类,效率并不是很高。 ---------------------- 要点: 1. SharedPreferences对象本身只能获取数据而不支持存储和修改,存储和修改是通过 Editor 对象实现的; 2. 实现 SharedPreferences 存储的步骤: (1)获得 SharedPreferences 对象; (2)获得 SharedPreferences.Editor 对象; (3)通过 Editor 接口的 putXxx 方法保存 key-value对,其中的Xxx表示不同的数据类型; (4)通过 Editor 接口的 commit 方法保存 key-value对。查看全部
-
四种存储方式查看全部
-
vybuio查看全部
-
fsd查看全部
举报
0/150
提交
取消