android studio数据存储建立SQLite数据库实现增删查改
作者:wow_awsl_qwq 发布时间:2023-11-29 17:11:42
标签:vandroid,studio,数据存储,SQLite,数据库,增,删,查,改
实验目的:
分别使用sqlite3
工具和Android
代码的方式建立SQLite
数据库。在完成建立数据库的工作后,编程实现基本的数据库操作功能,包括数据的添加、删除和更新。
实验要求:
1.创建一个学生管理的应用,基本信息包含学生姓名,班级,学号。采用数据库存储这些信息。
2.应用应该至少包含信息录入和删除功能。
3.数据显示考虑采用ListView。
实验效果:
工程结构:
源代码:
DBAdapter.java
package com.example.shiyan6_sqlite;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
public class DBAdapter {
private static final String DB_NAME = "student.db";
private static final String DB_TABLE = "peopleinfo";
private static final int DB_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_BANJI = "banji";
public static final String KEY_XUEHAO = "xuehao";
private SQLiteDatabase db;
private final Context context;
private DBOpenHelper dbOpenHelper;
public DBAdapter(Context _context) {
context = _context;
}
public void close() {
if(db !=null)
{
db.close();
db=null;
}
}
public void open() throws SQLiteException {
dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION);
try {
db = dbOpenHelper.getWritableDatabase();
}
catch (SQLiteException ex) {
db = dbOpenHelper.getReadableDatabase();
}
}
public long insert(People people) {
ContentValues newValues = new ContentValues();
newValues.put(KEY_NAME, people.Name);
newValues.put(KEY_BANJI, people.Banji);
newValues.put(KEY_XUEHAO, people.Xuehao);
return db.insert(DB_TABLE, null, newValues);
}
public People[] queryAllData() {
Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_BANJI, KEY_XUEHAO},
null, null, null, null, null);
return ConvertToPeople(results);
}
public People[] queryOneData(long id) {
Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_BANJI, KEY_XUEHAO},
KEY_ID + "=" + id, null, null, null, null);
return ConvertToPeople(results);
}
@SuppressLint("Range")
private People[] ConvertToPeople(Cursor cursor){
int resultCounts = cursor.getCount();
if (resultCounts == 0 || !cursor.moveToFirst()){
return null;
}
People[] peoples = new People[resultCounts];
for (int i = 0 ; i<resultCounts; i++){
peoples[i] = new People();
peoples[i].ID = cursor.getInt(0);
peoples[i].Name = cursor.getString(cursor.getColumnIndex(KEY_NAME));
peoples[i].Banji = cursor.getString(cursor.getColumnIndex(KEY_BANJI));
peoples[i].Xuehao = cursor.getString(cursor.getColumnIndex(KEY_XUEHAO));
cursor.moveToNext();
}
return peoples;
}
public long deleteAllData() {
return db.delete(DB_TABLE, null, null);
}
public long deleteOneData(long id) {
return db.delete(DB_TABLE, KEY_ID + "=" + id, null);
}
public long updateOneData(long id , People people){
ContentValues updateValues = new ContentValues();
updateValues.put(KEY_NAME, people.Name);
updateValues.put(KEY_BANJI, people.Banji);
updateValues.put(KEY_XUEHAO, people.Xuehao);
return db.update(DB_TABLE, updateValues, KEY_ID + "=" + id, null);
}
private static class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
private static final String DB_CREATE = "create table " +
DB_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " +
KEY_NAME+ " text not null, " + KEY_BANJI+ " text not null," + KEY_XUEHAO + " text not null);";
@Override
public void onCreate(SQLiteDatabase _db) {
_db.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) {
_db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
onCreate(_db);
}
}
}
People.java
package com.example.shiyan6_sqlite;
public class People {
public int ID = -1;
public String Name;
public String Banji;
public String Xuehao;
@Override
public String toString(){
String result = "";
result += "ID:" + this.ID + ",";
result += "姓名:" + this.Name + ",";
result += "班级:" + this.Banji + ", ";
result += "学号:" + this.Xuehao;
return result;
}
}
MainActivity.java
package com.example.shiyan6_sqlite;
import androidx.appcompat.app.AppCompatActivity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText e_xm,e_nl,e_sg,e_id;
TextView t_1;
Button b_add,b_allsee,b_clearsee,b_alldel,b_delid,b_seeid,b_updid;
DBAdapter dbAdapter;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
e_xm=findViewById(R.id.e_xm);
e_nl=findViewById(R.id.e_nl);
e_sg=findViewById(R.id.e_sg);
b_add=findViewById(R.id.b_add);
b_allsee=findViewById(R.id.b_allsee);
b_clearsee=findViewById(R.id.b_clearall);
b_alldel=findViewById(R.id.b_delall);
b_delid=findViewById(R.id.b_delid);
b_seeid=findViewById(R.id.b_seeid);
b_updid=findViewById(R.id.b_updid);
e_id=findViewById(R.id.e_id);
t_1=findViewById(R.id.t_1);
dbAdapter=new DBAdapter(this);
dbAdapter.open();
b_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
People t=new People();
t.Name=e_xm.getText().toString();
t.Banji=e_nl.getText().toString();
t.Xuehao=e_sg.getText().toString();
long colunm=dbAdapter.insert(t);
if (colunm == -1 ){
t_1.setText("添加过程错误!");
} else {
t_1.setText("成功添加数据,ID:"+String.valueOf(colunm));
}
}
});
b_allsee.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
People [] peoples =dbAdapter.queryAllData();
if (peoples == null){
t_1.setText("数据库中没有数据");
return;
}
String t="数据库:\n";
for(int i=0;i<peoples.length;++i){
t+=peoples[i].toString()+"\n";
}
t_1.setText(t);
}
});
b_clearsee.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
t_1.setText("");
}
});
b_alldel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dbAdapter.deleteAllData();
t_1.setText("已删除所有数据!");
}
});
b_delid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int id=Integer.parseInt(e_id.getText().toString());
long result=dbAdapter.deleteOneData(id);
String msg = "删除ID为"+e_id.getText().toString()+"的数据" + (result>0?"成功":"失败");
t_1.setText(msg);
}
});
b_seeid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int id=Integer.parseInt(e_id.getText().toString());
People people[]=dbAdapter.queryOneData(id);
if(people==null){
t_1.setText("Id为"+id+"的记录不存在!");
}
else{
t_1.setText("查询成功:\n"+people[0].toString());
}
}
});
b_updid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int id=Integer.parseInt(e_id.getText().toString());
People t=new People();
t.Name=e_xm.getText().toString();
t.Banji=e_nl.getText().toString();
t.Xuehao=e_sg.getText().toString();
long n=dbAdapter.updateOneData(id,t);
if (n<0){
t_1.setText("更新过程错误!");
} else {
t_1.setText("成功更新数据,"+String.valueOf(n)+"条");
}
}
});
}
@Override
protected void onStop() {
super.onStop();
dbAdapter.close();
}
}
来源:https://blog.csdn.net/qq_42641977/article/details/121970828


猜你喜欢
- IoC——Inversion of Control,控制反转在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控
- 工欲善其事,必先利其器很多程序员可能都忘了记录应用程序的行为是一件多么重要的事,当遇到多线程环境下高压力导致的并发bug时,你就能体会到记录
- 介绍Java命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而使不同的请求可以进行参数化,并支持请
- ComparableComparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Compa
- 目录一、导入依赖二、前端实现三、后台逻辑三、页面效果四、可能会遇到的问题一、导入依赖这里还是用了Apache的POI插件,现在一般的spri
- 前言消息推送功能可以说移动APP不可缺少的功能之一,一般简单的推送我们可以使用第三方推送的SDK,比如极光推送、信鸽推送等,但是对于消息聊天
- Android 控制WIFI相关操作WIFI的全称是Wireless Fidelity,又称802.11b标准,是一种高速的无线通信协议,传
- 一、@Value读取application.properties配置文件中的值application.properties配置文件fileN
- 前言:上午写代码时还好好的,下午不知道怎么回事突然就不显示logcat日志了,觉得很奇怪,于是开始找各种解决办法!现象如图所示,logcat
- 简介在上一篇文章中,我们列举了flutter中的所有layout类,并且详细介绍了两个非常常用的layout:Row和Column。掌握了上
- 本文实例讲述了Android编程判断网络连接是否可用的方法。分享给大家供大家参考,具体如下:为了提高用户体验,我们在开发 android 应
- 前言其实小编之前一直都是用的Java来开发Android,但是工作需求,开始了Kotlin的编程,接触到了JetPack,发现其中的Navi
- Java序列化是什么?Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程。反序列化
- 这段时间花了点时间整理了几个新手易犯的典型缺陷(专门针对C#的),但是个人的力量毕竟有限缺陷的覆盖面比较窄,有些缺陷的描述也不够准确,这里先
- 前言.如何设置设置使用的地方1.设置类注释模板代码/*** @author: lujie* @create: $date$* @descri
- Android插件开启对新Api的支持这一天小王导入了一个库,上线之后直接崩了一大片? 找到其中的问题:什么鬼哦?安卓8.0一下无法使用?
- 1. 是否需要整合 ?不需要 : 单独使用Springmvc. 需要将原先Spring中的内容通通迁移到Springmvc中. 例如:数据源
- 面试题一:判断下列程序运行结果package String_test;public class test_1 { public static
- 目录第一点——加载网页结构第二点——解析网页结构,转变为符合需求的数据实体第三点——保存数据实体,转变为符合需求的数据实体第四点——main
- 对于某些程序,我们只允许它使用某些特定端口、网络类型或者特定IP类型等信息。这时候,需要使用到防火墙里面的“高级设置”,创建某些特定的入站或