您的位置:首页 > 数据库

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

2016-04-12 15:38 429 查看
在上一篇博客中介绍了在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("何煜中", 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: