欢迎投稿

今日深度:

Android数据库一:sqlite语句增删改查,androidsqlite

Android数据库一:sqlite语句增删改查,androidsqlite


SQLite数据类型

一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:
NULL: 这个值为空值;
VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000;
CHAR(n):长度固定为n的字串,n不能超过 254;
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8;
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号;
TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE);
BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改变格式;
DATA :包含了 年份、月份、日期;
TIME: 包含了 小时、分钟、秒;

SqliteOpenHelper的用法:
该类的方法:
1、getReadableDatabase() 创建或者打开一个可读写的数据库,如果出现问题(磁盘满等),则打开一个只读的数据库。
2、getWritableDatabase() 获得一个可读写的数据库。如果磁盘满则会抛异常。
3、onCreate(SQLiteDatabase db) 只有第一次创建这个数据库的时候调用。一般在这个方法中创建数据的相应表。
4、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调用。这个方法很少使用
5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发生改变的时候调用,一般如果需要修改表结构就写在这里.
//db.execSQL(“alert 表名 add 列名列数据类型”);
6、close() 关闭打开的所有数据库对象

使用步骤:

创建SQLiteOpenHelper类的子类MySQLiteOpenHelper 类,实现SQLiteOpenHelper类中的抽象方法onCreate()和onUpgrade();
调用 MySQLiteOpenHelper 对象的getWritableDatabase 或 getReadableDatabase方法,获得SQLiteDatabase 对象;
创建表。
调用SQLiteDatabase 对象的execSQL()方法,执行 update,insert,delete操作;调用rawQuery()方法执行select查询操作;
如果执行的是查询操作,则对返回的Cursor进一步处理。

案例

SQLiteOpenHelper

public class MyDBHelper extends SQLiteOpenHelper {

    public MyDBHelper(Context context) {
        super(context, "my.db", null, 1);
    }

    /**
     * 第一次创建数据库的时候回调该方法,创建表以及表数据的初始化
     *
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table person(_id integer primary key autoincrement,name text)";
        db.execSQL(sql);

        //可以给表初始化一些数据
        //db.execSQL("insert into person(name) values('小米')");
    }

    /**
     * 数据库升级的时候回调该方法
     *
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //给表添加一个字段
        //db.execSQL("alter table person add age integer");
    }

    /**
     * 数据库打开的时候回调该方法
     *
     * @param db
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
    }
}

Dao类,增删改查方法

/**
 * 使用SQL语句增删改查
 * Created by xiaoyehai on 2017/12/30/030.
 */

public class DataBaseDao {

    private final MyDBHelper mDbHelper;

    public DataBaseDao(Context context) {
        mDbHelper = new MyDBHelper(context);
    }

    /**
     * 插入
     *
     * @param dataBean
     */
    public void insert(DataBean dataBean) {
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        if (db.isOpen()) {
            db.execSQL("insert into person(name) values(" + "'" + dataBean.getName() + "'" + ")");
            db.close();
        }
    }

    /**
     * 更新
     *
     * @param id
     * @param dataBean
     */
    public void update(int id, DataBean dataBean) {
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        if (db.isOpen()) {
            db.execSQL("update person set name=? where _id=?", new Object[]{dataBean.getName(), id});
            db.close();
        }
    }

    /**
     * 根据id删除
     */
    public void delete(int id) {
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        if (db.isOpen()) {
            db.execSQL("delete from person where _id=?", new Object[]{id});
            db.close();
        }
    }

    /**
     * 删除所有
     */
    public void deleteAll() {
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        if (db.isOpen()) {
            db.execSQL("delete from person");
            db.close();
        }
    }


    /**
     * 查询所有
     */
    public List<DataBean> queryAll() {
        List<DataBean> list = new ArrayList<>();
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        if (db.isOpen()) {
            Cursor cursor = db.rawQuery("select * from person", null);

            while (cursor.moveToNext()) {
                //int id = cursor.getInt(0);
                int id = cursor.getInt(cursor.getColumnIndex("_id"));
                String name = cursor.getString(cursor.getColumnIndex("name"));
                DataBean dataBean = new DataBean(name);
                list.add(dataBean);
            }
            cursor.close();
            db.close();
        }
        return list;
    }

    /**
     * 根据id查询
     * 有问题
     */
    public List<DataBean> query(int id) {
        List<DataBean> list = new ArrayList<>();
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        if (db.isOpen()) {
            Cursor cursor = db.rawQuery("select * from person where _id=?", new String[]{id + ""});

            while (cursor.moveToNext()) {
                //int id = cursor.getInt(0);
                int _id = cursor.getInt(cursor.getColumnIndex("_id"));
                String name = cursor.getString(cursor.getColumnIndex("name"));
                DataBean dataBean = new DataBean(name);
                list.add(dataBean);
            }
            cursor.close();
            db.close();
        }
        return list;
    }

Activity代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_add;
    private Button btn_delete;
    private Button btn_update;
    private Button btn_query;
    private ListView mListView;
    private DataBaseDao mDataBaseDao;

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

        initView();

        mDataBaseDao = new DataBaseDao(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_add: //添加
                addData();
                break;
            case R.id.btn_delete: //删除
                deleteData();
                break;
            case R.id.btn_update: //更新
                updateData();
                break;
            case R.id.btn_query: //查询
                queryData();
                break;
        }
    }

    private void queryData() {
        List<DataBean> list = mDataBaseDao.queryAll(); //查询全部
        //List<DataBean> list = mDataBaseDao.query(5); //根据id查询
        MyAdapter myAdapter = new MyAdapter(this, list, R.layout.item);
        mListView.setAdapter(myAdapter);
    }

    private void updateData() {
        DataBean dataBean = new DataBean("肖叶海更新");
        mDataBaseDao.update(6, dataBean);
    }

    private void deleteData() {
        //mDataBaseDao.delete(5); //根据id删除
        mDataBaseDao.deleteAll(); //删除所有
    }

    private void addData() {
        for (int i = 0; i < 10; i++) {
            DataBean dataBean = new DataBean("肖叶海" + i);
            mDataBaseDao.insert(dataBean);
        }
    }


    private void initView() {
        btn_add = (Button) findViewById(R.id.btn_add);
        btn_delete = (Button) findViewById(R.id.btn_delete);
        btn_update = (Button) findViewById(R.id.btn_update);
        btn_query = (Button) findViewById(R.id.btn_query);
        mListView = (ListView) findViewById(R.id.listview);

        btn_add.setOnClickListener(this);
        btn_delete.setOnClickListener(this);
        btn_update.setOnClickListener(this);
        btn_query.setOnClickListener(this);
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.originaldb.MainActivity">

    <Button
        android:id="@+id/btn_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加"/>

    <Button
        android:id="@+id/btn_delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除"/>

    <Button
        android:id="@+id/btn_update"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="更新"/>

    <Button
        android:id="@+id/btn_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查询"/>

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>

实体类

public class DataBean {

    private String name;

    public DataBean(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

www.htsjk.Com true http://www.htsjk.com/SQLite/32742.html NewsArticle Android数据库一:sqlite语句增删改查,androidsqlite SQLite数据类型 一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数...
相关文章
    暂无相关文章
评论暂时关闭