Android学习笔记之SQLite数据库的使用及常用的增删改查方法、无sql语句的DRUD方法汇总
(1)目录结构如下:
(2)链接数据库的文件:DBHelper.java要继承SQLiteOpenHelper类
package com.lc.sqlite_demo1.db; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { private static final String DB_NAME = "mydb.db"; // 创建数据库的文件 private static final int VERSION = 2; // 数据库版本,版本是更新的依据 /* * 需要这个构造方法: 数据库只有在调用getWritableDatabase();getReadableDatabase(;方法的时候才会创建数据库 */ public DBHelper(Context context) { super(context, DB_NAME, null, VERSION); } /* * public DBManager(Context context, String name, CursorFactory factory, int * version) { super(context, name, factory, version); // TODO Auto-generated * constructor stub * * } */ /* * 创建数据库的时候用到的语句 */ @Override public void onCreate(SQLiteDatabase db) { // 数据类型:varchar、int、long、float、boolean、text、blob、clob等类型 // 建表语句执行 String sql = "create table person(pid integer primary key autoincrement,name varchar(64),address varchar(200))"; db.execSQL(sql); } /* * 更新数据库的时候使用到的; 这一句在一开始的时候是不会添加的,因为版本号是一样的只有执行一次之后,修改了版本号才会执行这段代码 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "alter table person add age integer"; db.execSQL(sql); } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); } }
(3)创建一个DBManager.java还有数据的增、删、改、查及无sql语句的增、删、改、查方法汇总:
package com.lc.sqlite_demo1.db; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; public class DBManager { private DBHelper dbHelper; private SQLiteDatabase database; public DBManager(Context context) { dbHelper = new DBHelper(context); } /* * 用于更新数据的包括插入、删除、修改 */ public boolean updateBySQL(String sql, Object[] bindArgs) { boolean flag = false; try { database.execSQL(sql, bindArgs); flag = true; } catch (SQLException e) { e.printStackTrace(); } /* * finally { if (database != null) { database.close(); } } */ return flag; } /* * 单独一个方法,获得数据库的链接 */ public void getDataBaseConn() { database = dbHelper.getWritableDatabase(); } /* * 释放数据库链接 */ public void releaseConn() { if (database != null) { database.close(); } } /* * 查找数据的测试程序 */ public void queryBySQL(String sql, String[] selectionArgs) { Cursor cursor = database.rawQuery(sql, selectionArgs); while (cursor.moveToNext()) { System.out.println("-->>" + cursor.getString(cursor.getColumnIndex("name"))); System.out.println("-->>" + cursor.getString(cursor.getColumnIndex("address"))); System.out.println("-->>" + cursor.getInt(cursor.getColumnIndex("age"))); } } /* * 查找单条数据的查询方法 */ public Map<String, String> querySingleResultBySQL(String sql, String[] selectionArgs) { Map<String, String> map = new HashMap<String, String>(); Cursor cursor = database.rawQuery(sql, selectionArgs); int cols_len = cursor.getColumnCount(); while (cursor.moveToNext()) { for (int i = 0; i < cols_len; i++) { String cols_name = cursor.getColumnName(i); String cols_value = cursor.getString(cursor .getColumnIndex(cols_name)); if (cols_value == null) { cols_value = ""; } map.put(cols_name, cols_value); } } return map; } /** * 同构反射获得数据库的记录; 声明Class的属性必须都是String类型 * * @param sql * @param selectionArgs * @param cls * @return */ public <T> T querySingleCursor(String sql, String[] selectionArgs, Class<T> cls) { T t = null; Cursor cursor = database.rawQuery(sql, selectionArgs); int cols_len = cursor.getColumnCount(); while (cursor.moveToNext()) { try { t = cls.newInstance(); for (int i = 0; i < cols_len; i++) { String cols_name = cursor.getColumnName(i); String cols_value = cursor.getString(cursor .getColumnIndex(cols_name)); if (cols_value == null) { cols_value = ""; } Field field = null; try { field = cls.getDeclaredField(cols_name); } catch (NoSuchFieldException e) { e.printStackTrace(); } field.setAccessible(true); field.set(t, cols_value); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return t; } /** * 同构反射获得多条数据库的记录; 声明Class的属性必须都是String类型 * * @param sql * @param selectionArgs * @param cls * @return */ public <T> List<T> queryMutilCursor(String sql, String[] selectionArgs, Class<T> cls) { List<T> list = new ArrayList<T>(); Cursor cursor = database.rawQuery(sql, selectionArgs); int cols_len = cursor.getColumnCount(); while (cursor.moveToNext()) { try { T t = cls.newInstance(); for (int i = 0; i < cols_len; i++) { String cols_name = cursor.getColumnName(i); String cols_value = cursor.getString(cursor .getColumnIndex(cols_name)); if (cols_value == null) { cols_value = ""; } Field field = null; try { field = cls.getDeclaredField(cols_name); } catch (NoSuchFieldException e) { e.printStackTrace(); } field.setAccessible(true); field.set(t, cols_value); list.add(t); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return list; } /* * 查找多条数据的查询方法 */ public List<Map<String, String>> queryMutiResultBySQL(String sql, String[] selectionArgs) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Cursor cursor = database.rawQuery(sql, selectionArgs); int cols_len = cursor.getColumnCount(); while (cursor.moveToNext()) { Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < cols_len; i++) { String cols_name = cursor.getColumnName(i); String cols_value = cursor.getString(cursor .getColumnIndex(cols_name)); if (cols_value == null) { cols_value = ""; } map.put(cols_name, cols_value); } list.add(map); } return list; } public Cursor queryMutiCursor(String sql, String[] selectionArgs) { Cursor cursor = database.rawQuery(sql, selectionArgs); return cursor; } /**************************** 以下是不需要sql语句的查询方法 **********************************/ /** * * @param tabeName * @param nullColumnHack * @param values * @return */ public boolean insertByNotSQL(String tabeName, String nullColumnHack, ContentValues values) { boolean flag = false; // insert into tableName(a,,b,c) values(?,?,?) long id = database.insert(tabeName, nullColumnHack, values); flag = (id > 0 ? true : false); return flag; } /** * 无sql语句的更新操作 * * @param tabeName * @param values * @param whereClause * @param whereArgs * @return */ public boolean updateByNotSQL(String tabeName, ContentValues values, String whereClause, String[] whereArgs) { boolean flag = false; // update tableName set name =?,address=?,age=? where pid=? int count = database.update(tabeName, values, whereClause, whereArgs); // 影响数据的行数 flag = (count > 0 ? true : false); return flag; } /** * 无sql语句的删除操作 * * @param table * @param whereClause * @param whereArgs * @return */ public boolean deleteNotSQL(String table, String whereClause, String[] whereArgs) { boolean flag = false; // delete from tableName where pid=? int count = database.delete(table, whereClause, whereArgs); flag = (count > 0 ? true : false); return flag; } /** * sql标准写法:select [distinct][columnName] ... from tableName * [where][selection][selectionArgs][groupBy][having][order by][limit] * * @param distinct * @param table * @param columns * @param selection * @param selectionArgs * @param groupBy * @param having * @param orderBy * @param limit * @return */ public Cursor queryByNotSQL(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { Cursor cursor = null; /* * 这是一条折中 的查询方法,其他的方法就是一系列的构造函数 */ cursor = database.query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit); return cursor; } }
(4)测试类(要在清单文件中加权限!)
package com.lc.sqlite_demo1; import java.util.List; import java.util.Map; import com.lc.sqlite_demo1.db.DBHelper; import com.lc.sqlite_demo1.db.DBManager; import android.content.ContentValues; import android.database.Cursor; import android.test.AndroidTestCase; public class MyTest extends AndroidTestCase { /* * 测试创建数据库,只有调用getReadableDatabase()/getReadableDatabase()方法才会创建数据库 */ public void initTable() { DBHelper dbManager = new DBHelper(getContext()); dbManager.getReadableDatabase(); } public void insert() { // String sql = "insert into person(name,address,age) values(?,?,?)"; String sql = "insert into person(name,address) values(?,?)"; Object[] bindArgs = { "张三", "成都" }; DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); dbManager.updateBySQL(sql, bindArgs); dbManager.releaseConn(); } public void update() { String sql = "update person set name=?,address=?,age=? where pid =1"; Object[] bindArgs = { "王五", "北京", 23 }; DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); dbManager.updateBySQL(sql, bindArgs); dbManager.releaseConn(); } public void delete() { String sql = "delete from person where pid =?"; Object[] bindArgs = { 1 }; DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); dbManager.updateBySQL(sql, bindArgs); dbManager.releaseConn(); } public void query() { String sql = "select * from person"; DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); dbManager.queryBySQL(sql, null); dbManager.releaseConn(); } public void querySingleResultBySQLTest() { String sql = "select * from person where pid =?"; DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); Map<String, String> map = dbManager.querySingleResultBySQL(sql, new String[] { "2" }); System.out.println("--->>" + map.get("name")); System.out.println("--->>" + map.get("address")); System.out.println("--->>" + map.get("age")); dbManager.releaseConn(); } public void queryMutiResultBySQLTest() { String sql = "select * from person where name like ?"; DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); List<Map<String, String>> list = dbManager.queryMutiResultBySQL(sql, new String[] { "%张%" }); for (Map<String, String> map2 : list) { System.out.println("---->>" + map2.get("name")); System.out.println("---->>" + map2.get("address")); System.out.println("--->>" + map2.get("age")); } dbManager.releaseConn(); } /**************************** 以下是不需要sql语句的查询方法测试 **********************************/ /* * 无需查询语句的插入操作 */ public void insertNotSQLTest() { DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); ContentValues values = new ContentValues(); values.put("name", "xuliugen"); values.put("address", "dfhkjsdhfkjhsd"); values.put("age", 22); dbManager.insertByNotSQL("person", null, values); dbManager.releaseConn(); } /* * 无需查询语句的更新操作 */ public void updateNotSQLTest() { DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); ContentValues values = new ContentValues(); values.put("name", "fff"); values.put("address", "12srqrqwrewrqrwetrew"); values.put("age", 22); dbManager.updateByNotSQL("person", values, "pid=? and name=?", new String[] { "5", "fff" }); dbManager.releaseConn(); } /* * 无需查询语句的删除操作 */ public void deleteNotSQL() { DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); dbManager.deleteNotSQL("person", "pid=?", new String[] { "5" }); dbManager.releaseConn(); } /* * 无需查询语句的查询操作 */ public void queryByNotSQLTest() { DBManager dbManager = new DBManager(getContext()); dbManager.getDataBaseConn(); Cursor cursor = dbManager.queryByNotSQL(false, "person", null, null, null, null, null, null, null); while (cursor.moveToNext()) { System.out.println("-->>" + cursor.getColumnIndex("name")); System.out.println("-->>" + cursor.getColumnIndex("age")); System.out.println("-->>" + cursor.getColumnIndex("address")); } dbManager.releaseConn(); } }
其他文件不做修改!可以实现数据的增删改查等操作!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。