android数据库的创建

 

android数据库的创建

 

/**

 * 数据库的工具类

 * 一般:用单例模式

 * 把构造方法私有化 ,对外要提供一个方法 获取其他实例

 * @author apple

 *

 */

public class MySqliteOpenHelper extends SQLiteOpenHelper {

private static SQLiteOpenHelper mInstance;

/**

 *

 * @param context  上下文  打开或者创建数据库

 * @param name  数据库的名字  要以.db结尾

 * @param factory  游标工厂:创建游标对象

 * @param version 数据库的版本号  如果版本号不同  执行onUpgrade()方法:数据库的升级

 */

private MySqliteOpenHelper(Context context, String name,

CursorFactory factory, int version) {

super(context, name, factory, version);

}

//对外提供的方法

public static synchronized SQLiteOpenHelper getInstance(Context context){

if(mInstance == null){

mInstance = new MySqliteOpenHelper(context, "wuhan06.db", null, 1);

}

return mInstance;

}

/**

 * 创建数据库里面的表 或者对表里面的数据执行初始化

 * 创建一张表:person   字段:id(不标准) 最好是使用_id     唯一标示     主键   自增     

 *                        name   

 */

@Override

public void onCreate(SQLiteDatabase db) {

 String sql = "create table person(_id integer primary key autoincrement,name text)";

         db.execSQL(sql);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

创建表的语句

CREATE TABLE person (_id integer primary key autoincrement, name varchar(20))

package com.chengzis.day2_datastorage;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

/**
 * SqlitDatebase的工具类   单利模式:1.构造方法私有化,对外提供一个方法获取实例
 * 作用:打开或者创建数据库  管理数据库的版本
 */

public class MySqliteOpenHelper extends SQLiteOpenHelper {

    private static SQLiteOpenHelper mInstance;

    public static synchronized SQLiteOpenHelper getmInstace(Context context) {
        if (mInstance == null) {
            mInstance = new MySqliteOpenHelper(context, "itcast.db", null, 1);
        }
        return mInstance;
    }


    private MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //首次创建数据库时候创建,表的创建和表的初始化
    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建表:persons表  _id  主键  name
         String sql = "create table persons(_id integer primary key autoincrement ,name text)";
         db.execSQL(sql);


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }




}

 利用sql语句对数据库增删改查

SQLite可以解析大部分标准SQL语句,如:

查询语句:select * from表名where条件子句group by分组字句having ... order by排序子句

如:select * from person

        select * from person order by id desc

        select name from person group by name having count(*)>1

分页SQLmysql类似,下面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(‘传智’,3)

更新语句:update表名set字段名=where条件子句。如:update person set name=‘传智‘where_id=10

删除语句:delete from表名where条件子句。如:delete from person  where_id=10

 

package com.chengzis.day2_datastorage;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class SQliterActivity extends AppCompatActivity implements View.OnClickListener {


    private static final String TAG = "SQliterActivity";
    private SQLiteOpenHelper helper;
    private Button bt_inset;
    private Button bt_delete;
    private Button bt_update;
    private Button bt_query;
    private Button bt_sq;

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

        bt_sq = findViewById(R.id.bt_sq);
        bt_sq.setOnClickListener(this);

        bt_query = findViewById(R.id.bt_query);
        bt_query.setOnClickListener(this);

        bt_update = findViewById(R.id.bt_update);
        bt_update.setOnClickListener(this);

        bt_delete = findViewById(R.id.bt_delete);
        bt_delete.setOnClickListener(this);

        bt_inset = findViewById(R.id.bt_inset);
        bt_inset.setOnClickListener(this);


        //获取数据库的帮助类
        helper = MySqliteOpenHelper.getmInstace(this);
        helper.getReadableDatabase();  //问SQLiteOpenHelper要数据库  判断:数据库是否存在,如果存在就打开,否则就创建


//        //初始化的数据
//        helper.getWritableDatabase().execSQL("insert into persons(name) values('图图')");


    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_inset:
                //获取可写的数据库
                SQLiteDatabase db = helper.getWritableDatabase();
                //判断数据是否打开
                if (db.isOpen()) {
                    //执行数据库
                    db.execSQL("insert into persons(name) values('小王')");
                    //关闭数据库
                    db.close();

                }

                break;
            case R.id.bt_query:
                SQLiteDatabase db2 = helper.getReadableDatabase();
                if (db2.isOpen()) {
                    //查询获取游标
                    Cursor cursor = db2.rawQuery("select*from persons", null);
                    while (cursor.moveToNext()) {
                        //获取数据
                        //cursor.getColumnIndex("_id")  获取id在cursor 里面的下标
                        @SuppressLint("Range") int _id = cursor.getInt(cursor.getColumnIndex("_id"));
                        @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));
                        Log.i(TAG, "_id" + _id + "name" + name);

                    }
                    cursor.close();    //关闭游标
                    db2.close();
                }


                break;

            case R.id.bt_update:
                //获取可写的数据库
                SQLiteDatabase db3 = helper.getWritableDatabase();
                //判断数据是否打开
                if (db3.isOpen()) {
                    //执行数据库
                    db3.execSQL("update persons set name = ? where _id = ?",new Object[]{"小红",1});
                    //关闭数据库
                    db3.close();

                }

                break;

            case R.id.bt_delete:
                //获取可写的数据库
                SQLiteDatabase db4= helper.getWritableDatabase();
                //判断数据是否打开
                if (db4.isOpen()) {
                    //执行数据库
                    db4.execSQL("delete from persons where _id =?" ,new Object[]{1});
                    //关闭数据库
                    db4.close();

                }

                break;
        }
    }
}


版权声明:本文为tzztzz01原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。