使用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按钮后会显示数据库中的所有的学生的信息,演示效果如下
![](https://img-blog.csdn.net/20160412144959339)
实现方式,使用Android Studio创建一个Android 工程
1、修改activity_main.xml文件
2、在layout文件夹中新建一个activity_second.xml文件作为第二个界面,学生信息展示界面的布局文件
3、新建一个Student类用于处理学生信息
4、新建一个抽象类 SQLiteOpenHelper的实现类MyOpenHelper,MyOpenHelper中的代码如下
5、修改MainActivity.java中的代码
6、新建一个SecondActivity.java文件,用于实现第二个界面的逻辑
最后将SecondActivity这个活动添加到配置文件中的Application下面
接下来通过一个实例介绍使用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>
相关文章推荐
- oracle 的rownum
- C#创建并连接学生数据库(SqlServer数据库)、创建学生信息表、向表中插入学生信息
- oracle服务OracleDBConsoleorcl启动失败
- Mysql的存储引擎
- mongodb 数据库的备份 (crontab + shell 简易备份)
- oracle 记录
- Sqoop导入关系数据库到Hive
- 用户注册登录测试版(jsp+servlet+mysql)
- 在命令提示符窗口进入MYSQL数据库的方法(转)
- 分享两段简单的JS代码防止SQL注入
- MySQL查询指定时间的数据
- 安装mongodb数据库
- mysql timediff函数极限值
- 虚拟机oracle virtualbox 上安装centos6.5
- oracle 多表查询
- MySQL Memory 存储引擎
- SQL Server 高性能写入的一些总结
- SQL不同服务器数据库之间的数据操作整理(完整版)
- sql实现oracle分析函数功能 over partition by
- oracle——SQL复习10