ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Android开发之sqlite数据库的练习

2020-02-06 23:57:23  阅读:279  来源: 互联网

标签:sqlite name 数据库 db sql Android newVersion public


一、目标

  通过employee员工类来做例子练习sqlite数据库的创建更新以及增删改查,并使用sqlite expert可视化软件来检查数据库的操作。

二、具体步骤

  (1)创建sqlite数据库

    第一步:建立一个Help类继承sqliteOpenHelper类来创建数据库,实现SQLiteOpenHelper的接口,并添加一个构造方法。父类构造方法需要有4个参数,数据库的名字和数据库的等级另外创建一个常量类类保存,并且这种的名字一般都全部大写,Ctrl+Shift+U可以快捷全部换成大写

/**
     *
     * @ context   上下文
     * @ name      数据库名称
     * @ factory   游标工厂
     * @ version   版本号
     */
    public DataBaseHelper( Context context) {
        super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
    }

    其中有两个成员方法,onCreate方法会在数据库刚刚被创建的时候调用,onUpGrade方法会在数据库更新的时候被调用(newVersion>oldVersion)

@Override
    public void onCreate(SQLiteDatabase db) {

        //创建数据库,第一次创建时才会调用
        //创建字段
        //Log.d(TAG,"创建数据库....");
        //sql:  create table table_name(id integer,name varchar,age integer,salary integer);
        String sql="create table "+Constants.TABLE_NAME+"(id integer,name varchar,age integer,salary integer)";
        db.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //更新数据库 只有newVersion高于oldVersion时才会调用
        //newVersion=oldVersion时不会调用
        //newVersion<oldVersion时会报错
        //
        Log.d(TAG,"升级数据库....");
        //
        String  sql;
        switch (oldVersion){
            case 1:
                sql ="alter table "+Constants.TABLE_NAME+" add phone integer";
                db.execSQL(sql);
                break;
            case  2:
                break;
        }
    }

    第二步:主函数中实例SQLiteOpenHelper类,并且调用getWriteDataBase()方法,数据库就可以创建了

     DataBaseHelper helper = new DataBaseHelper(this);
        helper.getWritableDatabase();

 

创建成功的表结构:(与onCreative里面的表结构一样)

 

创建成功的文件结构:

 

   (2)数据库升级

    数据库升级需要调用onUpGrade方法,用newVersion和oldVersion来比较判断需要添加那些内容或者进行那些操作,newVersion需要在Constants类里面更改DATABASE_VERSION才可以

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //更新数据库 只有newVersion高于oldVersion时才会调用
        //newVersion=oldVersion时不会调用
        //newVersion<oldVersion时会报错
        //
        Log.d(TAG,"升级数据库....");
        //
        String  sql;
        switch (oldVersion){
            case 1:
                sql ="alter table "+Constants.TABLE_NAME+" add phone integer";
                db.execSQL(sql);
                break;
            case  2:
                break;
        }
    }

DATABASE_VERSION升级到2之后

 

 

   (3)Dao层操作(SQL语句操作)

 

package com.example.databasedemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建数据库
        DatabaseHelper helper =new DatabaseHelper(this);
        helper.getWritableDatabase();

        Dao dao =new Dao(getApplicationContext());
//        dao.insert();
//        dao.update();
//        dao.query();
        dao.delete();
    }
}
MainActivity

 

package com.example.databasedemo;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

/**
 * 这个类用于对数据库的增删改查
 */
public class Dao {

    private final DatabaseHelper mHelper;
    private static final String TAG="Dao";
    public Dao(Context context){

        //创建数据库
        //Ctrl+Alt+F,之后加回车,创建成员变量
        mHelper = new DatabaseHelper(context);

    }

    public  void insert(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
        String sql="insert into "+Constants.TABLE_NAME+"(_id,name,age,salary,phone) values(?,?,?,?,?)";
        Object []obj={1,"haohao",20,10000,1234567890};
        db.execSQL(sql,obj);
        db.close();
    }

    public  void delete(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
        String sql="delete from "+Constants.TABLE_NAME+" where name = ?";
        Object []obj={"haohao"};
        db.execSQL(sql,obj);
        db.close();
    }

    public  void update(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
        String sql="update "+Constants.TABLE_NAME+" set salary= ? where name = ?";
        Object []obj={20000,"haohao"};
        db.execSQL(sql,obj);
        db.close();
    }

    public  void query(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
        String sql="select * from "+Constants.TABLE_NAME+" where name = ?";
        String []obj={"haohao"};
        Cursor cursor = db.rawQuery(sql, obj);
        while (cursor.moveToNext()){
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String age = cursor.getString(cursor.getColumnIndex("age"));
            Log.d(TAG,"名字:"+name+"年龄:"+age);
        }
        cursor.close();
        db.close();
    }
}
Dao

三、心得体会

总的来说今天的收获还是不小的,sqlite的操作语句和mysql的类似所以不难理解,但是创建数据库确实方便很多,有已经封装好的类可以直接调用创建,非常方便。另外今天我学到的最有用的东西我认为是常量类的创建,把常量全部放到一个类里面,既方便了之后的迭代,又方便了统一的调用更改。

 

标签:sqlite,name,数据库,db,sql,Android,newVersion,public
来源: https://www.cnblogs.com/suanai/p/12271577.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有