irpas技术客

Android sqlite数据库的使用(增删改查)_dudubigbanana_android sqlite增删改查

网络投稿 8170

sqlite 的简介

对于sqlite 就是一种轻型的嵌入式的数据库,多用于手机,车机等,至于他的原理百度有很多大佬对他的详细介绍,我就不在这里累述了。 今天主要是想记录一下sqlite的详细使用,我主要是通过一个实例理解sqlite 的增删改查。 如图,这是一个简单的用户登录注册,主要就记录一下两种用户的登录注册

sqlite 的使用就是继承SQliteOpenHelper这个数据库助力类,一般写的数据库都不会对外直接进行数据的操作,这是对数据安全的保护。一般可以把他看作一个工具类,私有化构造函数,增加一个对外访问的接口。

/** * 数据库工具类(单例模式) */ public class Stu_Tea_Sqlite extends SQLiteOpenHelper{ private static final String STU_TEA_COURSE ="stc.db";//数据库 private static final String TEACHER ="teacher"; // 教师表 private static final String STUDENT ="student"; //学生表 private static final String COURSE="course"; // 课程表 private static final String STU_COURSE ="stu_course"; //学生课程(学生选课:学生、课程号、课程名、教师、分数// ) private static final String TEA_COURSE_WORK ="tea_work"; //作业(课程号,课程吗、作业号、作业名、作业内容) private static final String STU_COURSE_WORK ="stu_work"; //作业(课程号、作业号、学生、分数// ) private static SQLiteOpenHelper instance; //对外接口 public static synchronized SQLiteOpenHelper getInstance(Context context){ if(instance ==null){ instance =new Stu_Tea_Sqlite(context,STU_TEA_COURSE,null,2); } return instance; } //私有化构造函数 private Stu_Tea_Sqlite(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //一般只会执行一次,第一次创建数据库 @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { /** * 教师表:(职工号_Tid 、姓名T_name、密码T_pass、邮箱T_email、电话T_tel、性别T_sex、专业T_profession) * 规范的写法 _id * 主键必须时Integer */ sqLiteDatabase.execSQL("create table if not exists "+ TEACHER +"(_id Integer primary key autoincrement," +"_Tid unique varchar(7) not null,"+"T_name varchar(20) not null," + "T_pass varchar(20) not null," + "T_email varchar(30) not null," + "T_tel varchar(15) not null,"+ "T_sex varchar(2) not null," + "T_profession varchar(30) )"); /** * 学生表 :(学号_Sid、姓名S_name、密码S_pass、邮箱S_email、电话S_tel、性别S_sex、专业S_profession) */ sqLiteDatabase.execSQL("create table if not exists "+ STUDENT +"(_id Integer primary key autoincrement,"+"_Sid unique varchar(7) not null ," +"S_name varchar(20) not null," + "S_pass varchar(20) not null," + "S_email varchar(30) not null," + "S_tel varchar(15) not null,"+ "S_sex varchar(2) not null," + "S_profession varchar(30) )");

sqlite尤其注意外键的使用,外键一定要加unique约束,不然会报错插入外键不匹配,最好还加上sqlite> PRAGMA foreign_keys = ON;打开外键的语句

然后在你的oncreate函数里创建表,创建表的调用的是sqLiteDatabase.execSQL()函数,执行的创建表的SQL语法和我们平时的语法一样。 值得主要的是,sqlite数据表的创建,他的主键必须是一个INteger类型的,而且他的规范写法是下划线开头,后面列没有严格要求,数据类型可以使用具体的也可以使用TEXT代替,因为后面都会转化为TEXT形式存储

public interface Manager_Date { public void createDB(Context context); public void StudentInsert(Student student, Context context); public Student StudentQuery(String ID,Context context); public void StudentUpdate(Student student,Context context); public void TeacherAdd(Teacher teacher,Context context); public Teacher TeacherQuery(String ID,Context context); public void TeacherUpdate(Teacher teacher,Context context); }

这里我写了一个接口主要是方便我后面功能实现数据的调用,后面数据的增删改查就直接调用接口 调用public void createDB(Context context)就可以创建一个数据库,一般只有在第一次创建的时候调用 我写了一个数据库管理类,实现数据库操作的接口

public class Manager_SQL implements Manager_Date{ /** * //初始化数据库,只会执行一次 */ @Override public void createDB(Context context){ SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context); SQLiteDatabase database=openHelper.getWritableDatabase(); }

调用方法后,就会创建一个数据库如图: 一般数据库的查看可以在Android studio的 旁边的Device File Explorer 下的data/data/app(你的项目名字)/databases 下有你刚才创建的数据库文件.db (如何你没有发现你的Android 里没有Device File Explorer ,你可以百度,如何打开视图。) 一般如果你要看数据库具体的数据,可以把他拉出来下载一个专门的sqlite 数据库查看软件查看,如果你和我一样懒得下载安装也可以在Android studio下的Database inspactor里查看,如上图。但是这个一般要启动模拟器打开你的测序才能查看。

好了数据库表创建好了,然后就可以对数据库表进行增删改查操作了。

/** * 学生数据插入 * 学生表 :(学号_Sid、姓名S_name、密码S_pass、邮箱S_email、电话S_tel、性别S_sex、专业S_profession) */ @Override public void StudentInsert(Student student,Context context) { SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context); SQLiteDatabase database=openHelper.getWritableDatabase(); if(database.isOpen()){ ContentValues values=new ContentValues(); values.put("_Sid",student.getId()); values.put("S_name",student.getName()); values.put("S_pass",student.getPassword()); values.put("S_email",student.getEmail()); values.put("S_sex",student.getSex()); values.put("S_tel",student.getTelephone()); values.put("S_profession",student.getProfession()); Log.d("插入:",student.getEmail()); Log.d("插入:",student.getPassword()); Log.d("插入:",student.getSex()); Log.d("插入:",student.getProfession()); Long count=database.insert("student",null,values);base //sql 出入形式 //database.exeSQl(insert into table(id,name,sex) value ('"ID"'+'"NAME"'+'"SEX"')); if(count!=-1){ Log.d("stu","插入数据库成功"+count); } else { Log.d("stu","插入数据库失败"+count); } } database.close(); } /** * 查询 * @param ID * @param context * @return */ @Override public Student StudentQuery(String ID,Context context){ SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context); SQLiteDatabase database=openHelper.getReadableDatabase(); Student student=new Student(); if(database.isOpen()){ Cursor cursor=database.query("student",null,"_Sid like ?",new String[]{ID},null,null,null); if(cursor.getCount()>0){ while (cursor.moveToNext()){ String id=cursor.getString(cursor.getColumnIndex("_Sid")); String emailString=cursor.getString(cursor.getColumnIndex("S_email")); String nameString = cursor.getString(cursor.getColumnIndex("S_name")); String password = cursor.getString(cursor.getColumnIndex("S_pass")); String sex=cursor.getString(cursor.getColumnIndex("S_sex")); String profession=cursor.getString(cursor.getColumnIndex("S_profession")); String tel=cursor.getString(cursor.getColumnIndex("S_tel")); student.setId(id); student.setEmail(emailString); student.setName(nameString); student.setPassword(password); student.setTelephone(tel); student.setSex(sex); student.setProfession(profession); } } else { Log.d("cursor","数据不存在"); } cursor.close(); } database.close(); return student; } /** * 修改信息 */ @Override public void StudentUpdate(Student student,Context context){ SQLiteOpenHelper openHelper=Stu_Tea_Sqlite.getInstance(context); SQLiteDatabase database=openHelper.getWritableDatabase(); if(database.isOpen()){ ContentValues values=new ContentValues(); values.put("S_name", student.getName()); values.put("S_email", student.getEmail()); values.put("S_sex", student.getSex()); values.put("S_tel", student.getTelephone()); values.put("profession", student.getProfession()); database.update("student",values,"_Sid=?",new String[]{student.getId()});//参数依次:表名、包裹、条件、条件的值 } database.close(); }

对于数据的删除就是一样的操作,调用database.delete(),对指定的数据删除,值得注意的是数据库的查询操作,数据绑定在游标Cursor上,然后移动游标查询数据后,记得关闭游标和数据库,否则会消耗性能。

第一次写文章记录总结的知识点,有不足的地方,或者有什么更好的写法、优化的欢迎指正。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Android #SQlite增删改查 #sqlite #的简介对于sqlite #的增删改查