• SQLite基础学习


    SQLite是一款轻量级数据库,集成于android中,以下从分享一下自己学习的。

    在查阅资料时有一些好的说明就直接用了:
    主要的curd语句

    以下SQL语句获取5条记录,跳过前面3条记录
    select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
    插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘atm’,3)
    更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘atm‘ where id=1
    删除语句:delete from 表名 where 条件子句。

    如:delete from person where id=1

    getWritableDatabase()和getReadableDatabase()的差别

    getWritableDatabase()getReadableDatabase()方法都能够获取一个用于操作数据库的SQLiteDatabase实例。

    getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就仅仅能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,假设数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以仅仅读方式打开数据库。

    注意:getWritableDatabase()getReadableDatabase的差别是当数据库写满时,调用前者会报错,调用后者不会。所以假设不是更新数据库的话,最好调用后者来获得数据库连接。

    Cursor的简单说明

    无论你怎样运行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你能够:
    通过使用 getCount() 方法得到结果集中有多少记录。
    通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历全部记录;
    通过 getColumnNames() 得到字段名;
    通过 getColumnIndex() 转换成字段号;
    通过 getString()getInt() 等方法得到给定字段当前记录的值;
    通过 requery() 方法又一次运行查询得到游标;
    通过 close() 方法释放游标资源;
    
    提示:数据库中读取到的数据在cursor中。在写入到对象中时。要先推断cursor中是否有数据,否则当查询结果为空集时会报错。
    
    推断cursor为空时。不能够用cursor==null,及时cursor中没有数据,cursor也不为空。

    须要用cursor.getCount()函数来推断是否为空,结果为0时为空。

    具体的代码:

    首先:怎样创建数据库
    创建数据库和表。
    数据库的默认保存路径为:“data/data/com.example.SqliteTest/databases/”
    com.example.SqliteTest就是自己的project

    public class DBOpenHelp extends SQLiteOpenHelper {
        public DBOpenHelp(Context context) {
    
            super(context, "User_atm.db", null, 1);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
    StringBuilder strSql = new StringBuilder();
    strSql.append("CREATE TABLE IF NOT EXISTS user_info (");
    strSql.append("user_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,");
    strSql.append("user_age   INT NOT NULL,");
    strSql.append("user_name  VARCHAR(50)  NOT NULL)");
            db.execSQL(strSql.toString());
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            //数据库改动是在这里操作。比方添加表字段
        }
    

    以下是增删改查以及事务的代码:

    public class ServiceTest {
    
        //增删改查
    
        //得到数据库
    
        DBOpenHelp dbOpenHelp;
    
        public ServiceTest(Context context) {
            super();
            this.dbOpenHelp = new DBOpenHelp(context);
        }
    
        //启动事务
        public void TransactionTest(){
            SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
            db.beginTransaction();
            try{
                db.execSQL("update User_info set user_age=user_age+1 where user_id=10");
                db.execSQL("update User_info set user_age=user_age-1 where user_id=11");
                db.setTransactionSuccessful();
            }finally{
                db.endTransaction();}
        }
    
    
        //增
        public void save(UserInfo userinfo){
            SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
            db.execSQL("insert into user_info(user_id, user_age, user_name) values(?,?,?

    )", new Object[]{userinfo.getUser_id(),userinfo.getUser_age(), userinfo.getUser_name()}); } //删 public void delete(Integer user_id){ SQLiteDatabase db = dbOpenHelp.getWritableDatabase(); db.execSQL("delete from user_info where user_id=?

    ", new Object[]{user_id}); } //改动 public void update(UserInfo userinfo){ SQLiteDatabase db = dbOpenHelp.getWritableDatabase(); db.execSQL("update user_info set user_age=?,user_name=? where user_id=?", new Object[]{userinfo.getUser_age(), userinfo.getUser_name(),userinfo.getUser_id()}); } //查询 public UserInfo find(Integer id){ SQLiteDatabase db = dbOpenHelp.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from user_info where user_id=?

    ", new String[]{id.toString()}); if(cursor.moveToFirst()){ int user_id = cursor.getInt(cursor.getColumnIndex("user_id")); int user_age = cursor.getInt(cursor.getColumnIndex("user_age")); String user_name = cursor.getString(cursor.getColumnIndex("user_name")); return new UserInfo(user_id, user_name, user_age); } cursor.close(); return null; } }

    可视化的数据库管理工具–SQLite Expert Professional
    自己能够在网上下载。
    下载后打开软件,进入主界面:
    这里写图片描写叙述

    上图中红色框部分为导入和删除数据库。

    这里写图片描写叙述

    上图中为新建表。

    还有非常多功能,能够在改动完后,从新导入到设备中(最開始到处的路径)。

    通过cmd查看数据库
    打开制定路径下的数据库
    这里写图片描写叙述

    简单的数据库操作。查询一张表。

    这里写图片描写叙述

    SQLite触发器:android:SQLite–触发器具体解释

  • 相关阅读:
    Vue中调用另一个组件中自定义事件
    docker下安装MySQL
    docker下安装Redis
    .NET Core简介
    Object(Asp.NET核心机制内置对象汇总)
    .NET MVC5简介(六)HttpHandler
    .NET MVC5简介(五)管道处理模型IHttpModule
    hibernate有什么作用
    hibernate编写时没有提示
    触发器insert
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8371020.html
Copyright © 2020-2023  润新知