zoukankan      html  css  js  c++  java
  • Android-----创建SQLite数据库

    简单介绍一下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 class DBHelper extends SQLiteOpenHelper {
     2 
     3     private static final String DATABASE_NAME = "test.db";  //数据库名字
     4     private static final int DATABASE_VERSION = 1 ;         //数据库版本号
     5 
     6     public DBHelper(Context context){
     7         super(context,DATABASE_NAME,null,DATABASE_VERSION);
     8     }
     9 
    10 
    11     /**
    12      * 创建数据库表:person
    13      * _id为主键,自增
    14      * **/
    15     @Override
    16     public void onCreate(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     @Override
    23     public void onUpgrade(SQLiteDatabase sqLiteDatabase,int oldVersion,int newVersion) {
    24 
    25     }
    26 
    27     @Override
    28     public void onOpen(SQLiteDatabase sqLiteDatabase){
    29         super.onOpen(sqLiteDatabase);
    30     }
    31 }

    DBManager.java:

     1 public class DBManager {
     2 
     3     DBHelper helper;
     4     SQLiteDatabase sqLiteDatabase;
     5 
     6     public DBManager(Context context){
     7         helper = new DBHelper(context);
     8         sqLiteDatabase = helper.getReadableDatabase();
     9     }
    10 
    11     /**
    12      * execSQL()方法可以执行insert,update,delete语句
    13      * 实现对数据库的 增,删,改 功能
    14      * sql为操作语句 , bindArgs为操作传递参数
    15      * **/
    16     public boolean 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         return isSuccess;
    30     }
    31 
    32     /**
    33      * rawQuery()方法可以执行select语句
    34      * 实现查询功能
    35      * sql为操作语句 , bindArgs为操作传递参数
    36      * **/
    37     public ArrayList<HashMap<String , String>> querySQLite(String sql , String [] bindArgs){
    38         ArrayList<HashMap<String ,String>> list = new ArrayList<HashMap<String, String>>();
    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<String , String> map = new HashMap<>();
    53             for(int i = 0;i<clos_len;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         return list;
    68     }
    69 }

    SQLFunction.java:

     1 public class SQLFunction {
     2 
     3     static DBHelper helper;
     4 
     5 
     6     public static void initTable(Context context){
     7         helper = new DBHelper(context);
     8         helper.getReadableDatabase();
     9     }
    10 
    11     /**【插入数据】**/
    12     public static void insert(Context context , Object [] data){
    13 
    14         Log.i("TAG:","插入数据到数据库表:person中:"+data.toString());
    15 
    16         DBManager sqlManager = new DBManager(context);
    17         helper = new DBHelper(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<HashMap<String ,String>>query(Context context,String where1 ,String where2){
    27         DBManager sqlManager = new DBManager(context);
    28         ArrayList<HashMap<String ,String>> 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,new String [] { where1 , where2 } );
    36         }
    37 
    38         Log.i("TAG:","查询完毕,返回数据:" + list.size());
    39 
    40         return list;
    41     }
    42 
    43     /**【删除数据】**/
    44     public static void delete(Context context , Object[] data){
    45         DBManager sqlmanager = new DBManager(context);
    46         String sql = "delete from person where _id =  ? ";
    47         sqlmanager.updateSQLite(sql , data);
    48     }
    49 
    50     /**【更新数据】**/
    51     public static void update(Context context , Object[]data){
    52         helper = new DBHelper(context);
    53         helper.getReadableDatabase();
    54         DBManager sqlManager = new DBManager(context);
    55         String sql = "update person set name=? , info=? where _id=?";
    56         sqlManager.updateSQLite(sql,data);
    57     }
    58 
    59 }

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

     1 <LinearLayout
     2     xmlns:android="http://schemas.android.com/apk/res/android"
     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     <LinearLayout
    13         android:layout_width="match_parent"
    14         android:layout_height="wrap_content"
    15         android:orientation="horizontal"
    16         android:gravity="center">
    17 
    18         <Button
    19             android:id="@+id/btn_sql"
    20             android:layout_width="0dp"
    21             android:layout_weight="1"
    22             android:layout_height="match_parent"
    23             android:text="数据库操作"/>
    24     </LinearLayout>
    25 
    26 </LinearLayout>

    MainActivity.java:

     1 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
     2     Button btn_sql;
     3 
     4     @Override
     5     protected void onCreate(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 void onClick(View view) {
    21         int id = view.getId();
    22         switch (id){
    23             case R.id.btn_sql:
    24                 DB_i_u_d_s();
    25                 break;
    26         }
    27     }
    28     
    29     /**【操作数据库的方法】**/
    30     private void DB_i_u_d_s(){
    31         SQLFunction function = new SQLFunction();
    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<HashMap<String ,String>> list = new ArrayList<>();
    58         list = function.query(MainActivity.this,where1,where2);
    59         if(list!=null){
    60             for(int i = 0 ; i<list.size();i++){
    61                 Log.i("TAG:","从数据库中拿到的数据 _ID为:" +list.get(i).get("_id"));
    62                 Log.i("TAG:","从数据库中拿到的数据name为:" + list.get(i).get("name"));
    63                 Log.i("TAG:","从数据库中拿到的数据info为:" + list.get(i).get("info"));
    64             }
    65         }else {
    66             Log.i("TAG:","从数据库中没有拿到数据!");
    67         }
    68     }
    69 }

    执行效果:

  • 相关阅读:
    dubbo配置文件解读(1)
    Java同步与异步
    java垃圾回收
    Java中的String,StringBuilder,StringBuffer三者的区别
    ThreadLocal终极篇
    TCP/IP协议与HTTP协议(一)
    TCP/IP协议与HTTP协议(二)
    springcloud之断路器(Hystrix)
    解决mysql不能通过'/tmp/mysql.sock 连接的问题
    jQuery.extend 函数使用详解
  • 原文地址:https://www.cnblogs.com/xiobai/p/10831999.html
Copyright © 2011-2022 走看看