您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
26_数据库的另外一种增删改查的方法
发布时间:2021-02-14 20:29:46编辑:雪饮阅读()
数据表结构变更与命令行中查看数据表结构
这次在之前person数据表中新增一个字段age,新增的方式仍旧使用SQLiteOpenHelper构造中传递版本号结合onUpgrade方法来实现
则之前MyDBOpenHelper.java修改如:
package com.example.myapplication;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDBOpenHelper extends SQLiteOpenHelper {
public MyDBOpenHelper(Context context) {
super(context, "itheima.db", null, 3);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD age INTEGER ");
}
}
然后重新部署项目到设备中并再次点击“创建数据库”使得之前sqlite中person表中的字段更新
接下来可以在命令行中查看数据表结构
可以看到age字段已经添加上了
这里关键的查询数据表结构语句是pragma table_info([数据表名]);
另外一种增、删、改、查
其实这次重要修改的是PersonDao.java
package com.example.myapplication;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
public class PersonDao {
private static final String TAG = "PersonDao";
private MyDBOpenHelper dbOpenHelper;
// 在personDao被new出来的时候 就完成初始化
public PersonDao(Context context) {
dbOpenHelper = new MyDBOpenHelper(context);
}
//增删改查
/**
* 添加一条记录
*/
public void add(String name, int age) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
if (db.isOpen()) {
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
//参数1 表名 参数2 假如设置为name,则当values中name非法,则构造sql如:insert into person name values (NULL) ;
//参数3 所有要插入的键值对(字段=》值)
db.insert("person", null, values);
db.close();
}
}
/**
* 数据库的查询操作
*/
public boolean find(String name) {
boolean result = false;
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
if (db.isOpen()) {
//参数1 要查询的表名,参数2 要select出来的字段,若设置为null就相当于*
//参数3 查询条件(where) 参数4 查询条件的参数(预处理参数)
//参数5 分组 参数6 having字句可以让我们筛选分组之后的各种数据
//参数7 排序
Cursor cursor = db.query("person", null, "name=?",
new String[] { name }, null, null, null);
if (cursor.moveToFirst()) {
result = true;
}
cursor.close();
db.close();
}
return result;
}
/**
* 删除一条记录
*/
public void delete(String name) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
if (db.isOpen()) {
//表、条件、预处理参数值
db.delete("person", "name=?", new String[] { name });
db.close();
}
}
/**
* 数据库的更改操作
*/
public void update(String name, String newname, int newage) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
if (db.isOpen()) {
ContentValues values = new ContentValues();
values.put("name", newname);
values.put("age", newage);
//表、要更新的值(字段对应值的键值对)、条件、预处理参数值(条件的对应预处理参数值)
db.update("person", values, "name=?", new String[] { name });
db.close();
}
}
/**
* 查询所有信息
*/
public List<Person> findAll() {
List<Person> persons = null;
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
if (db.isOpen()) {
Cursor cursor = db.query("person", null, null, null, null, null,
null);
persons = new ArrayList<Person>();
while (cursor.moveToNext()) {
Person person = new Person();
String name = cursor.getString(cursor.getColumnIndex("name"));
person.setName(name);
int age = cursor.getInt(cursor.getColumnIndex("age"));
person.setAge(age);
persons.add(person);
}
cursor.close();
db.close();
}
return persons;
}
}
其次MainActivity.java在调用上面这个类的相关方法也需要修改调整下(兼容PersonDao.java中相关方法的变更后传参方式、以及新增了年龄的处理等)
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void send(View view) {
MyDBOpenHelper helper = new MyDBOpenHelper(this);
helper.getReadableDatabase();
}
public void send_add(View view) {
PersonDao dao = new PersonDao(this);
for(int i=0;i<100;i++){
dao.add("lisi"+i, i);
}
}
public void send_del(View view) {
PersonDao dao = new PersonDao(this);
dao.delete("lisi99");
}
public void send_update(View view) {
PersonDao dao = new PersonDao(this);
dao.update("lisi98", "wangwu",1);
}
public void send_find_all(View view) {
PersonDao dao = new PersonDao(this);
List<Person> persons = dao.findAll();
for(Person p:persons){
String row="name:"+p.getName()+" phone:"+p.getNumber()+" age:"+p.getAge();
Log.i("row",row);
}
}
public void send_find_item(View view) {
PersonDao dao = new PersonDao(this);
boolean flag= dao.find("lisi99");
if(flag){
Log.i("find_item","查到了");
}
else{
Log.i("find_item","没有查到");
}
}
}
然后是Person.java中也要对年龄age定义及进行getter/setter
package com.example.myapplication;
public class Person {
String name;
String number;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age=age;
}
}
最后要在界面(activity_main.xml)中新增一个按钮用来测试调用最新的查看单条数据的方法
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"
android:id="@+id/send_button"
android:onClick="send"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增加一些数据"
android:id="@+id/send_add"
android:onClick="send_add"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除一条数据"
android:id="@+id/send_del"
android:onClick="send_del"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="改一条数据"
android:id="@+id/send_update"
android:onClick="send_update"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查看全部数据"
android:id="@+id/send_find_all"
android:onClick="send_find_all"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查看单条数据"
android:id="@+id/send_find_item"
android:onClick="send_find_item"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
关键字词:数据库,增删改查,android
上一篇:25_数据库的增删改查
下一篇:27_sqlite中使用事务