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<String>find(){
List<String>all=new ArrayList<String>();
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<String>(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的一个工具,个人感觉还是很好用的...

Android 学习笔记之如何使用SQLite数据库来保存数据...的更多相关文章

  1. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  2. 【Android Developers Training】 26. 在SQL数据库中保存数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. Android学习笔记(十六)——数据库操作(上)

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, ...

  4. Python学习笔记:sqlite3(sqlite数据库操作)

    对于数据库的操作,Python中可以通过下载一些对应的三方插件和对应的数据库来实现数据库的操作,但是这样不免使得Python程序变得更加复杂了.如果只是想要使用数据库,又不想下载一些不必要的插件和辅助 ...

  5. Android学习笔记————利用JDBC连接服务器数据库

    /******************************************************************************************** * auth ...

  6. Android学习笔记_12_网络通信之从web获取资源数据到Android

    从web获取图片信息,并显示到android的imageView控件. 一.添加网络访问权限. <uses-permission android:name="android.permi ...

  7. Android学习笔记(十二)——使用意图传递数据的几种方式

    使用意图传递数据的几种方式 点此获取完整代码 我们除了要从活动返回数据,也经常要传递数据给活动.对此我们能够使用Intent对象将这些数据传递给目标活动. 1.创建一个名为PassingData的项目 ...

  8. scrapy学习笔记(三):使用item与pipeline保存数据

    scrapy下使用item才是正经方法.在item中定义需要保存的内容,然后在pipeline处理item,爬虫流程就成了这样: 抓取 --> 按item规则收集需要数据 -->使用pip ...

  9. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

随机推荐

  1. php生成UUID

    UUID含义是 通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, O ...

  2. 最详细的Linux YUM命令使用教程

    YUM(Yellow dog Updater, Modified)为多个Linux发行版的前端软件包管理器,例如 Redhat RHEL, CentOS & Fedora.  YUM通过调用R ...

  3. Android 多线程-----AsyncTask详解

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  4. Ques核心思想——CSS Namespace

    Facebook’s challenges are applicable to any very complex websites with many developers. Or any situa ...

  5. 每日英语:A Different Color: China's Chameleonic Politics

    China has tried your form of government and found it wanting. That was the message delivered by Chin ...

  6. iPhone私有API

    一.基本知识 iPhone中的API除了公开的API:Published API外(或者叫文档中记录的API:Documented API),还有两类API:私有API:Private API和未公开 ...

  7. Lua在给定范围内,生成指定个数不重复随机数组

    本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...

  8. 【面经】Epic: 数据库去重

    题目是:有2个10G的数据库,存储了一些string. 2者之间有一些重复的数据.请把它们合并为一个数据库,并且去除重复. 限制:内存是4G 例如: DB1: cmu, ucb, stanford, ...

  9. iOS梦想之路-最新消息

    查看博客请转到 iCocos梦工厂 个人微信:18370997821 QQ:790806573 weibo:18370998721 谢谢:

  10. 分享7款非常实用的jQuery/CSS3插件演示和源码

    上次我们分享了15款效果很酷的最新jQuery/CSS3特效,非常不错,今天要分享7个非常实用的jQuery/CSS3插件演示和源码,一起来看看. 1.jQuery ajax点击地图显示商家网点分布 ...