第十五讲:SQLite入门指南

第十五讲:SQLite入门指南,第1张

概述本讲内容:在Android中使用SQLite数据库的入门指南,打算分下面几部分与大家一起分享: 1、什么是SQLite 2、Android中使用SQLite 一、什么是SQLite SQLite是一款开源的、轻量级的、嵌入式的、关系型数据库。它在2000年由D. Richard Hipp发布,可以支援Java、Net、PHP、Ruby、Python、Perl、C等几乎所有的现代编程语言,支持Win 本讲内容:在AndroID中使用sqlite数据库的入门指南,打算分下面几部分与大家一起分享:
1、什么是sqlite
2、AndroID中使用sqlite

一、什么是sqlite sqlite是一款开源的、轻量级的、嵌入式的、关系型数据库。它在2000年由D. Richard Hipp发布,可以支援Java、Net、PHP、Ruby、Python、Perl、C等几乎所有的现代编程语言,支持windows、linux、Unix、Mac OS、AndroID、IOS等几乎所有的主流 *** 作系统平台。 sqlite被广泛应用的在苹果、Adobe、Google的各项产品。如果非要举一个你身边应用sqlite的例子的话,如果你的机器中装的有迅雷,请打开迅雷安装目录,搜索一下sqlite3.dll,是不是找到了它的身影? 如果你装的有金山词霸,那么打开他的安装目录也会看到sqlite.dll的存在。是的,sqlite早就广泛的应用在我们接触的各种产品中了,当然我们今天学习它,是因为在Android开发中,AndroID推荐的数据库,也是内置了完整支持的数据库就是sqlite。 sqlite的特性:
1. ACID事务
2. 零配置 – 无需安装和管理配置
3. 储存在单一磁盘文件中的一个完整的数据库
4. 数据库文件可以在不同字节顺序的机器间自由的共享
5. 支持数据库大小至2TB
6. 足够小,大致3万行C代码,250K
7. 比一些流行的数据库在大部分普通数据库 *** 作要快
8. 简单,轻松的API
9. 包含TCL绑定,同时通过Wrapper支持其他语言的绑定
10. 良好注释的源代码,并且有着90%以上的测试覆盖率
11. 独立: 没有额外依赖
12. Source完全的Open,你可以用于任何用途,包括出售它
13. 支持多种开发语言,C,PHP,Perl,Java,ASP.NET,Python
推荐的sqlite客户端管理工具,火狐插件 Sqlite Manger

二、AndroID中使用sqlite 我们还是通过一个例子来学习,相关讲解都写在代码注释里。 1、新建一个项目Lesson15_Hellosqlite,Activity起名叫MainHellosqlite.java。
2、编写用户界面 res/layout/main.xml,准备增(insert)删(delete)改(update)查(select)四个按钮,准备一个下拉列表spinner,显示表中的数据。 <?xml version="1.0" enCoding="utf-8"?>
<linearlayout androID:layout_height="fill_parent" androID:layout_wIDth="fill_parent" androID:orIEntation="vertical" xmlns:androID="http://schemas.androID.com/apk/res/androID">

<textvIEw androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:textsize="20sp" androID:layout_margintop="5dp" androID:ID="@+ID/TextVIEw01" androID:text="sqlite基本 *** 作">
</textvIEw>

<button androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:textsize="20sp" androID:layout_margintop="5dp" androID:ID="@+ID/button01" androID:text="增 | insert" androID:minwIDth="200dp"></button>

<button androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:textsize="20sp" androID:layout_margintop="5dp" androID:ID="@+ID/button02" androID:text="删 | delete" androID:minwIDth="200dp"></button>

<button androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:textsize="20sp" androID:layout_margintop="5dp" androID:ID="@+ID/button03" androID:text="改 | update" androID:minwIDth="200dp"></button>

<button androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:textsize="20sp" androID:layout_margintop="5dp" androID:ID="@+ID/button04" androID:text="查 | select" androID:minwIDth="200dp"></button>

<spinner androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:layout_margintop="5dp" androID:ID="@+ID/Spinner01" androID:minwIDth="200dp">
</spinner>

<textvIEw androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:textsize="20sp" androID:layout_margintop="5dp" androID:ID="@+ID/TextVIEw02"></textvIEw>
</linearlayout>

3、在MainHelosqlite.java的同目录中新建一个数据库 *** 作辅助类 DbHelper.java,内容如下: package androID.basic.lesson15;

import androID.content.Context;
import androID.database.sqlite.sqliteDatabase;
import androID.database.sqlite.sqliteDatabase.CursorFactory;
import androID.database.sqlite.sqliteOpenHelper;

public class DbHelper extends sqliteOpenHelper {

public DbHelper(Context context,String name,CursorFactory factory,
int version) {
super(context,name,factory,version);
}

//辅助类建立时运行该方法
@OverrIDe
public voID onCreate(sqliteDatabase db) {

String sql = "CREATEtable pic (_ID INTEGER PRIMARY KEYautoINCREMENTNOT NulL,filename VARCHAR,description VARCHAR)";
db.execsql(sql);
}

@OverrIDe
public voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
}

}
4、MainHellosqlite.java的内容如下: package androID.basic.lesson15;

import androID.app.Activity;
import androID.content.ContentValues;
import androID.database.Cursor;
import androID.database.sqlite.sqliteDatabase;
import androID.os.Bundle;
import androID.vIEw.VIEw;
import androID.vIEw.VIEw.OnClickListener;
import androID.Widget.AdapterVIEw;
import androID.Widget.AdapterVIEw.OnItemSelectedListener;
import androID.Widget.button;
import androID.Widget.SimpleCursorAdapter;
import androID.Widget.Spinner;
import androID.Widget.TextVIEw;
import androID.Widget.Toast;

public class MainHellosqlite extends Activity {

//sqliteDatabase对象
sqliteDatabase db;
//数据库名
public String db_name = "gallery.sqlite";
//表名
public String table_name = "pic";

//辅助类名
final DbHelper helper = new DbHelper(this,db_name,null,1);

/** Called when the activity is first created. */
@OverrIDe
public voID onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.main);

//UI组件
button b1 = (button) findVIEwByID(R.ID.button01);
button b2 = (button) findVIEwByID(R.ID.button02);
button b3 = (button) findVIEwByID(R.ID.button03);
button b4 = (button) findVIEwByID(R.ID.button04);

//从辅助类获得数据库对象
db = helper.getWritableDatabase();

//初始化数据
initDatabase(db);
//更新下拉列表中的数据
updateSpinner();

//定义按钮点击监听器
OnClickListener ocl = new OnClickListener() {

@OverrIDe
public voID onClick(VIEw v) {

//ContentValues对象
ContentValues cv = new ContentValues();
switch (v.getID()) {

//添加按钮
case R.ID.button01:

cv.put("filename","pic5.jpg");
cv.put("description","图片5");
//添加方法
long long1 = db.insert("pic","",cv);
//添加成功后返回行号,失败后返回-1
if (long1 == -1) {
Toast.makeText(MainHellosqlite.this,
"ID是" + long1 + "的图片添加失败!",Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(MainHellosqlite.this,
"ID是" + long1 + "的图片添加成功!",Toast.LENGTH_SHORT)
.show();
}
//更新下拉列表
updateSpinner();
break;

//删除描述是'图片5'的数据行
case R.ID.button02:
//删除方法
long long2 = db.delete("pic","description='图片5'",null);
//删除失败返回0,成功则返回删除的条数
Toast.makeText(MainHellosqlite.this,"删除了" + long2 + "条记录",
Toast.LENGTH_SHORT).show();
//更新下拉列表
updateSpinner();
break;

//更新文件名是'pic5.jpg'的数据行
case R.ID.button03:

cv.put("filename","pic0.jpg");
cv.put("description","图片0");
//更新方法
int long3 = db.update("pic",cv,"filename='pic5.jpg'","更新了" + long3 + "条记录",
Toast.LENGTH_SHORT).show();
//更新下拉列表
updateSpinner();
break;

//查询当前所有数据
case R.ID.button04:
Cursor c = db.query("pic",
null,null);
//cursor.getCount()是记录条数
Toast.makeText(MainHellosqlite.this,
"当前共有" + c.getCount() + "条记录,下面一一显示:",
Toast.LENGTH_SHORT).show();
//循环显示
for(c.movetoFirst();!c.isAfterLast();c.movetoNext()){
Toast.makeText(MainHellosqlite.this,
"第"+ c.getInt(0)+"条数据,文件名是" + c.getString(1) + ",描述是"+c.getString(2),
Toast.LENGTH_SHORT).show();
}
//更新下拉列表
updateSpinner();
break;
}
}
};

//给按钮绑定监听器
b1.setonClickListener(ocl);
b2.setonClickListener(ocl);
b3.setonClickListener(ocl);
b4.setonClickListener(ocl);

}

//初始化表
public voID initDatabase(sqliteDatabase db) {
ContentValues cv = new ContentValues();

cv.put("filename","pic1.jpg");
cv.put("description","图片1");
db.insert(table_name,cv);

cv.put("filename","pic2.jpg");
cv.put("description","图片2");
db.insert(table_name,"pic3.jpg");
cv.put("description","图片3");
db.insert(table_name,"pic4.jpg");
cv.put("description","图片4");
db.insert(table_name,cv);

}

//更新下拉列表
public voID updateSpinner() {

//定义UI组件
final TextVIEw tv = (TextVIEw) findVIEwByID(R.ID.TextVIEw02);
Spinner s = (Spinner) findVIEwByID(R.ID.Spinner01);

//从数据库中获取数据放入游标Cursor对象
final Cursor cursor = db.query("pic", null);
//创建简单游标匹配器
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
androID.R.layout.simple_spinner_item,cursor,new String[] {
"filename","description" },new int[] {
androID.R.ID.text1,androID.R.ID.text2 });
adapter.setDropDownVIEwResource(androID.R.layout.simple_spinner_dropdown_item);

//给下拉列表设置匹配器
s.setAdapter(adapter);

//定义子元素选择监听器
OnItemSelectedListener oisl = new OnItemSelectedListener() {

@OverrIDe
public voID onItemSelected(AdapterVIEw<?> parent,VIEw vIEw,
int position,long ID) {
cursor.movetoposition(position);
tv.setText("当前pic的描述为:" + cursor.getString(2));
}

@OverrIDe
public voID onnothingSelected(AdapterVIEw<?> parent) {
}
};

//给下拉列表绑定子元素选择监听器
s.setonItemSelectedListener(oisl);
}

//窗口销毁时删除表中数据
@OverrIDe
public voID onDestroy() {
super.onDestroy();
db.delete(table_name,null);
updateSpinner();
}
}

5、运行程序,查看结果:

本例使用的是sqliteDatabase已经封装好的insert,delete,update,query方法,感兴趣的同学可以用sqliteDatabase的execsql()方法和rawquery()方法来实现。好本讲就到这里。 总结

以上是内存溢出为你收集整理的第十五讲:SQLite入门指南全部内容,希望文章能够帮你解决第十五讲:SQLite入门指南所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/1172021.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-02
下一篇2022-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存