使用SQLite中自带的API操作SQLite数据库
16lz
2021-01-25
在上一篇博客中介绍了在android中使用SQLite数据库,上一篇博客中是直接使用SQL语句操作SQLite数据库,这样会带来一个非常大的问题,万一SQL语句书写错误,编译时程序并不会报错,在运行时发现错误时,又重新回来修改代码,这样会大大降低开发效率,为了解决这个问题Android中封装了一些可以直接操作SQLite的API,并不需要写SQL语句
接下来通过一个实例介绍使用Android中封装好的API操作SQLite数据库,实例中实现的效果和上一篇博客在android中使用SQLite数据库中实现的效果一样,只是将实现方式由使用SQL语句实现改成了使用API,只有一个地方不同,就是点击Select按钮后会显示数据库中的所有的学生的信息,演示效果如下
实现方式,使用Android Studio创建一个Android 工程
1、修改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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.fyt.databasedemo1.MainActivity" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="createDatabase" android:textSize="30dp" android:onClick="createDatabase"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Insert" android:textSize="30dp" android:onClick="Insert"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Delete" android:textSize="30dp" android:onClick="Delete"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Update" android:textSize="30dp" android:onClick="Update"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Select" android:textSize="30dp" android:onClick="Select"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><ScrollView 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"> <LinearLayout android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> </LinearLayout></ScrollView>
3、新建一个Student类用于处理学生信息
package com.fyt.databasedemo1;import android.util.Log;//创建一个学生类public class Student { //学生的姓名 private String Name; //学生的年龄 private int Age; //学生的学号 private int No; //学生的C++成绩 private float Cpp; //学生的数学成绩 private float Math; //学生的英语成绩 private float English; //无参构造方法 public Student() { } //带参数的构造方法 public Student(String name, int age, int no, float cpp, float math, float english) { Name = name; Age = age; No = no; Cpp = cpp; Math = math; English = english; } public String getName() { return Name; } public void setName(String name) { Name = name; } public int getAge() { return Age; } public void setAge(int age) { Age = age; } public int getNo() { return No; } public void setNo(int no) { No = no; } public float getCpp() { return Cpp; } public void setCpp(float cpp) { Cpp = cpp; } public float getMath() { return Math; } public void setMath(float math) { Math = math; } public float getEnglish() { return English; } public void setEnglish(float english) { English = english; } @Override public String toString() { String str = getName() + ", " + getAge() + ", " + getNo() + ", " + getCpp() + ", " + getMath() + ", " + getEnglish(); return str; }}
package com.fyt.databasedemo1;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;//创建一个抽象类SQLiteOpenHelper的实现类MyOpenHelperpublic class MyOpenHelper extends SQLiteOpenHelper { /** * MyOpenHelper构造方法 * @param context 上下文 * @param name 数据库文件的名字 * @param factory 游标工厂(结果集) * @param version 数据库的版本号(用于升级) */ public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //创建数据库时,调用此方法 @Override public void onCreate(SQLiteDatabase db) { Log.d("MainActivity", "数据库创建成功"); //创建一个学生表 db.execSQL("create table student(_id integer primary key autoincrement, name char(10), age integer, no integer, cpp float, math float, english float)"); } //数据库升级时调用此方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.d("MainActivity", "数据库升级成功"); }}
5、修改MainActivity.java中的代码
package com.fyt.databasedemo1;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.View;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity { //用于创建帮助器对象 private MyOpenHelper oh; //用于创建数据库对象 private SQLiteDatabase db; List<Student> studentsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建集合,用来保存学生的信息 studentsList = new ArrayList<Student>(); //创建学生对象 Student st1 = new Student("刘得意", 19, 1001, 60, 98, 75); Student st2 = new Student("王锐", 20, 1002, 63, 90, 96); Student st3 = new Student("何煜中", 19, 1003, 90, 73, 82); Student st4 = new Student("王磊", 21, 1004, 87, 86, 92); Student st5 = new Student("冯松", 19, 1005, 89, 98, 83); Student st6 = new Student("裴培", 20, 1006, 75, 82, 91); Student st7 = new Student("马骁", 19, 1007, 62, 67, 90); Student st8 = new Student("马婧", 20, 1008, 98, 84, 87); Student st9 = new Student("周俊升", 19, 1009, 57, 68, 96); Student st10 = new Student("贺祺", 21, 1010, 61, 96, 72); //将学生的信息添加到集合中 studentsList.add(st1); studentsList.add(st2); studentsList.add(st3); studentsList.add(st4); studentsList.add(st5); studentsList.add(st6); studentsList.add(st7); studentsList.add(st8); studentsList.add(st9); studentsList.add(st10); } //创建数据库 public void createDatabase(View view) { //创建帮助器对象 oh = new MyOpenHelper(this, "people.db", null, 1); //创建数据库对象 db = oh.getWritableDatabase(); } //向数据库中添加数据 public void Insert(View view) { //使用增强for遍历集合中的学生的信息 for(Student student : studentsList) { //将需要插入的数据 ContentValues values = new ContentValues(); values.put("name", student.getName()); values.put("age", student.getAge()); values.put("no", student.getNo()); values.put("cpp", student.getCpp()); values.put("math", student.getMath()); values.put("english", student.getEnglish()); db.insert("student", null, values); } } //删除数据库中的数据 public void Delete(View view) { //删除姓名为"刘得意"的学生的信息 db.delete("student", "name = ?", new String[]{"刘得意"}); } //修改数据库中的数据 public void Update(View view) { //将数据库中所有人的学号减少1 db.execSQL("update student set no = no - 1"); } //查询数据库中的数据 public void Select(View view) { //关闭数据库 db.close(); Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); }}
6、新建一个SecondActivity.java文件,用于实现第二个界面的逻辑
package com.fyt.databasedemo1;import android.app.Activity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class SecondActivity extends Activity { private MyOpenHelper oh; private SQLiteDatabase db; private List<Student> studentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载布局文件 setContentView(R.layout.activity_second); //创建集合,保存学生的信息 studentList = new ArrayList<Student>(); //创建数据库 createDatabase(); //从数据库中读取数据 readDataFromDatabase(); //显示学生的信息 showStudentData(); } //创建数据库 public void createDatabase() { //创建帮助器对象 oh = new MyOpenHelper(this, "people.db", null, 1); //创建数据库对象 db = oh.getWritableDatabase(); } //从数据库中读取数据 public void readDataFromDatabase() { Cursor cursor = db.query("student", null, null, null, null, null, null, null); while(cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); int no = cursor.getInt(cursor.getColumnIndex("no")); float cpp = cursor.getFloat(cursor.getColumnIndex("cpp")); float math = cursor.getFloat(cursor.getColumnIndex("math")); float english = cursor.getFloat(cursor.getColumnIndex("english")); Log.d("MainActivity", name + ", " + age + ", " + no + ", " + cpp + ", " + math + ", " + english); //将学生的信息添加到集合中 Student student = new Student(name, age, no, cpp, math, english); studentList.add(student); } } //显示学生的信息 public void showStudentData() { //获得布局文件上的线性布局 LinearLayout ll = (LinearLayout) findViewById(R.id.ll); //把数据显示至屏幕 for (Student student : studentList) { //1.集合中每有一条元素,就new一个textView TextView tv = new TextView(this); //2.把人物的信息设置为文本框的内容 tv.setText(student.toString()); //设置字体的大小为18 tv.setTextSize(18); //把textView设置为线性布局的子节点 ll.addView(tv); } }}
最后将SecondActivity这个活动添加到配置文件中的Application下面
<activity android:name=".SecondActivity"> </activity>
更多相关文章
- [android]获取各应用的启动次数和运行时间
- 海神平台Crash监控SDK(Android)开发经验总结
- 谷歌、摩托罗拉被要求向苹果提供有关Android的信息
- Android(安卓)数据存储 利用SQLiteDatabase实现简单的学生管理
- 如何找到Android(安卓)app启动activity和页面元素信息
- 在SQL数据库保存数据
- Android(安卓)取得应用程序的启动次数和运行时间等信息
- android利用数据库实现搜索联想功能
- 第二届 Android(安卓)应用开发中国大学生挑战赛开始