博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 学习笔记之如何使用SQLite数据库来保存数据...
阅读量:5890 次
发布时间:2019-06-19

本文共 10331 字,大约阅读时间需要 34 分钟。

PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼...

学习内容:

1.使用SQLite数据库来保存数据...

SQLite:

  SQLite一个轻量级的数据库,数据库这东西就是为了保存大量数据而存在的一个工具,SQLite支持SQL语言,其实和Mysql差不多,语句基本都是一样的,增删改查也非常的方便...SQLite独立性非常的好,使用SQLite不需要安装...不依赖与任何的引擎就可以独立的去执行...感觉这一点还是非常强悍的...安全性也比较好...

  Android集成了SQLite数据库,因此每个Android中直接就可以使用SQLite数据库,通过引用一些必要的包,我们就可以在Android程序中去使用...使用时需要引入这四个包...

  i.android.database.sqlite.SQLiteDataBase      //完成数据增删改查的操作...

  ii.android.database.sqlite.SQLiteOpenHelper   //完成数据库的创建及更新操作...

  iii.android.database.Cursor                    //对查询的结果进行保存...

  iv.android.database.ContentValues              //对传递的数据进行封装...

  引入了这四个包后,我们就可以在Android应用程序当中去使用SQLite了...我直接通过一个例子来说明一下,一个Android中如何使用SQLite,并且数据的信息保存的位置,如何对数据进行增删改查操作...基本的SQL语句也就没必要介绍了,学过数据库的一定知道SQL标准化语句...

  首先我们在使用数据库的时候,我们需要对数据库进行创建...

package com.example.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DataBaseHelp extends SQLiteOpenHelper{    private static final String DataBaseName="java.db";    private static final int DataBaseVersion=1;    private static final String TableName="person";    public DataBaseHelp(Context context) {        /**         * Create a helper object to create, open, and/or manage a database.         * This method always returns very quickly.  The database is not actually         * created or opened until one of {
@link #getWritableDatabase} or * {
@link #getReadableDatabase} is called. * * @param context to use to open or create the database * @param name of the database file, or null for an in-memory database * @param factory to use for creating cursor objects, or null for the default * @param version number of the database (starting at 1); if the database is older, * {
@link #onUpgrade} will be used to upgrade the database; if the database is * newer, {
@link #onDowngrade} will be used to downgrade the database */ super(context, DataBaseName, null, DataBaseVersion); // TODO Auto-generated constructor stub } //执行数据库的创建操作... @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String sql="Create table "+TableName+"( id int primary key,name varchar(50) not null,sex varchar(20) not null,DateofBorth date not null,email varchar(50) not null)"; //书写完的SQL语句,需要使用execSQL(sql)执行... db.execSQL(sql); } //当数据库的版本需要升级的时候调用这个方法...这个方法中可以将数据表进行删除... @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub String sql="Drop table if exists"+TableName; db.execSQL(sql); this.onCreate(db); } }

  在这里我们需要定义一个类去继承SQLiteOpenHelper类,并重写其中的方法,通过这个类来创建数据库对象,继承这个类是必须的,因为这个类是个辅助类,通过这个类我们才能够完成对数据库的操作...为什么?因为这个类中定义了对数据库的创建,更新,规定以什么方式去打开数据库的种种方法,只有通过继承这个类,然后定义对象我们次才能够调用其中的方法来完成对数据库的操作...这就是继承这个类的目的,java中有很多类中都为你写好了实现的方法,我们不需要自己去书写实现过程,只需要继承调用就可以了,这就是java类库的强大之处.

  有了这个类,我们就需要去调用这个类中的方法了....下面就是实现调用的过程...然后通过调用getWritableDataBase方法我们才能够进行相应的操作,当数据库不存在的时候,会调用onCreate()方法去创建一个数据库,这里建立了一个java.db数据库...这个数据库就成功的被建立了...这个数据库的存放位置是模拟器的sd卡中data/data/项目/databases目录下...

package com.example.sqlite;/* android.database.sqlite.SQLiteDatabase...完成对数据的增删改查... * android.database.sqlite.SQLiteOpenHelper...完成数据库的创建及更新操作... * android.database.Cursor...在使用查询语句进行数据查询后,保存所有的查询结果... * android.database.ContentValues...在对数据库进行操作之前...对传递的数据必须进行封装... * Context 识别调用者的实例... * Android集成了SQLite数据库...无需进行安装就可以使用... * 首先创建数据库: *       继承SQLiteOpenHelper类...重写其内部的方法.... *        * */import android.os.Bundle;import android.app.Activity;import android.database.sqlite.SQLiteOpenHelper;import android.view.Menu;import android.view.View;import android.widget.ArrayAdapter;import android.widget.LinearLayout;import android.widget.ListView;public class MainActivity extends Activity implements View.OnClickListener {    private DataBaseHelp help;    private OperatorTable mytable;    private LinearLayout layout;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//        findViewById(R.id.insert).setOnClickListener(this);//        findViewById(R.id.drop).setOnClickListener(this);//        findViewById(R.id.update).setOnClickListener(this);//        findViewById(R.id.select).setOnClickListener(this);        help=new DataBaseHelp(this);        layout=(LinearLayout) findViewById(R.id.layout);        mytable=new OperatorTable(help.getWritableDatabase());    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

  这样完成了数据库的建立是没有什么意思的...我们需要进行增删改查操作...定义了一个类来实现增删改操作...查询操作在下面来完成...

package com.example.sqlite;import android.database.sqlite.SQLiteDatabase;public class OperatorTable {    private SQLiteDatabase db=null;    public OperatorTable(SQLiteDatabase db){        this.db=db;    }    public void insert(String sql){        this.db.execSQL(sql);        this.db.close();    }    public void drop(String sql_1){        this.db.execSQL(sql_1);        this.db.close();    }    public void update(String sql_2){        this.db.execSQL(sql_2);         this.db.close();    }}

  定义了一个查询类...查询类需要使用到Cursor这个接口...通过实现这个接口来完成数据的查询操作,然后把查询后的结果以集合的方式进行返回...通过调用rawquery()方法,去调用另一个 public Cursor rawQueryWithFactory( CursorFactory cursorFactory, String sql, String[] selectionArgs,String editTable) {}方法,然后执行其中的SQL语句,最后使用一个字符串数组将查询的结果按行保存...这里遍历这个Cursor需要使用到下面的三个方法进行遍历..然后我把这个结果保存在了一个List<String>集合中,最后进行返回...

package com.example.sqlite;import java.util.ArrayList;import java.util.List;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class SearchTable {    private String name="person";    private SQLiteDatabase db;    public SearchTable(SQLiteDatabase db) {        // TODO Auto-generated constructor stub        this.db=db;    }     public List
find(){ List
all=new ArrayList
(); String sql="select name,sex,email from person"; Cursor cursor=this.db.rawQuery(sql, null); for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){ //使用List保存查询到的数据信息... all.add(cursor.getString(0)+" "+cursor.getString(1)+" "+cursor.getString(2)); System.out.println(cursor.getString(0).toString()+" "+cursor.getString(1).toString()+" "+cursor.getString(2).toString()); } db.close(); return all; } }

  我把这个结果返回到了一个ListView中,然后显示在屏幕上...这就是最终的主函数...下面有一个地方需要注意..就是使用getWritableDataBase()方法时需要注意的地方...只有在对数据库进行操作的时候,我们才能够使用这个方法来打开数据库...在任何一个模块中都需要使用这个语句,当然也可以定义一个DAO层来实现这个方法,然后调用,但是无论怎样这个方法时随开随用的...无法定义一个全局属性...这是一个需要注意的地方...

package com.example.sqlite;/* android.database.sqlite.SQLiteDatabase...完成对数据的增删改查... * android.database.sqlite.SQLiteOpenHelper...完成数据库的创建及更新操作... * android.database.Cursor...在使用查询语句进行数据查询后,保存所有的查询结果... * android.database.ContentValues...在对数据库进行操作之前...对传递的数据必须进行封装... * Context 识别调用者的实例... * Android集成了SQLite数据库...无需进行安装就可以使用... * 首先创建数据库: *       继承SQLiteOpenHelper类...重写其内部的方法.... *        * */import android.os.Bundle;import android.app.Activity;import android.database.sqlite.SQLiteOpenHelper;import android.view.Menu;import android.view.View;import android.widget.ArrayAdapter;import android.widget.LinearLayout;import android.widget.ListView;public class MainActivity extends Activity implements View.OnClickListener {    private DataBaseHelp help;    private OperatorTable mytable;    private LinearLayout layout;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.insert).setOnClickListener(this);        findViewById(R.id.drop).setOnClickListener(this);        findViewById(R.id.update).setOnClickListener(this);        findViewById(R.id.select).setOnClickListener(this);        help=new DataBaseHelp(this);        layout=(LinearLayout) findViewById(R.id.layout);//        mytable=new OperatorTable(help.getWritableDatabase());    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub//        MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase());        switch(v.getId()){        case R.id.insert:            /* getWritableDatabase通过写的方式打开数据库...由于每次都对数据库进行关闭操作,因此每次都要执行这个函数来打开数据库...             * 这句话是无法使用在其他函数当中的,更不能定义为全局变量,原因就是,当我们真正对数据库进行操作的时候,我们才能够使用             * 这个函数来打开数据库...随开随用...             * */            MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase());            String sql_insert="insert into person values(2,'c','f','1995-01-11','976864@qq.com')";            MainActivity.this.mytable.insert(sql_insert);            break;        case R.id.drop:            MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase());            String sql_drop="delete from person where id='2'";            MainActivity.this.mytable.drop(sql_drop);            break;        case R.id.update:            MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase());            String sql_update="update person set name='android' where id='1'";            MainActivity.this.mytable.update(sql_update);            break;        case R.id.select://            SearchTable search=new SearchTable(MainActivity.this.help.getWritableDatabase());            ListView listview=new ListView(MainActivity.this);            listview.setAdapter(new ArrayAdapter
(MainActivity.this, android.R.layout.activity_list_item,new SearchTable(MainActivity.this.help.getWritableDatabase()).find())); MainActivity.this.layout.addView(listview);// search.find(); } }}

  这样就实现了在Android应用程序中使用SQLite,并对其进行增删改查操作...非常的简单..最后推荐给大家一个SQLite Expert Personal是用来可视化SQLite的一个工具,个人感觉还是很好用的...

 

转载地址:http://ybfsx.baihongyu.com/

你可能感兴趣的文章
解决3 字节的 UTF-8 序列的字节 3 无效
查看>>
浅谈浏览器兼容性问题-(1)产生、看待与思
查看>>
iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)...
查看>>
BeanUtils\DBUtils
查看>>
VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。
查看>>
第一天,新的定义
查看>>
WPF EventSetter Handler Command
查看>>
polya定理,环形涂色
查看>>
day4-装饰器前奏
查看>>
forward和redirect的区别
查看>>
使用JavaMail完成邮件的编写
查看>>
洛谷P1576 最小花费
查看>>
封装了一个类,可生成验证码,缩略图,及水印图
查看>>
第一阶段项目总结
查看>>
Java集合详解
查看>>
myeclilpse打开文件所在位置的图标消失后的找回方法
查看>>
Android利用文本分割拼接开发一个花藤文字生成
查看>>
哈夫曼树的实现
查看>>
12-18Windows窗体应用小程序之记事本(1)
查看>>
毕业论文一次性修改所有字母和数字的字体
查看>>