加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用SQLite中自带的API操作SQLite数据库

发布时间:2020-12-12 19:31:46 所属栏目:百科 来源:网络整理
导读:在上一篇博客中介绍了在android中使用SQLite数据库,上一篇博客中是直接使用SQL语句操作SQLite数据库,这样会带来一个非常大的问题,万一SQL语句书写错误,编译时程序并不会报错,在运行时发现错误时,又重新回来修改代码,这样会大大降低开发效率,为了解决

在上一篇博客中介绍了在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>


2、在layout文件夹中新建一个activity_second.xml文件作为第二个界面,学生信息展示界面的布局文件

<?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;
    }
}


4、新建一个抽象类 SQLiteOpenHelper的实现类MyOpenHelper,MyOpenHelper中的代码如下

package com.fyt.databasedemo1;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

//创建一个抽象类SQLiteOpenHelper的实现类MyOpenHelper
public 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("何煜中",1003,73,82);
        Student st4 = new Student("王磊",21,1004,87,86,92);
        Student st5 = new Student("冯松",1005,89,83);
        Student st6 = new Student("裴培",1006,75,82,91);
        Student st7 = new Student("马骁",1007,62,67,90);
        Student st8 = new Student("马婧",1008,84,87);
        Student st9 = new Student("周俊升",1009,57,68,96);
        Student st10 = new Student("贺祺",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",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,1);

        //创建数据库对象
        db = oh.getWritableDatabase();
    }

    //从数据库中读取数据
    public void readDataFromDatabase() {

        Cursor cursor = db.query("student",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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读