安卓 Day 26 :数据库Two

一.基础知识

  • Android Studio 使用自带SQLite 数据库、SQLIiteOpenHelper帮助类
  • SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。
  • Android提供了一个SQLiteOpenHelper帮助类,用于对数据库进行创建和升级
  • SQLiteOpenHelper是一个抽象类,使用时需要创建自己的类去继承它。
  • SQLiteOpenHelper有两个抽象方法onCreate()和onUpgrade(),必须在自己的类中重写这两个方法,然后分别在这两个方法中实现创建和升级数据库的逻辑。

二.用实训案例来了解

1.创建安卓项目

在这里插入图片描述

2.创建MyDatabaseHelper继承数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 代码提示
package net.yuanjing.database_test;

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

import androidx.annotation.Nullable;

public class MyDatabaseHelper extends SQLiteOpenHelper {
    public static final String CREAT_Student = "create table Student ("
            +"id integer primary key autoincrement,"
            +"name text,"
            +"number text)";
    private Context mContext;
    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREAT_Student);
        Toast.makeText(mContext,"Creat succeeded",Toast.LENGTH_LONG);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

3.主布局资源文件中建立一个按钮,点击按钮就会新建数据库

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/creat_database"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Creat database"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</LinearLayout>

4.主界面类MainActivity.java

package net.yuanjing.database_test;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    //新建MyDatabaseHelper的对象
    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过构造函数里面的参数调用它,私有的构造方法,name及时数据库的名字,factory是工厂的,这个不用管直接写null就行了,version是版本信息
        dbHelper = new MyDatabaseHelper(this, "StudentStore.db", null, 1);

        //获取按钮
        Button creatDatabase = (Button) findViewById(R.id.create_database);
        creatDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbHelper.getWritableDatabase();//可以创建或打开一个现有的数据库,如果数据库本身就存在的话,那么就会去打开它,
                // 但是我们这里还没有StudentStore这个数据库那么我们调用的时候就会去新建一个StudentStore的数据库,
                // 创建的同时,它会调用MyDatabaseHelper中的onCreate方法,也就会新建一个表,这里数据库和表就创建成功了
            }
        });
    }
}

5.建立一个Button按钮,向数据库插入信息

<Button
        android:id="@+id/add_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add data" />
  • 在主界面里面调用方法,添加插入信息
Button addData = (Button) findViewById(R.id.add_data);
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();//调用方法,就可以添加数据
                ContentValues values = new ContentValues();
                //插入第一条数据
                values.put("name", "ZhangSan");
                values.put("number", "123456");
                db.insert("Student", null, values);//插入到Student表中,插入value的值
                //将第一条数据clear一下,在插入第二条数据之前
                values.clear();
                //插入第二条数据
                values.put("name", "XiaoMing");
                values.put("number", "234561");
                db.insert("Student", null, values);
            }
        });
  • 查询我们的数据库,把它打印到我们的日志里面
  • 用到query()方法参数
    在这里插入图片描述

6.定义一个查询Button按钮

<Button
        android:id="@+id/query_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Query data" />
  • 在主界面类里调用方法
Button queryButton = (Button) findViewById(R.id.query_data);
        queryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                Cursor cursor = db.query("Student",null,null,null,null,null,null);
                if (cursor.moveToFirst()) {
                    do {
                        @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));
                        @SuppressLint("Range") String number = cursor.getString(cursor.getColumnIndex("number"));
                        Log.d("MainActivity", "name" + name);
                        Log.d("MainActivity", "number" + number);
                    } while (cursor.moveToNext());
                }
                cursor.close();
            }
        });

6.主界面类MainActivity.java的总代码提示

package net.yuanjing.database_test;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {
    //新建MyDatabaseHelper的对象
    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过构造函数里面的参数调用它,私有的构造方法,name及时数据库的名字,factory是工厂的,这个不用管直接写null就行了,version是版本信息
        dbHelper = new MyDatabaseHelper(this, "StudentStore.db", null, 1);

        //获取按钮
        Button creatDatabase = (Button) findViewById(R.id.create_database);
        creatDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbHelper.getWritableDatabase();//可以创建或打开一个现有的数据库,如果数据库本身就存在的话,那么就会去打开它,
                // 但是我们这里还没有StudentStore这个数据库那么我们调用的时候就会去新建一个StudentStore的数据库,
                // 创建的同时,它会调用MyDatabaseHelper中的onCreate方法,也就会新建一个表,这里数据库和表就创建成功了
            }
        });
        Button addData = (Button) findViewById(R.id.add_data);
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();//调用方法,就可以添加数据
                ContentValues values = new ContentValues();
                //插入第一条数据
                values.put("name", "ZhangSan");
                values.put("number", "123456");
                db.insert("Student", null, values);//插入到Student表中,插入value的值
                //将第一条数据clear一下,在插入第二条数据之前
                values.clear();
                //插入第二条数据
                values.put("name", "XiaoMing");
                values.put("number", "234561");
                db.insert("Student", null, values);
            }
        });
        Button queryButton = (Button) findViewById(R.id.query_data);
        queryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                Cursor cursor = db.query("Student",null,null,null,null,null,null);
                if (cursor.moveToFirst()) {
                    do {
                        @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));
                        @SuppressLint("Range") String number = cursor.getString(cursor.getColumnIndex("number"));
                        Log.d("MainActivity", "name" + name);
                        Log.d("MainActivity", "number" + number);
                    } while (cursor.moveToNext());
                }
                cursor.close();
            }
        });
    }
}

7.布局资源文件的总代码提示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:gravity="center"
    android:orientation="vertical">

    <Button
        android:id="@+id/create_database"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Create database" />

    <Button
        android:id="@+id/add_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add data" />

    <Button
        android:id="@+id/query_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Query data" />

</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值