SQLite是一款轻量级的关系型数据库
运行速度非常快,通常只需要几百kB的内存就足够了
为了让我们能够更加方便地管理数据库,专门提供了SQLiteOpenHelper 类 通过这个类,我们可以进行数据库的创建和升级。
SQLiteOpenHelper是一个抽象类 所以我们要创建一个类 来继承它,
在SQLiteOpenHelper中 ,有两个抽象方法。分别是Oncreate() 和OnUpgrade(),
必须重写这些方法,去实现创建和升级数据库的逻辑。
getReadableDatabase()
getWritableDatabase()
这个两个都可以创建或者打开一个现有的数据库,唯一不同的是 当磁盘满的时候:
getReadableDatabase() 返回的对象是只读的方式。
getWritableDatabase() 出现异常
integet: 整型
real : 浮点型
blob : 二进制
text: 文本类型
primary key 将id 列设为主键,并用autoincrement关键字表示id列是自增长的。
新建一个类 继承SQLiteOpenHelper 代码如下:
package com.example.myapplication15;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
public class MySQLiteHelper extends SQLiteOpenHelper {
private String createSQL = "create table student(" +
"id integer primary key autoincrement not null ," +
"age integer ," +
"name text not null ," +
"score real )";
private Context context;
public MySQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(createSQL);
Toast.makeText(context,"成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
我们把建表语句定义成了一个字符串常量,然后在onCreate()方法中调用execSQL()方法执行这条建表语句,并弹出一个Tost提示创建成功。
创建成功后 ,我进行添加内容,然后,进行查询:
代码演示:
package com.example.myapplication15;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private MySQLiteHelper myHelper;
private EditText ed;
private Button charu;
private Button chaxun;
private Button qqqq;
private SQLiteDatabase sqldb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binID();
myHelper = new MySQLiteHelper(this, "student.db", null, 2);
}
private void binID() {
ed = findViewById(R.id.ed);
qqqq=findViewById(R.id.mina_qqqq);
charu = findViewById(R.id.button_charu);
chaxun = findViewById(R.id.button_chaxun);
charu.setOnClickListener(this);
chaxun.setOnClickListener(this);
qqqq.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.mina_qqqq:
myHelper.getWritableDatabase();
break;
case R.id.button_charu:
//获得SQLiteDatabase对象,读写模式
sqldb = myHelper.getWritableDatabase();
//ContentValues类似HashMap,区别是ContentValues只能存简单数据类型,不能存对象
ContentValues values = new ContentValues();
values.put("name", ed.getText().toString());
sqldb.insert("student", null, values);
break;
case R.id.button_chaxun:
SQLiteDatabase sqldb = myHelper.getReadableDatabase();
//创建游标
Cursor mcursor = sqldb.query("student",null,null,null, null, null, null);
//游标置顶
if (mcursor.moveToFirst()) {
//遍历
do {
String name = mcursor.getString(mcursor.getColumnIndex("name"));
Log.e("MainActivity", "onClick: " + name);
} while (mcursor.moveToNext());
}
mcursor.close();
break;
}}
}
xml:
<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"
android:orientation="vertical"
tools:context="com.example.myapplication15.MainActivity">
<Button
android:text="创建"
android:id="@+id/mina_qqqq"
android:layout_width="match_parent"
android:layout_height="50dp" />
<EditText
android:id="@+id/ed"
android:layout_width="match_parent"
android:layout_height="50dp" />
<Button
android:layout_marginTop="25dp"
android:text="插入"
android:id="@+id/button_charu"
android:layout_width="match_parent"
android:layout_height="50dp" />
<Button
android:id="@+id/button_chaxun"
android:layout_marginTop="25dp"
android:text="查询"
android:layout_width="match_parent"
android:layout_height="50dp" />
LinearLayout>
`效果图“
可以看到当我们输入“44444” 点击插入后,点击查询。会发现 控制台打印了结果。
除添加和查询之外。,我们还可以进行数据库的 修改和删除:
case R.id.button_xiugai:
String name=ed.getText().toString();
String newname=ed_xiugai.getText().toString();
SQLiteDatabase sqLiteDatabase4=myHelper.getWritableDatabase();
ContentValues values1=new ContentValues();
values1.put("name",newname);
sqLiteDatabase4.update("student",values1,"name=? and id>?",new String[]{name,"5"});
break;
case R.id.button_shanchu:
SQLiteDatabase sqLiteDatabase3=myHelper.getReadableDatabase();
String name1=ed.getText().toString();
sqLiteDatabase3.delete("student","name=?",new String[]{name1});
break;