sqlite数据库学习
1.0版代码:
package com.swust.sqlitedatabase.test; import com.swust.sqlitedatabase.myOpenHelper; import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase; public class TestCase extends AndroidTestCase {
public void test(){
//第一个参数:this->现在应用没启动,没有,真正的时候用this。所以获取虚拟上下文getContext()
//第二个参数:数据库文件
//第四个参数:版本号
//recNO字段是系统的,无视
myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
//如果数据库不存在,先创建数据库,再获取可读可写数据库对象,如果数据存在,就直接打开
SQLiteDatabase db=moh.getWritableDatabase();
//创建对象也可读可写,如果存储空间满了,那么返回只读数据库对象
//SQLiteDatabase db=moh.getReadableDatabase();
}
public void insert(){
myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
SQLiteDatabase db=moh.getWritableDatabase();
//数据库char ,double等都是字符串,因为这个轻量级数据不检测数据
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
db.close();
}
}
插入后:

删除:
public void delete(){
myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
SQLiteDatabase db=moh.getWritableDatabase();
db.execSQL("delete from person where name =?",new Object[]{"王**"});
}
之后,字段名字为“王**”的被删除
效果:

-------------------------------------
代码未优化:
package com.swust.sqlitedatabase.test; import com.swust.sqlitedatabase.myOpenHelper; import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase; public class TestCase extends AndroidTestCase {
public void test(){
//第一个参数:this->现在应用没启动,没有,真正的时候用this。所以获取虚拟上下文getContext()
//第二个参数:数据库文件
//第四个参数:版本号
//recNO字段是系统的,无视
myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
//如果数据库不存在,先创建数据库,再获取可读可写数据库对象,如果数据存在,就直接打开
SQLiteDatabase db=moh.getWritableDatabase();
//创建对象也可读可写,如果存储空间满了,那么返回只读数据库对象
//SQLiteDatabase db=moh.getReadableDatabase();
}
public void insert(){
myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
SQLiteDatabase db=moh.getWritableDatabase();
//数据库char ,double等都是字符串,因为这个轻量级数据不检测数据
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王树青大学",25.34,"12.345"});
db.close();
}
public void delete(){
myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
SQLiteDatabase db=moh.getWritableDatabase();
db.execSQL("delete from person where name =?",new Object[]{"王**"});
}
}
优化后:
package com.itheima.sqlitedatabase.test; import com.itheima.sqlitedatabase.MyOpenHelper; import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase; public class TestCase extends AndroidTestCase { //此时测试框架还没有初始化完毕,没有虚拟上下文对象
// private MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
private MyOpenHelper oh;
private SQLiteDatabase db;
public void test(){
//getContext():获取一个虚拟的上下文
MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
//如果数据库不存在,先创建数据库,再获取可读可写的数据库对象,如果数据库存在,就直接打开
SQLiteDatabase db = oh.getWritableDatabase();
//如果存储空间满了,那么返回只读数据库对象
// SQLiteDatabase db = oh.getReadableDatabase();
} //测试框架初始化完毕之后,在测试方法执行之前,此方法调用
@Override
protected void setUp() throws Exception {
super.setUp(); oh = new MyOpenHelper(getContext(), "people.db", null, 1);
db = oh.getWritableDatabase();
} //测试方法执行完毕之后,此方法调用
@Override
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
db.close();
} public void insert(){ // db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的老婆[1]", "13000", 138438});
// db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的儿子", 14000, "13888"});
db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"});
} public void delete(){
db.execSQL("delete from person where name = ?", new Object[]{"小志"});
} public void update(){
db.execSQL("update person set phone = ? where name = ?", new Object[]{186666, "小志的儿子"});
} public void select(){
Cursor cursor = db.rawQuery("select name, salary from person", null); while(cursor.moveToNext()){
//通过列索引获取列的值
String name = cursor.getString(cursor.getColumnIndex("name"));
String salary = cursor.getString(1);
System.out.println(name + ";" + salary);
}
} public void insertApi(){
//把要插入的数据全部封装至ContentValues对象
ContentValues values = new ContentValues();
values.put("name", "游天龙");
values.put("phone", "15999");
values.put("salary", 16000);
db.insert("person", null, values);
} public void deleteApi(){
int i = db.delete("person", "name = ? and _id = ?", new String[]{"小志的儿子", "3"});
System.out.println(i);
} public void updateApi(){
ContentValues values = new ContentValues();
values.put("salary", 26000);
int i = db.update("person", values, "name = ?", new String[]{"游天龙"});
System.out.println(i);
} public void selectApi(){
Cursor cursor = db.query("person", null, null, null, null, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
System.out.println(name + ";" + phone + ";" + salary);
}
} public void transaction(){
try{
//开启事务
db.beginTransaction();
ContentValues values = new ContentValues();
values.put("salary", 12000);
db.update("person", values, "name = ?", new String[]{"小志"}); values.clear();
values.put("salary", 16000);
db.update("person", values, "name = ?", new String[]{"小志的儿子"}); int i = 3/0;
//设置 事务执行成功
db.setTransactionSuccessful();
}
finally{
//关闭事务,同时提交,如果已经设置事务执行成功,那么sql语句就生效了,反之,sql语句回滚
db.endTransaction();
}
}
}
sqlite数据库学习的更多相关文章
- 21.Android之SQLite数据库学习
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...
- Android SQLite 数据库学习
SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...
- SQLite数据库学习小结——Frameworks层实现
3. SQLite的Frameworks层实现 3.1 Frameworks层架构 Android系统方便应用使用,在Frameworks层中封装了一套Content框架,之所以叫Content框架而 ...
- SQLite数据库学习小结——native层实现
1. SQlite概述 SQLite是一款轻量.快速.跨平台的嵌入式数据库,是遵守ACID(注:ACID指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consi ...
- Android数据存储之SQLite 数据库学习
Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据, ...
- android简单登陆和注册功能实现+SQLite数据库学习
最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用 ...
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- Android 学习笔记之如何使用SQLite数据库来保存数据...
PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite: ...
- Android学习笔记--Sqlite数据库
前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...
随机推荐
- 【转】C/CPP之static
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...
- CSS十问
CSS十问——好奇心+刨根问底=CSSer 最近有时间,想把酝酿的几篇博客都写出来,今天前端小学生带着10个问题,跟大家分享一下学习CSS的一些体会,我觉得想学好CSS,必须保持一颗好奇心和刨根问 ...
- js实现从字符串中查找出现次数最多的字符的两种解决办法
方法一:正则表达式匹配 var str = "adadfdfseffserfefsefseeffffftsdg"; ; var result = ""; whi ...
- 代码中动态改变布局属性RelativeLayout.LayoutParams.addRule()
我们知道,在 RelativeLayout 布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可. 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的 ...
- discuz开发学习
2014年3月24日 10:36:10 遇到一个问题,discuz 缓存的样式,没有自动生成.后来去后台 进行操作才有效. 解决了之前的遇到的 首页没有套用样式的问题. 现在的问题是 模版的扩展图片 ...
- github 创建新项目
二.GitHub简介 GitHub 可以托管各种Git版本库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进 ...
- Myeclipse SVN 修改用户名和密码
转自:http://blog.csdn.net/chow__zh/article/details/7731497 解决方案: 在Eclipse使用SVN的过程中大多数人往往习惯把访问SVN的用户名密码 ...
- Robocopy 轉帖
实例一:文件,想怎么复制就怎么复制 [实现效果] 随时将源文件夹中的纯文本(TXT).Word文档(DOC)还有BMP.TIF图像文件复制到目标文件夹中 ,这是在"资源管理器"中直 ...
- 后端数据库使用 Bomb方案
不再需要阿里云进行部署: http://docs.bmob.cn/ios/faststart/index.html?menukey=fast_start&key=start_ios
- ie6和ie7下z-index bug的解决办法
一.匆匆带过的概念 关于CSS中层级z-index的定义啊什么的不是本文的重点,不会花费过多篇幅详细讲述.这里就简单带过,z-index伴随着层的概念产生的.网页 中,层的概念与photoshop或是 ...