Android开发——SQLite数据库(二)android studio创建数据库,进行插入、删除、更新、查询操作

运行效果:

本文对数据库的建立、更新,数据的插入、更新、查询、删除,及事务的处理进行示例讲解。

代码里有注释帮助理解。

实现代码:

activity_main.xml

<?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.administrator.dbexcise.MainActivity">

    <Button
        android:id="@+id/bt1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Create DB"
        android:textAllCaps="false"
        android:onClick="testCreateDB"/>

    <Button
        android:id="@+id/bt2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Insert Date"
        android:textAllCaps="false"
        android:onClick="testInsertDate"/>

    <Button
        android:id="@+id/bt3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Delete Date"
        android:textAllCaps="false"
        android:onClick="testDeleteDate"/>

    <Button
        android:id="@+id/bt4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Update Date"
        android:textAllCaps="false"
        android:onClick="testUpdateDate"/>

    <Button
        android:id="@+id/bt5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Query Date"
        android:textAllCaps="false"
        android:onClick="testQueryDate"/>

    <Button
        android:id="@+id/bt6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Handle affair"
        android:textAllCaps="false"
        android:onClick="testHandleAffair"/>
</LinearLayout>

DBHelper

package com.example.administrator.dbexcise.database;

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

/**
 * Created by Administrator on 2019/6/19.
 */

public class DBHelper extends SQLiteOpenHelper {

    public DBHelper(Context context, int version) {
        //上下文,数据库文件名,null,版本号
        super(context, "person.db", null, version);
    }

    /**
     * 什么时候调用?
     *      当数据库文件创建时调用
     * 在此方法中做什么?
     *      建表,初始化数据
     * @param sqLiteDatabase 是操作数据库的对象
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        Log.e("TAG", "onCreate: " );

        String sql = "create table person (_id integer primary key autoincrement,name varchar,age int)";
        sqLiteDatabase.execSQL(sql);
    }

    /**
     * 当传入的版本号大于当前数据库的版本号时调用
     * 用于更新数据库
     * @param sqLiteDatabase
     * @param i
     * @param i1
     */
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        Log.d("TAG", "onUpgrade: ");
    }
}

MainActivity

package com.example.administrator.dbexcise;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.administrator.dbexcise.database.DBHelper;

public class MainActivity extends AppCompatActivity {

    Button button, button2, button3, button4, button5, button6;

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

        button = (Button) findViewById(R.id.bt1);
        button2 = (Button) findViewById(R.id.bt2);
        button3 = (Button) findViewById(R.id.bt3);
        button4 = (Button) findViewById(R.id.bt4);
        button5 = (Button) findViewById(R.id.bt5);
        button6 = (Button) findViewById(R.id.bt6);
    }

    /**
     * 创建库
     *
     * @param view
     */
    public void testCreateDB(View view) {
        DBHelper dbHelper = new DBHelper(this, 1);
        //获取连接
        SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();

        Toast.makeText(this, "创建数据库", Toast.LENGTH_SHORT).show();
    }

    /**
     * 插入数据
     *
     * @param view
     */
    public void testInsertDate(View view) {
        DBHelper dbHelper = new DBHelper(this,2);
        //1.得到连接
        SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();

        //2.执行insert
        ContentValues values = new ContentValues();
        values.put("name","Tom");
        values.put("age",21);
        //返回插入的id
        /**
         * 第一个参数:表名
         * 第二个参数:null
         * 第三个参数:传入的HashMap值
         */
        long id = sqLiteDatabase.insert("person",null,values);

        //3.关闭连接
        sqLiteDatabase.close();

        //4.提示
        Toast.makeText(this,"id= "+id,Toast.LENGTH_SHORT).show();
    }

    /**
     * 删除数据
     *
     * @param view
     */
    public void testDeleteDate(View view) {
        DBHelper dbHelper = new DBHelper(this,2);
        //1.得到连接
        SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();

        //2.执行delete
        String where = "name = ?";
        String[] value = new String[]{ "Tom" };
        //返回删除的数量
        /**
         * 第一个参数:表名
         * 第二个参数:删除的where后的语句
         * 第三个参数:? 所代表的值
         */
        int deleteCount = sqLiteDatabase.delete("person",where,value);

        //3.关闭连接
        sqLiteDatabase.close();

        //4.提示
        Toast.makeText(this,"deleteCount = "+deleteCount,Toast.LENGTH_SHORT).show();
    }

    /**
     * 更新数据
     *
     * @param view
     */
    public void testUpdateDate(View view) {
        DBHelper dbHelper = new DBHelper(this,2);
        //1.得到连接
        SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();

        //2.执行update  update person set name = "Jack",age = 20 where _id = 6

        /**
         * 第一个参数:表名
         * 第二个参数:更新的value
         * 第三个参数:where 后的语句
         * 第四个参数:? 所代表的值
         */
        ContentValues values = new ContentValues();
        values.put("name","Jack");
        values.put("age",20);
        int updateCount = sqLiteDatabase.update("person",values,"_id = 6",null);

        //3.关闭连接
        sqLiteDatabase.close();

        //4.提示
        Toast.makeText(this,"updateCount = "+updateCount,Toast.LENGTH_SHORT).show();
    }

    /**
     * 查询数据
     *
     * @param view
     */
    public void testQueryDate(View view) {
        DBHelper dbHelper = new DBHelper(this,2);
        //1.得到连接
        SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();

        //2.执行query select * from person
        Cursor cursor =  sqLiteDatabase.query("person",null,null,null,null,null,null);
        //得到cursor查询到的总记录数
        int count = cursor.getCount();

        while(cursor.moveToNext()){
            // id
            int id = cursor.getInt(0);

            // name
            String name = cursor.getString(1);

            // age
            int age = cursor.getInt(cursor.getColumnIndex("age"));
        }

        //3.关闭连接
        cursor.close();
        sqLiteDatabase.close();

        //4.提示
        Toast.makeText(this,"count = "+count,Toast.LENGTH_SHORT).show();
    }

    /**
     * 事务处理
     *
     * 一个功能中对数据库进行多个操作,要就都成功要就都失败
     * 事务处理三步骤:
     * 1.   开启事务(获取连接后)
     * 2.   设置事务成功(在全部正常执行完后)
     * 3.   结束事务(finally中进行)
     *
     * @param view
     */
    public void testHandleAffair(View view) {
        SQLiteDatabase sqLiteDatabase = null;
        try {
            DBHelper dbHelper = new DBHelper(this,2);
            //1.得到连接
            sqLiteDatabase = dbHelper.getReadableDatabase();

            //1. 开启事务(获取连接后)
            sqLiteDatabase.beginTransaction();

            //2.执行update  update person set age = 20 where _id = 6
            ContentValues values = new ContentValues();
            values.put("age",20);
            int updateCount = sqLiteDatabase.update("person",values,"_id = 6",null);

            boolean flag = true;
            if(flag) {
                throw new RuntimeException("出异常啦!!");
            }

            //执行update  update person set age = 21 where _id = 7
            values.put("age",21);
            int updateCount2 = sqLiteDatabase.update("person",values,"_id = 7",null);

            //2.设置事务成功(在全部正常执行完后)
            sqLiteDatabase.setTransactionSuccessful();
        }catch (Exception e) {
            Toast.makeText(this,"出异常啦!!!",Toast.LENGTH_SHORT).show();
        }finally {
            if (sqLiteDatabase!=null) {
                //3.结束事务(finally中进行)
                sqLiteDatabase.endTransaction();
                //3.关闭连接
                sqLiteDatabase.close();
            }
        }
    }
}

注意:new一个数据库对象后,一定要获取连接再进行操作。

 

链接:https://pan.baidu.com/s/1TwNX_V0pI-yPSBFqJpm9DA 


提取码:hnz2

  • 23
    点赞
  • 194
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 35
    评论
下面是在 Android Studio 中创建和更新 SQLite 数据库及表的实验操作过程: 1. 创建数据库Android Studio 中,首先需要创建一个继承自 SQLiteOpenHelper 的类。这个类用于创建和管理数据库和表,可以在其中重写 onCreate() 和 onUpgrade() 方法。 ``` public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "myDatabase"; private static final int DATABASE_VERSION = 1; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String createTableQuery = "CREATE TABLE myTable (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT NOT NULL, " + "age INTEGER NOT NULL" + ")"; db.execSQL(createTableQuery); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String dropTableQuery = "DROP TABLE IF EXISTS myTable"; db.execSQL(dropTableQuery); onCreate(db); } } ``` 在 onCreate() 方法中,我们创建了一个名为 myTable 的表,包含三个字段:_id、name 和 age。其中,_id 是主键,自增长;name 和 age 分别是文本和整数类型。 2. 插入数据 创建完数据库和表之后,我们可以在应用中插入数据。 ``` MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("age", 20); db.insert("myTable", null, values); values.clear(); values.put("name", "李四"); values.put("age", 25); db.insert("myTable", null, values); dbHelper.close(); ``` 首先,我们创建了一个 MyDatabaseHelper 实例,并调用其 getWritableDatabase() 方法获取一个可写的数据库对象。然后,我们使用 ContentValues 对象插入两条数据到 myTable 表中。最后,记得关闭数据库。 3. 查询数据 查询数据可以使用 SQLiteDatabase 的 query() 方法。例如,我们可以查询年龄小于等于 25 的所有人的姓名和年龄: ``` MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getReadableDatabase(); String[] projection = {"name", "age"}; String selection = "age <= ?"; String[] selectionArgs = {"25"}; String sortOrder = "age DESC"; Cursor cursor = db.query("myTable", projection, selection, selectionArgs, null, null, sortOrder); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndexOrThrow("name")); int age = cursor.getInt(cursor.getColumnIndexOrThrow("age")); Log.d(TAG, "Name: " + name + ", Age: " + age); } cursor.close(); dbHelper.close(); ``` 首先,我们创建了一个 MyDatabaseHelper 实例,并调用其 getReadableDatabase() 方法获取一个可读的数据库对象。然后,我们使用 query() 方法查询 myTable 表中年龄小于等于 25 的所有人的姓名和年龄,并按年龄降序排列。最后,我们使用 Cursor 对象遍历查询结果,并输出每个人的姓名和年龄。 4. 更新数据 更新数据可以使用 SQLiteDatabase 的 update() 方法。例如,我们可以将年龄为 20 的人的姓名改为“王五”: ``` MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "王五"); String whereClause = "age = ?"; String[] whereArgs = {"20"}; db.update("myTable", values, whereClause, whereArgs); dbHelper.close(); ``` 首先,我们创建了一个 MyDatabaseHelper 实例,并调用其 getWritableDatabase() 方法获取一个可写的数据库对象。然后,我们创建一个 ContentValues 对象,将要更新的数据放入其中。接着,我们使用 update() 方法将年龄为 20 的人的姓名改为“王五”。最后,记得关闭数据库。 5. 删除数据 删除数据可以使用 SQLiteDatabasedelete() 方法。例如,我们可以删除年龄小于等于 25 的所有人的数据: ``` MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); String whereClause = "age <= ?"; String[] whereArgs = {"25"}; db.delete("myTable", whereClause, whereArgs); dbHelper.close(); ``` 首先,我们创建了一个 MyDatabaseHelper 实例,并调用其 getWritableDatabase() 方法获取一个可写的数据库对象。然后,我们使用 delete() 方法删除年龄小于等于 25 的所有人的数据。最后,记得关闭数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值