Android 提供了对SQLite数据库的完全支持。应用中的任何类(不包括应用外部的类)均可按名称访问您所创建的任何数据库。如果想让自己创建的数据库供外部应用使用,请使用 ContentProvider对外提供接口。sqlite 轻量级数据库使用方法如下:
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
通过本章学习,你将掌握以下知识点
1. 继承sqliteOpenHelper 创建数据库,数据表 2. 插入数据库数据 3. 删除数据库数据 4. 查询数据库数据 5. 修改数据库数据 6. 数据库使用Demo
1. 继承sqliteOpenHelper 创建数据库,数据表
- 创建数据库表
- 语法
CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns),column2 datatype,column3 datatype,..... columnN datatype,);
- 举例
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL );
public sqliteDBHelper(Context context) { super(context,DB_NAME,null,DB_VERSION); } @Override public void onCreate(sqliteDatabase db) { // sqlite 数据库中,字段一般不区分类型,但是主键除外,主键必须是整型 String sql = "CREATE TABLE " + TABLE_NAME + "(" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" + "," + NAME + " CHAR(10)," + NICK_NAME + " CHAR(10))"; db.execsql(sql); }
DROP TABLE IF EXITS TABLE_NAME;
2. 插入数据库数据
- 插入数据方法一
INSERT INTO TABLE_NAME [(column1,column2,column3,...columnN)] VALUES (value1,value2,value3,...valueN);INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',32,'California',20000.00 );
- 插入数据方法二
INSERT INTO TABLE_NAME VALUES (value1,246)">INSERT INTO COMPANY VALUES (7,'James',24,'Houston',10000.00 );
- Android 封装insert()插入数据方法三
1.语法
insert(String table,String nullColumnHack,ContentValues values)2.举例
private sqliteDatabase db; db.insert(sqliteDBHelper.TABLE_NAME,values);3. 删除数据库数据
DELETE FROM table_name WHERE [condition];DELETE FROM COMPANY WHERE ID = 7;delete(String table,String whereClause,String[] whereArgs)举例
private sqliteDatabase db; db.delete(sqliteDBHelper.TABLE_NAME,"name=?",new String[] { "Jack" });4. 查询数据库数据
SELECT column1,columnN FROM table_name;SELECT * FROM table_name;//1.查询指定的列 SELECT ID,SALARY FROM COMPANY; // 2.查询表中所有内容 SELECT * FROM COMPANY;query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)private sqliteDatabase db; Cursor cursor = db.query(sqliteDBHelper.TABLE_NAME,null);5. 修改数据库数据
UPDATE table_name SET column1 = value1,column2 = value2....,columnN = valueN WHERE [condition];UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;update(String table,ContentValues values,246)">db.update(sqliteDBHelper.TABLE_NAME,values,"nickname=?",new String[] { "J" });6. 数据库使用Demo
- 实现效果
数据库增删改查
- 创建数据库
public class sqliteDBHelper extends sqliteOpenHelper { public static String DB_NAME = "person.db"; // version 必须大于1 public static int DB_VERSION = 1; public static String TABLE_NAME = "person"; public static String _ID = "_id"; public static String NAME = "name"; public static String NICK_NAME = "nickname"; /** * @param context * @param name * @param factory * @param version */ public sqliteDBHelper(Context context,String name,CursorFactory factory,int version) { super(context,name,factory,version); // TODO Auto-generated constructor stub } public sqliteDBHelper(Context context) { super(context," + NICK_NAME + " CHAR(10))"; db.execsql(sql); } // 数据库升级的处理方法, @Override public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) { if (newVersion > oldVersion) { // 删除老的数据表,创建新表 String dropsql = "DROP TABLE IF EXITS " + TABLE_NAME; db.execsql(dropsql); onCreate(db); } } }public class sqliteMethods extends Activity { private sqliteDatabase db; private ListView listView; private SimpleCursorAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite); sqliteDBHelper helper = new sqliteDBHelper(this); /**** * 需要调用以下两个方法之一,数据库和表才能真正创建出来 * 正常情况下,getReadableDatabase()和getWritableDatabase()得到结果是一样的 * 非正常情况下,比如明确要求以只读的方式打开数据库,或者磁盘满了,此时getReadableDatabase得到的是只读的数据库 * **/ db = helper.getWritableDatabase(); listView = (ListView) findViewById(R.id.lv); adapter = new SimpleCursorAdapter(this,R.layout.listview_sqlite_tv,new String[] { "name","nickname" },new int[] { R.id.name,R.id.nickname },SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); listView.setAdapter(adapter); } // public void Insertsql(View view) { InstertDB(); QueryDB(); } /** * 插入数据处理方法 */ private void InstertDB() { ContentValues values = new ContentValues(); values.put("name","Jack"); values.put("nickname","J"); // 返回值:最近插入的那一行的行号 long result = db.insert(sqliteDBHelper.TABLE_NAME,values); if (result > 0) { Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(getApplicationContext(),"添加失败",Toast.LENGTH_SHORT) .show(); } } public void Quarysql(View view) { QueryDB(); } /** * 查询数据处理方法 */ private void QueryDB() { // Select * from person where name= ? // db.rawQuery(s) // cursor 游标--》 结果集合 // 当使用SimpleCusorAdapter 时候,cursor 这个记过里面 必须包含“_id”,这个字段 // Cursor cursor = db.query(sqliteDBHelper.TABLE_NAME,// new String[] { "Jack" },null); Cursor cursor = db.query(sqliteDBHelper.TABLE_NAME,null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); String nickname = cursor.getString(cursor .getColumnIndex("nickname")); } // 将一个新的cusor跟原有的custor 交换 adapter.swapCursor(cursor); adapter.notifyDataSetChanged(); } public void Deletesql(View view) { DeleteDb(); QueryDB(); } /** * 删除数据 */ private void DeleteDb() { int result = db.delete(sqliteDBHelper.TABLE_NAME,new String[] { "Jack" }); if (result > 0) { Toast.makeText(getApplicationContext(),"删除成功","无Jack",Toast.LENGTH_SHORT) .show(); } } public void Modifysql(View view) { UpdateDb(); QueryDB(); } /** * 修改数据 */ private void UpdateDb() { // update person set name="Kitty" where nickname="J" ContentValues values = new ContentValues(); values.put("name","Lucy"); int result = db.update(sqliteDBHelper.TABLE_NAME,new String[] { "J" }); if (result > 0) { QueryDB(); } } }
- 布局如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/insertdata" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="Insertsql" android:text="增加数据" /> <Button android:id="@+id/deletedata" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="Deletesql" android:text="删除数据" /> <Button android:id="@+id/quarydata" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="Quarysql" android:text="查询数据" /> <Button android:id="@+id/modifydata" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="Modifysql" android:text="修改数据" /> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
- ListView item布局如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" android:padding="10dp" > <TextView android:id="@+id/name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="name" /> <TextView android:id="@+id/nickname" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="nickname" /> </LinearLayout>至此Android sqlite 数据库的使用方法已经基本结束。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息