Android开发——数据存储(四)SQLite数据库存储
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("列名"))
的方法来读取,以免出现下标越界异常。。。!!!