Android之SQLite数据库及游标使⽤案例
alertdialog使用方法
[size=small][color=olive][b]查询数据库:
两种⽅式--
第⼀种⽅式:类似INSERT UPDATE DELETE,有两种⽅法使⽤select 从SQLite数据库检索数据。
使⽤rawQuery()直接调⽤select 语句,使⽤query() ⽅法构建⼀个查询。
⼩贴⼠:
* onCreate(); 该⽅法在数据库第⼀次创建的时候调⽤,只调⽤⼀次;
* onUpgrade(); 该⽅法在数据库版本更新的时候调⽤;
* T-SQL: 国际标准机制
DDL:数据定义语⾔:create drop alter;
DCL: 数据控制语⾔:grant revoke;
DML: 数据管理语⾔:insert delete update select ;
* select 列的列表 from 表的列表 where 条件语句 group by 分组属性 having 分组条件 order by 排
序列 asc|desc limit m, n;
* 游标:游标的实质使⼀种能从包括多条数据记录的结果集种每次提取⼀条记录的机制;
游标的使⽤,Cursor的⽅法:
* close(); 关闭游标 ,释放资源;
* copyStringToBuffer(int columnIndex,CharArrayBuffer buffer); 在缓冲区中检索请求的列
的⽂本,将其存储;
* getColumnCount(); 返回所有列的⾏数;
* getColumnIndex(String columnName); 返回指定的列,如果不存在那么返回-1;
* getColumnIndexOrThrow(String columnName);从0开始返回指定列的名称,如果不存在将抛出异常;
* getColumnName(int columnIndex); 从给定的索引返回列名;
* getColumnNames(); 返回⼀个字符串数组的列名;
* moveToFirst(); 将游标移动到第⼀条;
* moveToLast(); 将游标移动到最后⼀条;
* move(int offset); 将游标移动到指定ID;
* moveToNext(); 将游标移动到下⼀条;
* moveToPrevious(); 将游标移动到上⼀条;
* getCount(); 得到游标总记录条数;
* isFirst(); 判断当前游标是否为第⼀条数据;[/b][/color][/size]
[size=small][color=olive][b] 案例:创建⼀个数据库,并在数据库第⼀次创建的时候初始化创建⼀张表student,添加记录, 然后查询数据库种表的数据,显⽰出来;
java代码如下:[/b][/color][/size]
/* 查询数据库 *//* 返回⼀个游标对象 */
public Cursor selectData(){
/* 与数据库获得连接,获得只读属性 */
SQLiteDatabase sqliteDatabase = ReadableDatabase();
/* 使⽤游标保存得到的结果集 *//* 参1:查询语句;参2:查询条件 */
//Cursor cursor = sqliteDatabase.rawQuery("select * from student", null);
/* 使⽤查询语句:⽅式⼆
* @ distinct    --是否去除重复⾏例:值为:true/false;
* @ table    --表名
* @ columns    --要查询的列例: new String[]
{"id","name","age"}
* @ selection  --查询条件例:"id>?"
* @ selectionArgs  --查询条件的参数例:new String[]{"3"}
* @ groupBy  --对查询的结果进⾏分组
* @ having    --对分组的结果进⾏限制
* @ orderby  --对查询的结果进⾏排序;例:"age asc"
* @ limit    --分页查询限制;例:"2,5"
从第2⾏开始,到第5⾏结束;注:⾏数从0 开始;
*  */
Cursor cursor = sqliteDatabase.query(true,"student", new String[]{"_id","name","age"}, "_id>?", new String[]{"1"}, null, null, "age desc", "1,5");
/* 使⽤游标---获取游标中的数据 */
veToNext()){
String id = ColumnIndex("_id"));
String name = ColumnIndex("name"));
String age = ColumnIndex("age"));
Toast.makeText(MainActivity.this, "_id="+id+" name="+name+"  age="+age, 1000).show();  }
return cursor;
}
[size=small][color=olive][b]//案列如下:
实现效果:
仿制⼿机通讯录,实现编辑,删除的效果;java代码如下:[/b][/color][/size] ample.sqliteselection;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import
t.DialogInterface;
import android.database.Cursor;
import
android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu;
import
android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import
android.view.View.OnClickListener;
import android.widget.AdapterView;
import
android.widget.AdapterView.OnItemLongClickListener; import android.widget.Button;
import
android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import
android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText edit_age;
private EditText edit_name;
private DBHelper dbhelper;
private Button
selectBtn,insertBtn;
private ListView listview ;
private Cursor cursorTemp;
private String
nameTemp;
private String ageTemp;
public void init(){
selectBtn =(Button) findViewById
(R.id.selectBtn);
insertBtn = (Button) findViewById(R.id.insertBtn);
listview =
(ListView) findViewById(R.id.listView);
}
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
/* 组件对象初始化 */
init();
/* 创建数据库 */
dbhelper = new DBHelper(this, "mydb.db", null, 1);
/* 为insertBtn设置店家事件 */
insertBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
insertData();
Toast.makeText(MainActivity.this, "数据添加成
功", 1000).show();
}
});
/* 为selectBtn设置点击事件 *//*
动作:显⽰ListView组件⾥⾯的数据项 */
selectBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Cursor cursor = selectData();
/* cursorTemp临时保存数据集 */
cursorTemp = cursor;
/
* ⽤于填充ListView组件的数据 */
listViewShow(cursor);
}
});
/* 为ListView编写长按事件 *//* 动作,获得条⽬对应的信息 */
listview.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean
onItemLongClick(AdapterView<?> arg0, View arg1,int id, long positive) {
/* 直接移动到
指定 ID 的游标的数据⾏数 *//* ve(id-1) */
/* 获取⽤户点击的条⽬信息 */
nameTemp = ColumnIndex("name"));
ageTemp = ColumnIndex("age"));
Toast.makeText(MainActivity.this, "总数:"+Count()+"  id="+id+" name="+String (ColumnIndex("name"))
(ColumnIndex("name"))
+"
age="+ColumnIndex("age")), 1000).show();
return
false;
}
});
/*  为ListView组件注册上下⽂菜单  */
registerForContextMenu(listview);
}
/* 查询数据库 *//* 返回⼀个游标对象 */
public Cursor
selectData(){
/* 与数据库获得连接,获得只读属性 */
SQLiteDatabase sqliteDatabase =
/* 使⽤游标保存得到的结果集 *//* 参1:查询语句;参2:查询条件 */
//Cursor cursor = sqliteDatabase.rawQuery("select * from student", null);
/* 使⽤查询语
句:⽅式⼆
* @ distinct    --是否去除重复⾏例:值为:
true/false;
* @ table    --表名
* @ columns
--要查询的列例: new String[]{"id","name","age"}
* @ selection
--查询条件例:"id>?"
* @ selectionArgs  --查询
条件的参数例:new String[]{"3"}
* @ groupBy  --对查询的结果
进⾏分组
* @ having    --对分组的结果进⾏限制
* @ orderby
--对查询的结果进⾏排序;例:"age asc"
* @ limit
--分页查询限制;例:"2,5" 从第2⾏开始,到第5⾏结束;注:⾏数从0 开始;
*  */
Cursor cursor = sqliteDatabase.query(true,"student", new String[]{"_id","name","age"}, "_id>?", new String[]{"1"}, null, null, "age desc", "1,5");
/* 使⽤游标---获取游标中的数据 */

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。