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. 用Wireshark提取WPA握手包

    进入正文前,先来看一张截图,如图1,使用“aircrack-ng wpa.cap -w password.lst”命令后,程序会提示输入待破解网络的序号,此时只要提供一个序号即可.注意:1:命令中不需 ...

  2. 【地图API】地址录入时如何获得准确的经纬度?淘宝收货地址详解

    用户需求:管理者需要录入一批商户,并在地图上把商户展示出来.但发现一些商户的地址描述并不清楚,导致商户位置出错.如何获得更加准确的商户位置呢? 分析:假设地址准确的,可以通过地址解析,得到准确的经纬度 ...

  3. 【Vegas原创】Mysql绿色版安装方法

    所谓的绿色版,就是没有installer的MySQL,完全需要靠人工来操作,好处是,重装系统后,只要再做一次本次配置,即可使用. 具体操作方法: 1,设置系统环境变量, 在Path中添加 D:\mys ...

  4. Hibernate不调用update却自动更新

    案例: TInfCustomer cus = (TInfCustomer) this.baseDao.getOne(helper); cus.setXXX cus .setXXX 不调用update也 ...

  5. 移动APP接口遇到的一些小问题

    一:IIS设置站点后无法访问apk文件 首先要给IIS服务器根目录添加MIME类型影射文件扩展名:apkMIME类型 :application/vnd.android.package-archive ...

  6. Windows搭建SVN

    1.服务器下载 VisualSVN 地址:http://subversion.apache.org/packages.html 2.然后下载TortoiseSVN客户端,如果要下中文语言包 也在这个页 ...

  7. ecshop 全站内页 显示最新文章

    一.打开根目录下index.php,找到代码 $smarty->assign('new_articles',    index_get_new_articles());   // 最新文章 进行 ...

  8. Quartz.Net 作业调度后台管理系统,基于Extjs

    Quartz.Net是一个开源的.非常灵活的作业调度框架,具体使用方法和教程:http://www.cnblogs.com/shanyou/archive/2007/08/25/quartznettu ...

  9. 用git上传本地项目到github上

    首先确认自己已经安装了git,打开git bash,输入ssh-keygen -t rsa -C "自己的邮箱地址@XXX.com" ,生成自己的公钥与私钥   一路默认回车,会生 ...

  10. 我也要学iOS逆向工程--全局变量

    大家好!很久不见了.我之前去音乐学院进修爵士吉他去了.现在回来了.之前我一直在学windows开发和逆向.后来到了音乐学院,老师推荐了1个录音软件叫logic prox.可惜啊!当时我只有个索尼的笔记 ...