• Android 连接SQLite


     

    Android的页面显示的数据主要是从数据库中获取数据的,android开发中使用的是SQLite数据库。

    SQLite的优点:

    1. 轻量级

      使用 SQLite 只需要带一个动态库,就可以享受它的全部功能, 而且那个动态库的尺寸想当小。
    2. 独立性

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

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

      SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统 也是能够运行,比如:Android。
    5. 多语言接口

      SQLite 数据库支持多语言编程接口。
    6. 安全性

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

     在Android中连接SQLite需要先创建一个类,并且这个类extends SQLiteOpenHelper,代码如下:

      

    package com.example.sql;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class MySQLDatabase extends SQLiteOpenHelper {
        private static final String db_name = "myDatabse";//自定义的数据库名;
        private static final int version =1;//版本号
        public MySQLDatabase(Context context) {
            super(context, db_name, null, version);
            
        }
    //该方法会自动调用,首先系统会检查该程序中是否存在数据库名为‘myDatabase’的数据库,如果存在则不会执行该方法,如果不存在则会执行该方法。
        @Override
        public void onCreate(SQLiteDatabase arg0) {
            String  sql ="create table wx_user(" +
                    "id int primary key," +
                    "name varchar(30)," +
                    "tou varchar(20)," +
                    "content varchar(50)," +
                    "dateTime varchar(30)" +
                    ")";
            arg0.execSQL(sql);
            
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
            
        }
        
    }

    SQLiteOpenHelper是SQLiteDatabase的一个帮助类, 用来管理数据库的创建和版本的更新。 一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。 常用的方法有:

    onCreate(SQLiteDatabase db)
    创建数据库时调用

     

    onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
    版本更新时调用

     

    getReadableDatabase()
    创建或打开一个只读数据库

     

    getWritableDatabase()
    创建或打开一个读写数据库

    这里创建了数据库类,接下来是往数据库中插入数据;

    //实例化刚才上面我们创建的那个类    
    MySQLDatabase mySQLDatabase = new MySQLDatabase(MainActivity.this);
    /*在通过getReadableDatabase()方法
        或者通过getWritableDatabase()
    获得SQLDatabse类的对象;通过SQLDatabase类的对象来对数据进行操作;*/
            SQLiteDatabase sqlDatabase =  mySQLDatabase.getReadableDatabase();
            

    SQLDatabase类的常用方法:

    • (long) insert(String table,String nullColumnHack,ContentValues values)

    • (int) delete(String table,String whereClause,String[] whereArgs)

      删除数据行的便捷方法
    • (int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法

    • (void) close()

      关闭数据库
    • (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

      查询指定的数据表返回一个带游标的数据集
    • (Cursor) rawQuery(String sql, String[] selectionArgs)

      运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)
    • (void) execSQL(String sql)//这个是执行SQL语句(sql字符串可以是select,delete,或者insert,update中的任意语句)

    //往数据库中插入数据的代码,在这里我使用的是execSQL(sql);
    for(int i=0;i<20;i++){
                String sql = "insert into wx_user(id,name,tou,content,dateTime) values("+i+",'张校花"+i+"','aa','你今天会被打','11月19日')";
                sqlDatabase.execSQL(sql);
    }

    往数据库中参入数据之后,我们再将数据库中的数据取出来看看;我们需要先创建一个实体类;

    package com.example.entiy;
    
    public class unserInFo {
        
        private int id;
        private String name;
        private String dateTime;
        private String tou;
        private String content;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String content) {
            this.content = content;
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getDateTime() {
            return datetime;
        }
        public void setDateTime(String dateTime) {
            this.dateTime= dateTime;
        }
        public String getTou() {
            return tou;
        }
        public void setTou(String tou) {
            this.tou = tou;
        }
        
        @Override
        public String toString() {
            return "unserInFo [id="+id+,"name=" + name + ", dataTime=" + dataTime+ ", tou="
                    + tou+ "]";
        }
        public unserInFo() {
            super();
            // TODO Auto-generated constructor stub
        }
        
    }

    获取数据

    //定义一个集合用来存放所有的结果
    List<unserInFo> user = new ArrayList<unserInFo>();
    //通过游标来获取表wx_user的信息,
    Cursor c=sqlDatabase.query("wx_user", null, null, null, null, null, null);
            //先判断是否有第一条数据(ic.moveToFirst()将游标移到第一条数据,如果没有第一条数据则返回false,否则返回true)
           if(c.moveToFirst()){
                    //通过getCount()来决定循环的次数getCount()是游标的总数量。
            for (int i = 0; i<c.getCount();i++) {
                unserInFo uif = new unserInFo();
                
                //将游标移动到下一条数据
                c.moveToNext();
                uif.setId(c.getInt(c.getColumnIndex("id")));
                uif.setLastdate(c.getString(c.getColumnIndex("dateTime")));
                uif.setName(c.getString(c.getColumnIndex("name")));
                uif.setZhao(c.getString(c.getColumnIndex("tou")));
                uif.setContent(c.getString(c.getColumnIndex("content")));
                user.add(uif);
                
            }
    }    
    //最后数据库中获取到的数据就全部存放到user集合中了,我们只需要遍历user就能显示数据了。
  • 相关阅读:
    Burnside引理与Polya定理 学习笔记
    Codeforces 438E. The Child and Binary Tree 多项式,FFT
    Berlekamp_Massey 算法 (BM算法) 学习笔记
    UOJ#335. 【清华集训2017】生成树计数 多项式,FFT,下降幂,分治
    UOJ#73. 【WC2015】未来程序 提交答案题
    UOJ#206. 【APIO2016】Gap 构造 交互题
    虚拟机配置JAVA_HOME
    创建虚拟机
    月份、季度、周
    maven多模块下使用JUnit进行单元测试
  • 原文地址:https://www.cnblogs.com/xzmr/p/6113592.html
Copyright © 2020-2023  润新知