您的位置:首页 > 移动开发 > Android开发

Android sqlite数据库学习

2016-09-07 18:14 323 查看
android 使用 SQLiteDatabase对象来管理、操作数据库

SQLiteDatabase 有点类似于JDBC的Connection接口,但是SQLiteDatabase提供的方法更多,例如insert,update,delete,query等方法。

 

android中的Cursor类似于JDBC中的ResultSet,Cursor同样提供了查询结果的记录指针

getColumnCount()   返回所有列的总数

getColumnIndex(String columnName)   返回指定列的名称,如果不存在返回-1

getColumnIndexOrThrow(String columnName)   从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。

getColumnName(int columnIndex)   从给定的索引返回列名

getColumnNames()   返回一个字符串数组的列名

getCount()  返回Cursor 中的行数

moveToFirst()   移动光标到第一行

moveToLast()    移动光标到最后一行

moveToNext()     移动光标到下一行

moveToPosition(int position)   移动光标到一个绝对的位置

moveToPrevious()    移动光标到上一行

 

使用SQLiteDatabase例子

package com.hb.sqlite;

import com.example.contactstudy.R;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class IndexSqliteActivity extends Activity implements OnClickListener{

private Button btnAddDatabase = null;
private Button btnInsertDatabase = null;
private Button btnQueryDatabase = null;
private Button btnDelDatabase = null;

private SQLiteDatabase db;

private String CREATE_DB = "create table user_inf(" +
"user_id integer primary key," +
"user_name varchar(255)," +
"user_pass varchar(255)" +
")";

private String INSERT_DATA = "insert into user_inf (user_id,user_name,user_pass) values(null,'huangbiao','mypassword')";

private String QUERY_DATA = "select * from user_inf";

private String DELETE_DATA = "delete from user_inf where user_id='1'";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.index_sqlite_activity);
//初始化activity
this.init();
}

/**
* 初始化数据
*/
public void init(){
//获取按钮控件
btnAddDatabase = (Button)findViewById(R.id.btnAddDatabase);
btnInsertDatabase = (Button)findViewById(R.id.btnInsertDatabase);
btnQueryDatabase = (Button)findViewById(R.id.btnQueryDatabase);
btnDelDatabase = (Button)findViewById(R.id.btnDelDatabase);
//给按钮绑定事件,this是继承了OnClickListener接口
btnAddDatabase.setOnClickListener(this);
btnInsertDatabase.setOnClickListener(this);
btnQueryDatabase.setOnClickListener(this);
btnDelDatabase.setOnClickListener(this);
//使用Log类记录日志,e是error级别,tag是"huangbiao"
//this.getFilesDir()获取app应用的文件目录
Log.e("huangbiao","this.getFilesDir() : " + this.getFilesDir());
//获取当前APP的db存放的目录
db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString() + "/huangbiao.db", null);
}

@Override
public void onClick(View v) {
//创建数据库
if(btnAddDatabase == v){
db.execSQL(this.CREATE_DB);
}
//插入数据库
else if(btnInsertDatabase == v){
db.execSQL(this.INSERT_DATA);
}
//查询数据库
else if(btnQueryDatabase == v){
//查询数据库,获取游标对象
Cursor cursor = db.rawQuery(this.QUERY_DATA, null);
//循环游标,获取游标内部的数据,moveToNext()判断是否还有数据,如果有,则返回布尔值
while (cursor.moveToNext()) {
//获取游标内部的值
String user_id = cursor.getString(cursor.getColumnIndex("user_id"));
String user_name = cursor.getString(cursor.getColumnIndex("user_name"));
String user_pass = cursor.getString(cursor.getColumnIndex("user_pass"));
Log.e("huangbiao","user_id : " + user_id + ":user_name : " + user_name + ":user_pass : " + user_pass + "");
}
}
//删除数据库
else if(btnDelDatabase == v){
db.execSQL(this.DELETE_DATA);
}
}
}

 

为了判断底层数据库是否包含news_inf数据表,采用的处理方法十分繁琐:

先尝试向news_inf数据表中插入记录,如果抛出异常,在异常中捕获的catch块中创建news_inf数据表,然后再插入记录。

 

实际项目中很少使用SQLiteDatabase的方法打开数据库,通常都会继承SQLiteOpenHelper开发子类,并通过该子类的getReadableDatabase()和getWritableDatabase()方法打开数据库。

 

使用SQLiteOpenHelper 例子

package com.hb.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class StuDBHelper extends SQLiteOpenHelper {

/*
* SQLiteOpenHelper 是一个抽象类,因此创建的类需要实现SQLiteOpenHelper的构造方法
* */
public StuDBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase sqlitedatabase) {
String sql = "create table stu_table(id int primary key,sname varchar(20),sage int)";
//输出创建数据库的日志信息
Log.i("huangbiao", "create Database------------->");
//execSQL函数用于执行SQL语句
sqlitedatabase.execSQL(sql);
}

@Override
//数据库更新版本的时候调用该方法
public void onUpgrade(SQLiteDatabase sqlitedatabase, int i, int j) {

}

}

 

package com.hb.sqlite;

import com.example.contactstudy.R;

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.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SqliteOpenHelperActivity extends Activity implements OnClickListener{

private EditText  student_name = null;
private EditText  student_age = null;

private Button  btn_add_student = null;
private Button  btn_query_student = null;
private Button  btn_del_student = null;
private Button  btn_update_student = null;

private TextView  sqlite_result = null;

private StuDBHelper  stuDBHelper = null;

private SQLiteDatabase  db = null;

private  void init(){
student_name = (EditText) findViewById(R.id.student_name);
student_age = (EditText) findViewById(R.id.student_age);

btn_add_student = (Button) findViewById(R.id.btn_add_student);
btn_query_student = (Button) findViewById(R.id.btn_query_student);
btn_del_student = (Button) findViewById(R.id.btn_del_student);
btn_update_student = (Button) findViewById(R.id.btn_update_student);
//给按钮绑定事件
btn_add_student.setOnClickListener(this);
btn_query_student.setOnClickListener(this);
btn_del_student.setOnClickListener(this);
btn_update_student.setOnClickListener(this);

sqlite_result = (TextView) findViewById(R.id.sqlite_result);

//实例化SQLiteOpenHelper对象
stuDBHelper = new StuDBHelper(this, "student.db", null, 1);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载视图文件
setContentView(R.layout.acivity_sqlite_open_helper);

this.init();
}

@Override
public void onClick(View view) {
//获取用户输入的名字
String student_nameValue = student_name.getText().toString();
//获取用户输入的年龄
String student_ageValue = student_age.getText().toString();

//添加按钮事件
if(view == btn_add_student){
db = stuDBHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("sname", student_nameValue);
contentValues.put("sage", student_ageValue);
db.insert("stu_table", null, contentValues);
//关闭数据库
db.close();
}
//查询按钮事件
else if(view == btn_query_student){
db = stuDBHelper.getReadableDatabase();
//如果想做模糊查询,那么student_nameValue的值应该是"%huang%"
Cursor cursor = db.rawQuery("select * from stu_table where sname like ?", new String[]{student_nameValue});
String tempResult = "";
//游标首先跳转到第一条数据的位置,返回boolean值
if(cursor.moveToFirst()){
do{
String tempName = cursor.getString(cursor.getColumnIndex("sname"));
int tempInt = cursor.getInt(cursor.getColumnIndex("sage"));
tempResult = tempResult+"sname:"+tempName+"  sage:"+tempInt+"/r/n";
}while(cursor.moveToNext());
}
sqlite_result.setText(tempResult);
db.close();
}
//删除按钮事件
else if(view == btn_del_student){
db = stuDBHelper.getWritableDatabase();
db.delete("stu_table", "sname=?", new String[]{student_nameValue});
db.close();
}
//修改按钮事件
else if(view == btn_update_student){
db = stuDBHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("sage", student_ageValue);
//			contentValues.put(key, value);
db.update("stu_table", contentValues, "sname=?", new String[]{student_nameValue});
db.close();
}

}
}

 


 





<
c81e
li>大小: 16.5 KB
查看图片附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: