在Android平台上系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取。下面以我自己创建的收入信息表(InAccount)为例,来学习SQLite的使用。

主要是四个步骤:

1.创建数据库类,继承SQLiteOpenHelper。程序调用的包会自动导入。

public class DBOPenHelper extends SQLiteOpenHelper {
/** 数据库版本号 */
private static final int VERSION = 1;
/** 数据库名称 */
private static final String DBNAME="account.db"; /** 重写构造函数 */
public DBOPenHelper(Context context) {
super(context, DBNAME, null, VERSION);
// TODO Auto-generated constructor stub
} @Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
// 创建收入信息表(ID,金额,时间,类型,备注)
db.execSQL("create table InAccount(ID integer primary key,Money decimal,Time varchar(10),Type varchar(10),Marks varchar(200))"); } @Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub } }

2.建立数据库表,定义各个字段变量以及set和get方法。

set方法和get方法自动生成(建立各个字段变量后)

/**存入收入信息*/
public class TB_InAccount {
/**存储收入编号*/
private int ID;
/**存储收入金额*/
private double Money;
/**存储收入时间*/
private String Time;
/**存储收入类型*/
private String Type;
/**存储输入备注信息*/
private String Marks; /**默认构造函数*/
public TB_InAccount() {
// TODO Auto-generated constructor stub
super();
}
/**自定义有参构造函数*/
public TB_InAccount(int ID,double Money,String Time,String Type,String Marks){
super();
this.ID=ID;
this.Money=Money;
this.Time=Time;
this.Type=Type;
this.Marks=Marks;
}
//利用source生成下面的get和set方法(每一个变量两种方法)
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public double getMoney() {
return Money;
}
public void setMoney(double money) {
Money = money;
}
public String getTime() {
return Time;
}
public void setTime(String time) {
Time = time;
}
public String getType() {
return Type;
}
public void setType(String type) {
Type = type;
}
public String getMarks() {
return Marks;
}
public void setMarks(String marks) {
Marks = marks;
} }

3.创建数据库中对某一个表的操作的类。包括增、删、查、改。(这里可以只创建自己需要的方法,对应在activity中的功能)

/** 对InAccount表上的所有数据操作 */
public class InAccountDB {
/** 声明一个DBOPenHelper对象 */
private DBOPenHelper helper;
/** 声明一个SQLiteDatabase对象 */
private SQLiteDatabase db; /** 自定义有参数构造方法 */
public InAccountDB(Context context) {
// 初始化helper对象
helper = new DBOPenHelper(context);
} /** 添加收入信息 */
public void addInAccount(TB_InAccount tb_InAccount) {
// 初始化db对象
db = helper.getWritableDatabase();
// SQL语句执行添加操作
db.execSQL("insert into InAccount(ID,Money,Time,Type,Marks) values(?,?,?,?,?)",
new Object[] { tb_InAccount.getID(), tb_InAccount.getMoney(),
tb_InAccount.getTime(), tb_InAccount.getType(),
tb_InAccount.getMarks() });
} /** 更新收入信息 */
public void updateInAccount(TB_InAccount tb_InAccount) {
// 初始化db对象
db = helper.getWritableDatabase();
// SQL语句执行更新操作
db.execSQL(
"update InAccount set Money=?,Time=?,Type=?,Marks=? where ID=?",
new Object[] { tb_InAccount.getID(), tb_InAccount.getMoney(),
tb_InAccount.getTime(), tb_InAccount.getType(),
tb_InAccount.getMarks() });
} /** 查询收入信息 */
public TB_InAccount findInAccount(int ID) {
// 初始化db对象
db = helper.getWritableDatabase();
// 初始化光标对象
// 建议SQLite操作使用rawQuery方法
// 参考http://www.pin5i.com/showtopic-sqlite-rawquery.html
// 根据ID查询收入信息,存入Cursor类中
Cursor cursor = db.rawQuery(
"select ID,Money,Time,Type,Marks from InAccount where _id = ?",
new String[] { String.valueOf(ID) });
if (cursor.moveToNext())// 遍历查找到的收入信息
{
// 将遍历到的收入信息存储到tb_InAccount类中
return new TB_InAccount(cursor.getInt(cursor.getColumnIndex("ID")),
cursor.getDouble(cursor.getColumnIndex("Money")),
cursor.getString(cursor.getColumnIndex("Time")),
cursor.getString(cursor.getColumnIndex("Type")),
cursor.getString(cursor.getColumnIndex("Marks")));
}
return null;
} /** 删除收入信息 */
public void deleteInAccount(Integer[] IDs) {
if (IDs.length > 0) {
// 创建StringBuffer对象
StringBuffer sb = new StringBuffer();
// 遍历要删除的id集合
for (int i = 0; i < IDs.length; i++) { // 将删除条件添加到StringBuffer对象中
sb.append('?').append(',');
}
// 去掉最后一个“,“字符
sb.deleteCharAt(sb.length() - 1);
db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// 执行删除收入信息操作
db.execSQL("delete from InAccount where ID in (" + sb + ")",
(Object[]) IDs);
}
} /**
* 获取收入信息
*
* @param start起始位置
* @param count每页显示数量
*/
public List<TB_InAccount> getScrollData(int start, int count) {
// 创建集合对象
List<TB_InAccount> tb_InAccount = new ArrayList<TB_InAccount>();
// 初始化SQLiteDatabase对象
db = helper.getWritableDatabase();
// 获取所有收入信息
Cursor cursor = db.rawQuery("select * from InAccount limit ?,?",
new String[] { String.valueOf(start), String.valueOf(count) });
while (cursor.moveToNext())// 遍历所有的收入信息
{
// 将遍历到的收入信息添加到集合中
tb_InAccount.add(new TB_InAccount(cursor.getInt(cursor
.getColumnIndex("ID")), cursor.getDouble(cursor
.getColumnIndex("Money")), cursor.getString(cursor
.getColumnIndex("Time")), cursor.getString(cursor
.getColumnIndex("Type")), cursor.getString(cursor
.getColumnIndex("Marks"))));
}
// 返回收入信息表集合
return tb_InAccount;
} /** 获取收入信息表总记录数 */
public long getCount() {
// 初始化SQLiteDatabase对象
db = helper.getWritableDatabase();
// 获取收入信息的记录数
Cursor cursor = db.rawQuery("select count(ID) from InAccount", null);
// 判断Cursor中是否有数据
if (cursor.moveToNext()) { // 返回总记录数
return cursor.getLong(0);
}
// 如果没有数据,则返回0
return 0;
} /*** 获取收入信息表最大编号 */
public int getMaxId() {
// 初始化SQLiteDatabase对象
db = helper.getWritableDatabase();
// 获取收入信息表中的最大编号
Cursor cursor = db.rawQuery("select max(ID) from InAccount", null);
// 访问Cursor中的最后一条数据
while (cursor.moveToLast()) {
// 获取访问到的数据,即最大编号
return cursor.getInt(0);
}
// 如果没有数据,则返回0
return 0;
}
}

4.在addactivity类中添加对数据表的操作,因为我建立的表的字段中有时间,所以把时间对话框的也添加进去了;也涉及到ListView控件的使用

public class AddInaccount extends Activity {
// 创建日期对话框常量
protected static final int DATE_DIALOG_ID = 0;
// 创建4个EditText对象
EditText txtInMoney, txtInTime, txtMarks;
// 创建Spinner下拉列表
Spinner spInType;
// 保存按钮
Button SaveBtn;
// 取消按钮
Button CancelBtn;
// 年月日
private int mYear;
private int mMonth;
private int mDay; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addinaccount);
// 初始化变量
txtInMoney = (EditText) findViewById(R.id.txtInMoney);
txtInTime = (EditText) findViewById(R.id.txtInTime);
txtMarks = (EditText) findViewById(R.id.txtInMark);
spInType = (Spinner) findViewById(R.id.spInType);
SaveBtn = (Button) findViewById(R.id.btnInSave);
CancelBtn = (Button) findViewById(R.id.btnInCancel);
// 为时间文本框设置单击监听事件
txtInTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 显示日期选择对话框
showDialog(DATE_DIALOG_ID);
}
});
// 为保存按钮添加监听事件
CancelBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
// 设置金额文本框为空
txtInMoney.setText("");
// 为金额文本框设置提示
txtInMoney.setHint("0.00");
// 设置时间文本框为空
txtInTime.setText("");
// 为时间文本框设置提示
txtInTime.setHint("2014-11-23");
// 设置备注文本框为空
txtMarks.setText("");
// 设置类别下拉列表默认选择第一项(下拉框中的字符串信息存储在addinaccount.xml中)
spInType.setSelection(0);
}
});
// 为取消按钮添加监听事件
SaveBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String strInMoney = txtInMoney.getText().toString();// 获取金额文本框的值
if (!strInMoney.isEmpty()) {// 判断金额不为空
// 创建InAccountDB对象
InAccountDB inaccountDB = new InAccountDB(AddInaccount.this);
// 创建Tb_inaccount对象
TB_InAccount InAccount = new TB_InAccount(inaccountDB
.getMaxId() + 1, Double.parseDouble(strInMoney),
txtInTime.getText().toString(), spInType
.getSelectedItem().toString(), txtMarks
.getText().toString());
inaccountDB.addInAccount(InAccount);// 添加收入信息
// 弹出信息提示
Toast.makeText(AddInaccount.this, "〖新增收入〗数据添加成功!",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(AddInaccount.this, "请输入收入金额!",
Toast.LENGTH_SHORT).show();
} }
});
// 初始化Calendar日历对象
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);// 获取年份
mMonth = c.get(Calendar.MONTH);// 获取月份
mDay = c.get(Calendar.DAY_OF_MONTH);// 获取天数
// 显示当前系统时间
updateDisplay();
} @Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:// 弹出日期选择对话框
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
mDay);
}
return null;
} // 使用OnDateSetListener监听器设置系统时间对话框
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
mYear = year;// 为年份赋值
mMonth = monthOfYear;// 为月份赋值
mDay = dayOfMonth;// 为天赋值
updateDisplay();// 显示设置的日期
} };
/** 自定义方法显示系统时间 */
private void updateDisplay() {
// 显示设置的时间
txtInTime.setText(new StringBuilder().append(mYear).append("-")
.append(mMonth + 1).append("-").append(mDay));
} }

另外,自己在addinaccount.xml文件中部署控件。我这个activity对应的xml文件中,(对应建立的数据表),有四个TextView控件,一个ListView控件等等。

这个不是主程序activity,所以在自己的AndroidManifest.xml也需要配置activity。当然最开始学的时候,可以直接在MainActivity中实例操作数据库。

安卓开发中SQLite的使用(附实例)的更多相关文章

  1. 在安卓开发中使用SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

  2. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  3. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  4. 安卓开发中使用Genymotion模拟器

    在安卓开发中,运行和调试自己所写的安卓程序需要用到模拟器 在一般情况下 是直接在这创建一个模拟器,但是这种自带的模拟器运行效率不佳,而且启动时间漫长 所以,我们可以换一款安卓模拟器 Genymotio ...

  5. 【Android】安卓开发中的布局与事件

    [Android]安卓开发中的布局与事件 1.Android Studio下载配置 非常简单的百度然后点击下载安装就好了.注意的是,本来我是打算使用评价还不错的Genymotion这个软件来充当虚拟机 ...

  6. Android 开发中 SQLite 数据库的使用

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, ...

  7. 非常不错的android应用开发详解在安卓开发中

    我们在苹果开发中,总会看到XCode,Interface Builder,Object-c这如此入耳入随的单词,但往往多数人在认为XCODE看着简单,InterfaceBuilder好似操作, 而Ob ...

  8. 安卓开发中Spinner控件的使用

    在安卓手机应用开发中,Spinner对象常用方法有以下五种. 用法 1 :以资源方式,静态展示 Spinner 选项 用法 2 :以代码方式,动态展示 Spinner 选项 用法 3 :同时显示图片和 ...

  9. 安卓开发中strings.xml的使用

    为了使用方便也是为了代码规范化,我们都将文字信息放在res-values-strings.xml中, 因为开发中需要用到将文字的换行,百度了一下,可以将文字段信息直接在strings.xml文件中换行 ...

随机推荐

  1. H3CNE实验:通过Console端口本地访问H3C设备

    连接好Console线后,将交换机开机,在SecureCRT上会显示如下信息: Starting...... RAMLine.....OK System is booting............. ...

  2. Java面试常考------------------------垃圾收集算法

    对于Java系学生而言,Java虚拟机中的垃圾收集算法是一个很重要的面试考点. 常用的垃圾收集算法主要可划分为以下三类: 1. 标记-清除算法 标记清除算法是一种比较简单的方法,直接标记内存中待回收的 ...

  3. maven工程中pom.xml的错误

    更新maven工程,出现如下错误信息. Could not calculate build plan: Failure to transfer org.apache.maven.plugins:mav ...

  4. Windows Redis默认配置文件,Redis配置不生效解决方案

    Windows Redis默认配置文件,Redis配置不生效解决方案, Windows Redis自启动配置不生效解决方案,Windows Redis增加自动启动服务 >>>> ...

  5. 如何开始使用bootstrap

    登陆Bootstrap官网:http://getbootstrap.com/ Bootstrap中的JS插件依赖于jQuery,因此jQuery要在Bootstrap之前引用 bootstrap框架初 ...

  6. java文件上传Demo

    说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype=" ...

  7. 安装harbor私有镜像仓库

    有朋友安装harbor的过程中遇到很多问题,为此写一篇最简单安装harbor的文档,希望能帮助所有刚开始接触harbor的新手.harbor的架构不做探究. 实验验环境:os --> cento ...

  8. python函数(2):函数进阶

    昨天说了函数的一些最基本的定义,今天我们继续研究函数.今天主要研究的是函数的命名空间.作用域.函数名的本质.闭包等等 预习: 1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的 ...

  9. hibernate 使用枚举字段的最佳实践

    枚举类虽然很简单,但是却往往是系统中业务逻辑最集中最复杂的地方.本文将会分享我们项目中基于hibernate的枚举类使用规范,包含数据库中枚举列数据类型.注释.枚举列与枚举类的映射等. 一.枚举类定义 ...

  10. Spring源码情操陶冶-AbstractApplicationContext#finishRefresh

    承接前文Spring源码情操陶冶-AbstractApplicationContext#finishBeanFactoryInitialization 约定web.xml配置的contextClass ...