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例子
为了判断底层数据库是否包含news_inf数据表,采用的处理方法十分繁琐:
先尝试向news_inf数据表中插入记录,如果抛出异常,在异常中捕获的catch块中创建news_inf数据表,然后再插入记录。
实际项目中很少使用SQLiteDatabase的方法打开数据库,通常都会继承SQLiteOpenHelper开发子类,并通过该子类的getReadableDatabase()和getWritableDatabase()方法打开数据库。
使用SQLiteOpenHelper 例子
<
c81e
li>大小: 16.5 KB
查看图片附件
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
查看图片附件
相关文章推荐
- 【转】Android使用SQLiteOpenHelper对数据库进行版本管理【学习记录】
- 学习笔记 android数据库之 Sqlite
- Android SQLite数据库学习
- android学习摘记——通过adb工具查看sqlite3数据库
- android学习--使用adb工具管理sqlite3数据库
- 【转】Android获取用于操作数据库的SQLiteDatabase实例【学习记录】
- Android数据库Sqlite-android学习之旅(九)
- Android基础学习之SQLiteHelper(数据库帮助类)
- Android数据库Sqlite-android学习之旅(九)
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加数据及显示(一)
- Android学习之旅--sqlite3 数据库命令操作
- 2014-10-27Android学习------SQLite数据库操作(二)-----数据库的创建--SQLiteHelper extends SQLiteOpenHelper
- android的基础学习:SQLite存储方式以及数据库操作
- Android数据存储之SQLite 数据库学习
- Android SQLite数据库学习笔记
- Android SQLite数据库使用 学习与代码实践
- Android学习---数据库的增删改查(sqlite CRUD)
- Android SQLite数据库使用 学习与代码实践
- Android学习之轻量级数据库SQLite
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加修改删除数据之联系人(二)