话不多说,先上代码
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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="没有记录"></TextView>
<Button
android:onClick="AddClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/Addstr"></Button>
<Button
android:onClick="updatedatabaseClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/UpdateDatabase"></Button>
<Button
android:onClick="DelClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/DelStr"></Button>
<Button
android:onClick="UpdataClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/UpdateStr"></Button>
<Button
android:onClick="QueryClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/QueryStr"></Button>
</LinearLayout>
strings.xml
<resources>
<string name="app_name">class0422</string>
<string name="Addstr">插入数据</string>
<string name="Succstr">成功了</string>
<string name="Failstr">失败了</string>
<string name="UpdateDatabase">升级数据库</string>
<string name="DelStr">删除记录</string>
<string name="UpdateStr">修改记录</string>
<string name="QueryStr">查询记录</string>
</resources>
MainActivity.java(数据库的建立和增删改查操作)
package com.example.class0422;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import org.w3c.dom.Text;
import java.sql.SQLData;
public class MainActivity extends AppCompatActivity {
MyDBHelper myDBHelper = null;
SQLiteDatabase db = null;
ContentValues contentValues= null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDBHelper = new MyDBHelper(this);
//初始化并打开数据库
db = myDBHelper.getWritableDatabase();
//关闭数据库
db.close();
}
public void AddClick(View view){
//初始化数据库
db = myDBHelper.getWritableDatabase();
try{
//第一种方法:用SQL字符串拼接
// String Sqlstr = "insert into " + databasepublicstr.tableName+
// "(stunum,stuname,stuage) values('001','刘备','21')";
// db.execSQL(Sqlstr);
//第二种方法:用数组形式添加
// String SqlStr = "insert into "+ databasepublicstr.tableName +"(stunum,stuname,stuage) values(?,?,?)";
// String [] strArray = {"002","关羽","20"};
// db.execSQL(SqlStr,strArray);
//第三种方法:采用内置的方法
contentValues = new ContentValues();
contentValues.put("stunum","003");
contentValues.put("stuname","张飞");
contentValues.put("stuage","19");
db.insert(databasepublicstr.tableName,null,contentValues);
Toast.makeText(this,R.string.Succstr,Toast.LENGTH_SHORT).show();
}catch (Exception e){
e.printStackTrace();
Toast.makeText(this,R.string.Failstr,Toast.LENGTH_SHORT).show();
}
finally {
db.close();
}
}
public void updatedatabaseClick(View view){
db = myDBHelper.getWritableDatabase();
try{
//数据库的更新操作 myDBHelper.onUpgrade(db,databasepublicstr.DB_Version,databasepublicstr.New_Version);
Toast.makeText(this,R.string.Succstr,Toast.LENGTH_SHORT).show();
}catch (Exception e){
e.printStackTrace();
Toast.makeText(this,R.string.Failstr,Toast.LENGTH_SHORT).show();
}
finally {
db.close();
}
}
public void DelClick(View view){
db = myDBHelper.getWritableDatabase();
try {
// //方法1:拼接字符串
// String SqlStr = "delete from "+databasepublicstr.tableName+" where stunum='004'";
// db.execSQL(SqlStr);
// //方法2:数组形式
// String SqlStr = "delete from "+databasepublicstr.tableName+" where stunum=?";
// String [] strings={"004"};
// db.execSQL(SqlStr,strings);
//方法3:ANDROID内置的del
db.delete(databasepublicstr.tableName,"stunum=?",new String[]{"004"});
Toast.makeText(this,R.string.Succstr,Toast.LENGTH_SHORT).show();
}catch (Exception e){
e.printStackTrace();
Toast.makeText(this,R.string.Failstr,Toast.LENGTH_SHORT).show();
}
finally {
db.close();
}
}
//数据库的修改操作
public void UpdataClick(View view){
db = myDBHelper.getWritableDatabase();
try {
//方法一:拼接字符串
// String sqlstr = "update "+databasepublicstr.tableName+" set stuname='马超' where stunum = '004'";
// db.execSQL(sqlstr);
//方法2:数组形式
// String sqlstr = "update "+databasepublicstr.tableName+
// " set stuname='?' where stunum = '?'";
// String [] strings={"赵云","004"};
// db.execSQL(sqlstr,strings);
//方法3:内置修改
contentValues = new ContentValues();
contentValues.put("stuname","马超");
contentValues.put("stunum","002");
int i = db.update(databasepublicstr.tableName,contentValues,"stunum=?",new String[]{"002"});
if(i>0){
Toast.makeText(this,R.string.Succstr,Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"这条记录不存在",Toast.LENGTH_SHORT).show();
}
}catch (Exception e){
e.printStackTrace();
Toast.makeText(this,R.string.Failstr,Toast.LENGTH_SHORT).show();
}
finally {
db.close();
}
}
TextView textView = null;
public void QueryClick(View view){
textView = findViewById(R.id.tv_query);
db = myDBHelper.getWritableDatabase();
try {
//方法1:采用Sql字符串
// String SqlStr="select * from stutable where stunum='?'";
// String [] strings = {"001"};
// Cursor cursor = db.rawQuery(SqlStr,strings);
String SqlStr="select * from stutable";
Cursor cursor = db.rawQuery(SqlStr,null);
String Constr = "";
while(cursor.moveToNext()){
Constr+="学号:"+cursor.getString(1)+"姓名:"+cursor.getString(2)+"年龄:"+cursor.getString(3)+":\n";
}
textView.setText(Constr);
}catch (Exception e){
e.printStackTrace();
}
finally {
db.close();
}
}
}
MyDBHelper.java(数据库的初始化和升级)
package com.example.class0422;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class MyDBHelper extends SQLiteOpenHelper {
public MyDBHelper(@Nullable Context context) {
super(context, databasepublicstr.DataBaseName, null, databasepublicstr.DB_Version);
}
//数据库初始化执行的函数
@Override
public void onCreate(SQLiteDatabase db) {
String SqlStr = "create table " + databasepublicstr.tableName+
" (stuid integer PRIMARY KEY autoincrement,stunum varchar(10) unique,stuname varchar(20),stuage integer)";
db.execSQL(SqlStr);
}
//数据库更新执行的函数
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// String SqlStr1 = "create table " + databasepublicstr.tableTeacher+
// " (teacherid integer PRIMARY KEY autoincrement,stunum varchar(10) unique,stuname varchar(20),stuage integer)";
// db.execSQL(SqlStr1);
String SqlStr2 = "create table " + databasepublicstr.tableFamily+
" (familyid integer PRIMARY KEY autoincrement,familynum varchar(10) unique,familyname varchar(20),familyage integer)";
db.execSQL(SqlStr2);
}
}
databasepublicstr.java(保存数据库和表的相关属性)
package com.example.class0422;
public class databasepublicstr {
public static String DataBaseName = "wl2database.db";
public static int DB_Version = 1;
public static int New_Version = 2;
public static String tableName = "StuTable";
public static String tableTeacher = "Teacher";
public static String tableFamily = "Family";
}
坑
1.创建数据库时,如果手机存储器中已经存在同名数据库(即使表内容不相同),将不再创建。
2.升级数据库时候,要注意数据库更改数据库的版本。
3.通过字符串拼接来操作数据库时,要注意关键字和内容之间的空格不能丢。