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

SQLite数据库使用方法详解

发布时间:2020-12-12 19:18:09 所属栏目:百科 来源:网络整理
导读:Android 提供了对SQLite数据库的完全支持。应用中的任何类(不包括应用外部的类)均可按名称访问您所创建的任何数据库。如果想让自己创建的数据库供外部应用使用,请使用 ContentProvider对外提供接口。SQLite 轻量级数据库使用方法如下: 欢迎关注微信公众

Android 提供了对SQLite数据库的完全支持。应用中的任何类(不包括应用外部的类)均可按名称访问您所创建的任何数据库。如果想让自己创建的数据库供外部应用使用,请使用 ContentProvider对外提供接口。SQLite 轻量级数据库使用方法如下:

欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息


微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。

通过本章学习,你将掌握以下知识点

1. 继承SQLiteOpenHelper 创建数据库,数据表
2. 插入数据库数据
3. 删除数据库数据
4. 查询数据库数据
5. 修改数据库数据
6. 数据库使用Demo

1. 继承SQLiteOpenHelper 创建数据库,数据表

  • 创建数据库表
  1. 语法
CREATE TABLE database_name.table_name(
   column1 datatype  PRIMARY KEY(one or more columns),column2 datatype,column3 datatype,.....
   columnN datatype,);
  1. 举例
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,NAME           TEXT    NOT NULL,AGE            INT     NOT NULL,ADDRESS        CHAR(50),SALARY         REAL
);

3.继承SQLiteDBHelper的创建数据库、数据表

public SQLiteDBHelper(Context context) {
        super(context,DB_NAME,null,DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        // SQLite 数据库中,字段一般不区分类型,但是主键除外,主键必须是整型
        String sql = "CREATE TABLE " + TABLE_NAME + "(" + _ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" + "," + NAME
                + " CHAR(10)," + NICK_NAME + " CHAR(10))";
        db.execSQL(sql);
    }

4.删除数据库表

DROP TABLE IF EXITS TABLE_NAME;

2. 插入数据库数据

  • 插入数据方法一
INSERT INTO TABLE_NAME [(column1,column2,column3,...columnN)] VALUES (value1,value2,value3,...valueN);
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',32,'California',20000.00 );
  • 插入数据方法二
INSERT INTO TABLE_NAME VALUES (value1,246)">INSERT INTO COMPANY VALUES (7,'James',24,'Houston',10000.00 );
  • Android 封装insert()插入数据方法三

1.语法

insert(String table,String nullColumnHack,ContentValues values)

2.举例

private SQLiteDatabase db;
db.insert(SQLiteDBHelper.TABLE_NAME,values);

3. 删除数据库数据

  • 删除数据库数据方法一
DELETE FROM table_name WHERE [condition];
DELETE FROM COMPANY WHERE ID = 7;
  • 2.Android封装删除数据库数据方法二
delete(String table,String whereClause,String[] whereArgs)

举例

private SQLiteDatabase db;
db.delete(SQLiteDBHelper.TABLE_NAME,"name=?",new String[] { "Jack" });

4. 查询数据库数据

  • 查询数据库方法一
SELECT column1,columnN FROM table_name;

查询表中所有数据的方法

SELECT * FROM table_name;
//1.查询指定的列 SELECT ID,SALARY FROM COMPANY; // 2.查询表中所有内容 SELECT * FROM COMPANY;
  • Android 封装查询数据库方法二
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)
private SQLiteDatabase db; Cursor cursor = db.query(SQLiteDBHelper.TABLE_NAME,null);

5. 修改数据库数据

  • 修改数据库方法一
UPDATE table_name SET column1 = value1,column2 = value2....,columnN = valueN WHERE [condition];
UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
  • Android update 封装修改数据库方法二
update(String table,ContentValues values,246)">db.update(SQLiteDBHelper.TABLE_NAME,values,"nickname=?",new String[] { "J" });

6. 数据库使用Demo

  • 实现效果

数据库增删改查
  • 创建数据库
public class SQLiteDBHelper extends SQLiteOpenHelper {
    public static String DB_NAME = "person.db";
    // version 必须大于1
    public static int DB_VERSION = 1;
    public static String TABLE_NAME = "person";
    public static String _ID = "_id";
    public static String NAME = "name";
    public  static String NICK_NAME = "nickname";

    /**
     * @param context
     * @param name
     * @param factory
     * @param version
     */
    public SQLiteDBHelper(Context context,String name,CursorFactory factory,int version) {
        super(context,name,factory,version);
        // TODO Auto-generated constructor stub
    }

    public SQLiteDBHelper(Context context) {
        super(context," + NICK_NAME + " CHAR(10))";
        db.execSQL(sql);
    }

    // 数据库升级的处理方法,
    @Override
    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {

        if (newVersion > oldVersion) {
            // 删除老的数据表,创建新表
            String dropsql = "DROP TABLE IF EXITS " +
                    TABLE_NAME;
            db.execSQL(dropsql);
            onCreate(db);
        }
    }

}
  • 数据库 增、删、改、查方法
public class SQLiteMethods extends Activity {
    private SQLiteDatabase db;
    private ListView listView;
    private SimpleCursorAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sqlite);
        SQLiteDBHelper helper = new SQLiteDBHelper(this);
        /****
         * 需要调用以下两个方法之一,数据库和表才能真正创建出来
         * 正常情况下,getReadableDatabase()和getWritableDatabase()得到结果是一样的
         * 非正常情况下,比如明确要求以只读的方式打开数据库,或者磁盘满了,此时getReadableDatabase得到的是只读的数据库
         * **/
        db = helper.getWritableDatabase();
        listView = (ListView) findViewById(R.id.lv);

        adapter = new SimpleCursorAdapter(this,R.layout.listview_sqlite_tv,new String[] { "name","nickname" },new int[] {
                        R.id.name,R.id.nickname },SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        listView.setAdapter(adapter);

    }

    //
    public void InsertSQL(View view) {

        InstertDB();
        QueryDB();
    }

    /**
     * 插入数据处理方法
     */
    private void InstertDB() {
        ContentValues values = new ContentValues();
        values.put("name","Jack");
        values.put("nickname","J");

        // 返回值:最近插入的那一行的行号
        long result = db.insert(SQLiteDBHelper.TABLE_NAME,values);
        if (result > 0) {
            Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_SHORT)
                    .show();
        } else {
            Toast.makeText(getApplicationContext(),"添加失败",Toast.LENGTH_SHORT)
                    .show();
        }
    }

    public void QuarySQL(View view) {

        QueryDB();
    }

    /**
     * 查询数据处理方法
     */
    private void QueryDB() {
        // Select * from person where name= ?
        // db.rawQuery(s)
        // cursor 游标--》 结果集合
        // 当使用SimpleCusorAdapter 时候,cursor 这个记过里面 必须包含“_id”,这个字段
        // Cursor cursor = db.query(SQLiteDBHelper.TABLE_NAME,// new String[] { "Jack" },null);
        Cursor cursor = db.query(SQLiteDBHelper.TABLE_NAME,null);

        while (cursor.moveToNext()) {

            String name = cursor.getString(cursor.getColumnIndex("name"));
            String nickname = cursor.getString(cursor
                    .getColumnIndex("nickname"));
        }
        // 将一个新的cusor跟原有的custor 交换
        adapter.swapCursor(cursor);
        adapter.notifyDataSetChanged();
    }

    public void DeleteSQL(View view) {

        DeleteDb();
        QueryDB();

    }

    /**
     * 删除数据
     */
    private void DeleteDb() {
        int result = db.delete(SQLiteDBHelper.TABLE_NAME,new String[] { "Jack" });
        if (result > 0) {
            Toast.makeText(getApplicationContext(),"删除成功","无Jack",Toast.LENGTH_SHORT)
                    .show();
        }
    }

    public void ModifySQL(View view) {

        UpdateDb();
        QueryDB();

    }

    /**
     * 修改数据
     */
    private void UpdateDb() {
        // update person set name="Kitty" where nickname="J"
        ContentValues values = new ContentValues();
        values.put("name","Lucy");

        int result = db.update(SQLiteDBHelper.TABLE_NAME,new String[] { "J" });

        if (result > 0) {
            QueryDB();
        }
    }
}
  • 布局如下
<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
 >

    <Button
        android:id="@+id/insertdata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="InsertSQL"
        android:text="增加数据" />

    <Button
        android:id="@+id/deletedata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="DeleteSQL"
        android:text="删除数据" />

    <Button
        android:id="@+id/quarydata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="QuarySQL"
        android:text="查询数据" />

    <Button
        android:id="@+id/modifydata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="ModifySQL"
        android:text="修改数据" />

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

</LinearLayout>
  • ListView item布局如下
<?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:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="10dp" >

    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="name" />

    <TextView
        android:id="@+id/nickname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="nickname" />

</LinearLayout>

至此Android SQLite 数据库的使用方法已经基本结束。

?欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息


我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。


点击阅读原文,获取更多福利


(编辑:李大同)

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

    推荐文章
      热点阅读