android mysql sqlite_Android-----创建SQLite数据库

本文介绍了Android系统中SQLite数据库的使用,包括SQLite的特点、如何创建数据库表,并展示了DBHelper、DBManager和SQLFunction三个关键类的代码示例,用于数据库的增、删、查、改操作。
摘要由CSDN通过智能技术生成

简单介绍一下Android系统内置轻便又功能强大的嵌入式数据库--SQLite。

SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,它是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且由于其占用资源低(占用内存只需几百K)、处

理速度快等特点,目前许多嵌入式产品中都使用了它,其中就包括大名鼎鼎的iOS和Android移动操作系统。SQLite能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、

C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

SQLite数据库的特点:

1.轻量级:使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。

2.独立性:SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

3.隔离性:SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。

4.跨平台:SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android和IOS。

5.多语言接口: SQLite 数据库支持多语言编程接口。

6.安全性:SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

接下来就在Android中创建一个自己的SQLite数据库,完整代码如下:

DBHelper.java:

1 public classDBHelper extends SQLiteOpenHelper {2

3 private static final String DATABASE_NAME = "test.db"; //数据库名字

4 private static final int DATABASE_VERSION = 1 ; //数据库版本号

5

6 publicDBHelper(Context context){7 super(context,DATABASE_NAME,null,DATABASE_VERSION);8 }9

10

11 /**12 * 创建数据库表:person13 * _id为主键,自增14 * **/

15 @Override16 public voidonCreate(SQLiteDatabase sqLiteDatabase) {17 Log.i("TAG:","创建person数据库表!");18 sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +

19 "name VARCHAR,info TEXT)");20 }21

22 @Override23 public void onUpgrade(SQLiteDatabase sqLiteDatabase,int oldVersion,intnewVersion) {24

25 }26

27 @Override28 public voidonOpen(SQLiteDatabase sqLiteDatabase){29 super.onOpen(sqLiteDatabase);30 }31 }

DBManager.java:

1 public classDBManager {2

3 DBHelper helper;4 SQLiteDatabase sqLiteDatabase;5

6 publicDBManager(Context context){7 helper = newDBHelper(context);8 sqLiteDatabase =helper.getReadableDatabase();9 }10

11 /**12 * execSQL()方法可以执行insert,update,delete语句13 * 实现对数据库的 增,删,改 功能14 * sql为操作语句 , bindArgs为操作传递参数15 * **/

16 publicboolean updateSQLite(String sql , Object [] bindArgs){17 boolean isSuccess = false;18 try{19 sqLiteDatabase.execSQL( sql , bindArgs );20 isSuccess = true;21 }catch(Exception e){22 e.printStackTrace();23 }finally{24 if (sqLiteDatabase!=null){25 sqLiteDatabase.close();26 }27 Log.i("TAG:","数据插入数据库中状态:" +isSuccess);28 }29 returnisSuccess;30 }31

32 /**33 * rawQuery()方法可以执行select语句34 * 实现查询功能35 * sql为操作语句 , bindArgs为操作传递参数36 * **/

37 public ArrayList>querySQLite(String sql , String [] bindArgs){38 ArrayList> list = new ArrayList>();39

40 /**Cursor是结果集游标,使用Cursou.moveToNext()方法可以从当前行移动到下一行**/

41 Cursor cursor =sqLiteDatabase.rawQuery(sql , bindArgs);42 int clos_len = cursor.getColumnCount(); //获取数据所有列数

43

44 Log.i("TAG:","querySQLite()方法中获得总列数clos_len:" +clos_len);45

46 boolean isfals =cursor.moveToNext();47 Log.i("TAG:","isfals值为:" +isfals);48

49 while(cursor.moveToNext()) { //循环表格中的每一行

50 Log.i("TAG:","进入到while循环中");51

52 HashMap map = new HashMap<>();53 for(int i = 0;i

54 String clos_name = cursor.getColumnName(i); //从给定的索引i返回列名

55 String clos_value = cursor.getString(cursor.getColumnIndex(clos_name));//返回指定的名称,没有就返回-1

56 if(clos_value==null){57 clos_value = "";58 }59

60 Log.i("TAG:","while循环下面的for循环拿到的数据clos_value为:"

61 +cursor.getString(cursor.getColumnIndex(clos_name)));62

63 map.put(clos_name , clos_value);64 }65 list.add(map);66 }67 returnlist;68 }69 }

SQLFunction.java:

1 public classSQLFunction {2

3 staticDBHelper helper;4

5

6 public static voidinitTable(Context context){7 helper = newDBHelper(context);8 helper.getReadableDatabase();9 }10

11 /**【插入数据】**/

12 public static voidinsert(Context context , Object [] data){13

14 Log.i("TAG:","插入数据到数据库表:person中:"+data.toString());15

16 DBManager sqlManager = newDBManager(context);17 helper = newDBHelper(context);18 helper.getWritableDatabase();19 String sql = "insert into person ( name , info ) values ( ? , ?)";20 Object [] bindArgs =data;21 sqlManager.updateSQLite( sql , bindArgs );22 }23

24

25 /**【模糊查询】**/

26 public static ArrayList>query(Context context,String where1 ,String where2){27 DBManager sqlManager = newDBManager(context);28 ArrayList> list = new ArrayList<>();29 String sql = "select * from person where name like ? and info like ?";30 if(where1 == null){31 list = sqlManager.querySQLite(sql,new String[] {"%","%"});32 }else{33 where1 = "%" + where1 + "%";34 where2 = "%" + where2 + "%";35 list = sqlManager.querySQLite(sql,newString [] { where1 , where2 } );36 }37

38 Log.i("TAG:","查询完毕,返回数据:" +list.size());39

40 returnlist;41 }42

43 /**【删除数据】**/

44 public static voiddelete(Context context , Object[] data){45 DBManager sqlmanager = newDBManager(context);46 String sql = "delete from person where _id = ?";47 sqlmanager.updateSQLite(sql , data);48 }49

50 /**【更新数据】**/

51 public static voidupdate(Context context , Object[]data){52 helper = newDBHelper(context);53 helper.getReadableDatabase();54 DBManager sqlManager = newDBManager(context);55 String sql = "update person set name=? , info=? where _id=?";56 sqlManager.updateSQLite(sql,data);57 }58

59 }

我这里的数据都是用Log.i();方式输出,布局文件简单加载个button按钮:

1

3 xmlns:app="http://schemas.android.com/apk/res-auto"

4 xmlns:tools="http://schemas.android.com/tools"

5 android:layout_width="match_parent"

6 android:layout_height="wrap_content"

7 android:orientation="vertical"

8 android:layout_gravity="center"

9 android:gravity="center"

10 tools:context="com.hs.example.exampleapplication.MainActivity">

11

12

14 android:layout_height="wrap_content"

15 android:orientation="horizontal"

16 android:gravity="center">

17

18

20 android:layout_width="0dp"

21 android:layout_weight="1"

22 android:layout_height="match_parent"

23 android:text="数据库操作"/>

24

25

26

MainActivity.java:

1 public classMainActivity extends AppCompatActivity implements View.OnClickListener{2 Button btn_sql;3

4 @Override5 protected voidonCreate(Bundle savedInstanceState) {6 super.onCreate(savedInstanceState);7 setContentView(R.layout.activity_main);8

9 /**【初始化数据库】**/

10 SQLFunction.initTable(MainActivity.this);11

12 /**【动态申请sdCard读写权限】**/

13 //DocumentTool.verifyStoragePermissions(MainActivity.this);

14

15 btn_sql = this.findViewById(R.id.btn_sql);16 btn_sql.setOnClickListener(this);17

18 }19

20 public voidonClick(View view) {21 int id =view.getId();22 switch(id){23 caseR.id.btn_sql:24 DB_i_u_d_s();25 break;26 }27 }28

29 /**【操作数据库的方法】**/

30 private voidDB_i_u_d_s(){31 SQLFunction function = newSQLFunction();32

33 /**34 Log.i("TAG:","插入数据!");35 Object[] data = {"root","123456"};36 function.insert(MainActivity.this,data);37 */

38

39 /**40 * Log.i("TAG:","通过id来修改数据!");41 *String name = "sale";42 *String info = "TestSale";43 *int _id = 7;44 *Object[]data = {name,info,_id};45 *function.update(MainActivity.this,data);46 **/

47

48 /**49 * Log.i("TAG:","通过id来删除数据!");50 *int d_id = 2;51 *Object[] did = {d_id};52 *function.delete(MainActivity.this,did);53 **/

54 Log.i("TAG:","查询数据!");55 String where1 = null;56 String where2 = null;57 ArrayList> list = new ArrayList<>();58 list = function.query(MainActivity.this,where1,where2);59 if(list!=null){60 for(int i = 0 ; i

执行效果:

eb4d0c0f2a9dcbf799d05814d50a3fff.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值