Android开发——数据存储(四)SQLite数据库存储

版权声明:如转载请表明出处 https://blog.csdn.net/weixin_42247720/article/details/89530845

Android开发——数据存储(四)数据库存储

运行结果图

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

代码示例

数据库的java类

package com.example.administrator.exercise.DataBase;

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

/**
 * Created by Administrator on 2019/4/25.
 */
    
public class DBOpenHelper extends SQLiteOpenHelper {    //集成SQLiteOpenHelper类
    
    //定义创建数据表的sql语句
    final String Create_Table_SQL="create table tb_dict (_id integer primary key autoincrement,word,translate)";
    
    //把第三个工厂设为null
    public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, null, version);
    }
    
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(Create_Table_SQL);//创建单词的数据表
    }

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

    }
}

单词本的java类

package com.example.administrator.exercise.DataBase;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.example.administrator.exercise.R;
import com.example.administrator.exercise.util.ToastUtil;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class DictionaryActivity extends AppCompatActivity {

    private EditText editText_word,editText_translate;
    private Button button_save,button_display;
    private TextView textView,textView_translate;
    DBOpenHelper dbOpenHelper;//声明DBOpenHelper对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dictionary);
        editText_word = (EditText) findViewById(R.id.dty_et_word);  //连接单词输入框
        editText_translate = (EditText) findViewById(R.id.dty_et_translate);    //连接翻译输入框
        textView = (TextView) findViewById(R.id.dty_tv_word);   //连接单词显示框
        textView_translate = (TextView) findViewById(R.id.dty_tv_translate);    //连接翻译显示框
        button_save = (Button) findViewById(R.id.dty_btn_save);             //连接保存按钮
        button_display = (Button) findViewById(R.id.dty_btn_display);        //连接显示按钮
        //实例化DBOpenHelper对象,用来创建数据库及表,参数:本页面,表名,null,版本号
        dbOpenHelper = new DBOpenHelper(DictionaryActivity.this,"db_dict",null,1);

        //点击保存单词和翻译
        button_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String word = editText_word.getText().toString();//获取填写生词
                String translate = editText_translate.getText().toString(); //获取填写解释
                if(word==""||translate=="")
                {
                    ToastUtil.showMsg(DictionaryActivity.this,"填写单词或翻译为空"); //自定义的Toast类
                }
                else {
                    writeData(dbOpenHelper.getReadableDatabase(), word, translate);   //调用存储方法
                    ToastUtil.showMsg(DictionaryActivity.this, "保存成功");
                }
            }
        });

        //点击显示单词和翻译
        button_display.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText(readData().word);  //调用读取方法
                textView_translate.setText(readData().translate);
            }
        });
    }

    //存储数据
    private void writeData(SQLiteDatabase sqLiteDatabase,String word,String translate){
        ContentValues values = new ContentValues();
        values.put("word",word);
        values.put("translate",translate);
        sqLiteDatabase.insert("tb_dict",null,values);//保存功能
    }

    //读取数据
    private Word readData(){
        Word word = new Word();    //实例化单词对象
        String key = editText_word.getText().toString();//获取要查询的单词
        //参数:查询的表,查询的列(不指定为全部),查询的条件,占位值的值
        Cursor cursor = dbOpenHelper.getReadableDatabase().query("tb_dict",null,"word=?",new String[]{key},null,null,null);
        while(cursor.moveToNext()){
            //利用getColumnIndex:String 来获取列的下标,再根据下标获取cursor的值
            word.word = cursor.getString(cursor.getColumnIndex("word"));
            word.translate = cursor.getString(cursor.getColumnIndex("translate"));
        }
        if (word == null) {    //如果查不到单词
            ToastUtil.showMsg(DictionaryActivity.this, "很遗憾,没有相关记录!");
        }
        return word;    //返回单词
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(dbOpenHelper != null){
            dbOpenHelper.close();//关闭数据库连接
        }
    }

    //定义单词类
    private class Word{
        String word = null;
        String translate = null;
    }
}

单词本的布局文件

<?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_shared_preferences"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入单词"
        android:id="@+id/dty_et_word"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入翻译"
        android:id="@+id/dty_et_translate"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="保存"
        android:textSize="16sp"
        android:id="@+id/dty_btn_save"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="显示"
        android:textSize="16sp"
        android:id="@+id/dty_btn_display"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/dty_tv_word"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/dty_tv_translate"/>
</LinearLayout>

存储位置

数据库文件会存放在 /data/data/<包名>/database/ 目录下。

使用步骤:

  • 建表
  • 实例化数据库对象
  • 利用insert一个value来写入数据
  • 利用cursor的get方法来查询数据

注意事项

cursor读取数据时,获取cursor的数据尽量使用cursor.getString(cursor.getColumnIndex("列名"))的方法来读取,以免出现下标越界异常。。。!!!

猜你喜欢

转载自blog.csdn.net/weixin_42247720/article/details/89530845