加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite基础学习

发布时间:2020-12-12 19:40:55 所属栏目:百科 来源:网络整理
导读:SQLite是一款轻量级数据库,集成于android中,下面从分享一下自己学习的。 在查阅资料时有一些好的说明就直接用了: 基本的curd语句 下面SQL语句获取5条记录,跳过前面3条记录 select * from Account limit 5 offset 3 或者 select * from Account limit 3 ,

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就是自己的工程

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–触发器详解

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读