AndroID系统集成了一个轻量级数据库:sqlite。sqlite 只是一个嵌入式的数据库引擎,适用于资源有限的设备上。
sqlite支持大部分sql语法,允许开发者使用SQL语句 *** 作数据库的数据,但sqlite不需要安装和启动服务器进程,sqlite数据库只是一个文件。
sqliteDatabase类,用来 *** 作数据库。它里面的静态方法提供了数据库的构造,当然使用sqliteOpenHelper 会更好,下面会介绍。
数据库的构造,静态方法
public static sqliteDatabase openDatabase(String path,CursorFactory factory,int flags);public static sqliteDatabase openDatabase(String path,int flags,DatabaseErrorHandler errorHandler);public static sqliteDatabase openorCreateDatabase(file file,CursorFactory factory) ;public static sqliteDatabase openorCreateDatabase(String path,CursorFactory factory);
通过名字也能看出来,openorCreateDatabase 当不存在时创建该数据库
数据库的 *** 作,(增删改查)
voID execsql(String sql,Object[] bindArgs); //执行带占位符的SQL语句voID execsql(String sql);Cursor rawquery(String sql,String[] selectionArgs);public long insert(String table,String nullColumnHack,ContentValues values);public int update(String table,ContentValues values,String whereClause,String[] whereArgs)public Cursor query(boolean distinct,String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);public int delete(String table,String[] whereArgs);
上面一组适用于SQL语句, 下面一组是通过参数完成SQL语句的功能,具体参数可查看文档
sqliteOpenHelper是androID提供的一个管理数据库的工具类。一般使用它的子类,来管理数据库。
属于抽象类继承他需要实现voID onCreate(sqliteDatabase db) 和voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion)方法,onCreate会在当用户获取数据库,不存在时,系统回调,用户不用管。onUpgrade 在数据库更新时回调
通过getReadableData(),getWritableDatabase()来获取sqliteDatabase对象,其中getReadableData 只能读 *** 作,getWritableDatabase 读写 *** 作。
实例,实现简单的类似单词本的查询添加功能:
MainActivity.java
package com.hipad.wordbook;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import androID.app.Activity;import androID.content.Intent;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.Toast;public class MainActivity extends Activity { MyDatabaseHelper dbHelper; button insert = null; button search = null; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this,"myDict.db3",null,1); insert = (button)findVIEwByID(R.ID.main_button1); search = (button)findVIEwByID(R.ID.main_button2); insert.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { String word = ((EditText)findVIEwByID(R.ID.edit1)).getText().toString(); String detail = ((EditText)findVIEwByID(R.ID.edit2)).getText().toString(); insertData(dbHelper.getReadableDatabase(),word,detail); Toast.makeText(MainActivity.this,"Add Success!",Toast.LENGTH_LONG).show(); } }); search.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { String key = ((EditText)findVIEwByID(R.ID.edit1)).getText().toString(); Cursor cursor = dbHelper.getReadableDatabase().rawquery( "select * from dict where word like ? or detail like ?",new String[]{"%"+ key +"%","%"+ key +"%"}); Bundle data = new Bundle(); data.putSerializable("data",converCursorToList(cursor)); Intent intent = new Intent(MainActivity.this,ResultActivity.class); intent.putExtras(data); startActivity(intent); } }); } protected ArrayList<Map<String,String>> converCursorToList(Cursor cursor){ ArrayList<Map<String,String>> result = new ArrayList<Map<String,String>>(); while(cursor.movetoNext()){ Map<String,String> map = new HashMap<String,String>(); map.put("word",cursor.getString(1)); map.put("detail",cursor.getString(2)); result.add(map); } return result; } private voID insertData(sqliteDatabase db,String word,String detail){ db.execsql("insert into dict values(null,?,?)",new String[]{word,detail}); } @OverrIDe public voID onDestroy(){ super.onDestroy(); if(dbHelper != null){ dbHelper.close(); } }}
MysqLiteOpenHelper 实现数据库的管理,实现比较简单:
package com.hipad.wordbook;import androID.content.Context;import androID.database.sqlite.sqliteDatabase;import androID.database.sqlite.sqliteDatabase.CursorFactory;import androID.database.sqlite.sqliteOpenHelper;public class MyDatabaseHelper extends sqliteOpenHelper { final String CREATE_table_sql = "create table dict(_ID integer primary "+ "key autoincrement,detail)"; public MyDatabaseHelper(Context context,String name,int version) { super(context,name,factory,version); } @OverrIDe public voID onCreate(sqliteDatabase db) { db.execsql(CREATE_table_sql); } @OverrIDe public voID onUpgrade(sqliteDatabase db,int newVersion) { System.out.print("----------------------onUpdate Called--------------" +oldVersion + "----->"+newVersion); }}
点击查询后,返回界面,使用ListVIEw把结果显示出来:
ResultActivity.java
package com.hipad.wordbook;import java.util.List;import java.util.Map;import androID.app.Activity;import androID.content.Intent;import androID.os.Bundle;import androID.Widget.ListVIEw;import androID.Widget.SimpleAdapter;public class ResultActivity extends Activity{ @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.sec_activity); ListVIEw ListeVIEw = (ListVIEw)findVIEwByID(R.ID.ListVIEw); Intent intent = getIntent(); Bundle data = intent.getExtras(); List<Map<String,String>> List = (List<Map<String,String>>)data.getSerializable("data"); SimpleAdapter adapter = new SimpleAdapter(ResultActivity.this,List,R.layout.simple_line,new String[]{"word","detail"},new int[]{R.ID.simple_text1,R.ID.simple_text2} ); ListeVIEw.setAdapter(adapter); }}
布局文件比较简单,这里就省略了。总之,使用sqlite,要属性SQL语句,使用函数参数比较麻烦,大部分人应该不会使用。
总结以上是内存溢出为你收集整理的SQLite的学习全部内容,希望文章能够帮你解决SQLite的学习所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)