Android数据库知识和操作笔记
来源:互联网 发布:java方法命名规范to 编辑:程序博客网 时间:2024/05/16 04:54
Android中的数据库操作--精华知识讲解,以及demo,数据库操作
1.知识讲解
1.1android中采用的数据库是SQLite数据库,是个轻量级,开源的数据库
1.2数据存储的基本结构--表格
表格被分成了栏位(column)和列位(row),每一列代表一笔资料,每一栏代表资料的一项(这与汉语中的行和列略有不同)
namemoneyDatezhang101.1wang231.1li341.2zhao452.3 该表格由3个栏位,4个列位1.3 数据类型 (和其他的数据库不同,sqlite可以是无类型的,但是最好声明类型)
数据类型
类型
描 述
bit
整型
bit 数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或Fa lse 、On 或Offint
整型
int 数据类型可以存储从- 231(-2147483648)到231 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节smallint
整型
smallint 数据类型可以存储从- 215(-32768)到215(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间tinyint
整型
tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。 这种数据类型在数据库中占用1 个字节numeric
精确数值型
numeric数据类型与decimal 型相同decimal
精确数值型
decimal 数据类型能用来存储从-1038-1到1038-1的固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。 范围是小数点左右所能存储的数字的总位数。精度是小数点右边存储的数字的位数money
货币型
money 数据类型用来表示钱和货币值。这种数据类型能存储从-9220亿到9220 亿之间的数据,精确到货币单位的万分之一smallmoney
货币型
smallmoney 数据类型用来表示钱和货币值。这种数据类型能存储从-214748.3648 到214748.3647 之间的数据,精确到货币单位的万分之一float
近似数值型
float 数据类型是一种近似数值类型,供浮点数使用。说浮点数是近似的,是因为在其范围内不是所有的数都能精确表示。浮点数可以是从-1.79E+308到1.79E+308 之间的任意数real
近似数值型
real 数据类型像浮点数一样,是近似数值类型。它可以表示数值在-3.40E+38到3.40E+38之间的浮点数datetime
日期时间型
datetime数据类型用来表示日期和时间。这种数据类型存储从1753年1月1日到9999年12月3 1日间所有的日期和时间数据, 精确到三百分之一秒或3.33毫秒Smalldatetime
日期时间型
smalldatetime 数据类型用来表示从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟cursor
特殊数据型
cursor 数据类型是一种特殊的数据类型,它包含一个对游标的引用。这种数据类型用在存储过程中,而且创建表时不能用timestamp
特殊数据型
timestamp 数据类型是一种特殊的数据类型,用来创建一个数据库范围内的唯一数码。 一个表中只能有一个timestamp列。每次插入或修改一行时,timestamp列的值都会改变。尽管它的名字中有“time”, 但timestamp列不是人们可识别的日期。在一个数据库里,timestamp值是唯一的Uniqueidentifier
特殊数据型
Uniqueidentifier数据类型用来存储一个全局唯一标识符,即GUID。GUID确实是全局唯一的。这个数几乎没有机会在另一个系统中被重建。可以使用NEWID 函数或转换一个字符串为唯一标识符来初始化具有唯一标识符的列char
字符型
char数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列为此类型时,你必须指定列长。当你总能知道要存储的数据的长度时,此数据类型很有用。例如,当你按邮政编码加4个字符格式来存储数据时,你知道总要用到10个字符。此数据类型的列宽最大为8000 个字符varchar
字符型
varchar数据类型,同char类型一样,用来存储非统一编码型字符数据。与char 型不一样,此数据类型为变长。当定义一列为该数据类型时,你要指定该列的最大长度。 它与char数据类型最大的区别是,存储的长度不是列长,而是数据的长度text
字符型
text 数据类型用来存储大量的非统一编码型字符数据。这种数据类型最多可以有231-1或20亿个字符nchar
统一编码字符型
nchar 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符,而不是用单字节(普通文本中的情况)。它允许大量的扩展字符。此数据类型能存储4000种字符,使用的字节空间上增加了一倍nvarchar
统一编码字符型
nvarchar 数据类型用作变长的统一编码字符型数据。此数据类型能存储4000种字符,使用的字节空间增加了一倍ntext
统一编码字符型
ntext 数据类型用来存储大量的统一编码字符型数据。这种数据类型能存储230 -1或将近10亿个字符,且使用的字节空间增加了一倍binary
二进制数据类型
binary数据类型用来存储可达8000 字节长的定长的二进制数据。当输入表的内容接近相同的长度时,你应该使用这种数据类型varbinary
二进制数据类型
varbinary 数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容大小可变时,你应该使用这种数据类型image
二进制数据类型
image 数据类型用来存储变长的二进制数据,最大可达231-1或大约20亿字节 !sqlite对大小写不敏感的!4.数据库操作基本语言
无非是增删改查,同大部分数据库一样,这里不再赘述
5.数据库API
所有的数据库相关的接口,类都在android.database和android.database.sqlite这两个包下,下面列举其中关键的几个:
5.1 SQLiteOpenHelper--这是一个抽象类,关于抽象类,如果要使用,就一定要继承,这个类的方法很少,有一个构造方法
SQLiteOpenHelper(android.content.Context context, java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);
参数不做过多的解释,CursorFactory一般直接传null就可以
public void onCreate(SQLiteDatabase db) 此方法在创建数据库是被调用,所以,应该把创建表的操作放到这个方法里面,一会儿在后面我们会再详细的说如何创建表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
从方法名上我们就能知道这个方法是执行更新的,没错,当version改变是系统会调用这个方法,所以在这个方法里应该执行删除现有表,然后手 动调用onCreate的操作
参数不做过多的解释,CursorFactory一般直接传null就可以
public void onCreate(SQLiteDatabase db) 此方法在创建数据库是被调用,所以,应该把创建表的操作放到这个方法里面,一会儿在后面我们会再详细的说如何创建表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
从方法名上我们就能知道这个方法是执行更新的,没错,当version改变是系统会调用这个方法,所以在这个方法里应该执行删除现有表,然后手 动调用onCreate的操作
5.2 SQLiteDatabase
关于数据库的工作(增删改查)都在这个类里
execSQL(sql);执行SQL语句,用这个+SQL语句可以非常方便的执行增删改查
5.3 Cursor(神器,不解释)
游标(接口),这个很熟悉了吧,Cursor里面方法非常多,常用的有:
boolean mouveToPosition(position) 将指针移动到某记录
getColumnIndex(Contacts.People.Name)按列名获取ID
int getCount() 获取记录总数
boolean requery() 重新查询
boolean moveToFirst() moveToLast() moveToNext() moveToPosition(position)
数据库操作Demo
1.实现一个继承SQLiteOpenHelper类,可直接复制到自己的项目中
上述query()方法,返回一个Cursor,代表数据库中的全部数据,
3.创建一个显示数据的类:
如果想具体到每一列的具体数据 ,看下面这个方法,先获得数据库中全部数据的列数num,然后在[0,num)中生一个随机数,然后指针跳到该列,获得该列的数据
上述几段代码,是数据库操作的一种模式,可以直接使用,代码也比较简单,要理解这种形式。
1.首先一定要在虚拟机中启动项目,(手机启动我找过,找了半天没找到),然后再Eclipse中最右上角,选择DDMS窗口(没有的就打开视图,添加进来)
import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper {private static final String DB_NAME = "coll.db";private static final String TBL_NAME = "CollTbl";private static final String CREATE_TBL = " create table "+ " CollTbl(_id integer primary key autoincrement,name text,url text, desc text) ";private SQLiteDatabase db;DBHelper(Context c) {super(c, DB_NAME, null, 2);}@Overridepublic void onCreate(SQLiteDatabase db) {this.db = db;db.execSQL(CREATE_TBL);}public void insert(ContentValues values) {SQLiteDatabase db = getWritableDatabase();db.insert(TBL_NAME, null, values);db.close();}public Cursor query() {SQLiteDatabase db = getWritableDatabase();Cursor c = db.query(TBL_NAME, null, null, null, null, null, null);return c;}public void del(int id) {if (db == null)db = getWritableDatabase();db.delete(TBL_NAME, "_id=?", new String[] { String.valueOf(id) });}public void close() {if (db != null)db.close();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}
2.创建一个录入数据的类(根据自己的需求改)
import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class AddActivity extends Activity {private EditText et1, et2, et3;private Button b1;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.add);this.setTitle("添加收藏信息");et1 = (EditText) findViewById(R.id.EditTextName);et2 = (EditText) findViewById(R.id.EditTextUrl);et3 = (EditText) findViewById(R.id.EditTextDesc);b1 = (Button) findViewById(R.id.ButtonAdd);b1.setOnClickListener(new OnClickListener() {public void onClick(View v) {String name = et1.getText().toString();String url = et2.getText().toString();String desc = et3.getText().toString();ContentValues values = new ContentValues();values.put("name", name);values.put("url", url);values.put("desc", desc);DBHelper helper = new DBHelper(getApplicationContext());//实例化helper.insert(values);//上面那个类中的插入方法Intent intent = new Intent(AddActivity.this,QueryActivity.class);startActivity(intent);}});}}
3.创建一个显示数据的类:
import android.app.AlertDialog;import android.app.ListActivity;import android.content.DialogInterface;import android.database.Cursor;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.AdapterView.OnItemClickListener;public class QueryActivity extends ListActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setTitle("浏览收藏信息");final DBHelper helpter = new DBHelper(this);Cursor c = helpter.query();String[] from = { "_id", "name", "url", "desc" };int[] to = { R.id.text0, R.id.text1, R.id.text2, R.id.text3 };SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.row, c, from, to);ListView listView = getListView();listView.setAdapter(adapter);final AlertDialog.Builder builder = new AlertDialog.Builder(this);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {final long temp = arg3;builder.setMessage("真的要删除该记录吗?").setPositiveButton("是",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {helpter.del((int)temp);Cursor c = helpter.query();String[] from = { "_id", "name", "url", "desc" };int[] to = { R.id.text0, R.id.text1, R.id.text2, R.id.text3 };SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(),R.layout.row, c, from, to);ListView listView = getListView();listView.setAdapter(adapter);}}).setNegativeButton("否",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {}});AlertDialog ad = builder.create();ad.show();}});helpter.close();}}
如果想具体到每一列的具体数据 ,看下面这个方法,先获得数据库中全部数据的列数num,然后在[0,num)中生一个随机数,然后指针跳到该列,获得该列的数据
DatabaseHelper helper=new DatabaseHelper(getApplicationContext()); Cursor cursor=helper.query(); int num=cursor.getCount(); if (num!=0){ Random rndRandom=new Random(); int p=rndRandom.nextInt(num); cursor.moveToPosition(p); String name=cursor.getString(1); String wheres=cursor.getString(2);//注意这个wheres,不能用where,因为where是保留字 String money=cursor.getString(3); String info=cursor.getString(4);}
上述几段代码,是数据库操作的一种模式,可以直接使用,代码也比较简单,要理解这种形式。
**获得andrid数据库文件,并在具体工具内打开,查看***
按照上面的操作进行数据库的操作后,如果想看到具体的数据表,需要一下几步:
1.首先一定要在虚拟机中启动项目,(手机启动我找过,找了半天没找到),然后再Eclipse中最右上角,选择DDMS窗口(没有的就打开视图,添加进来)
按照标号讲解:
1.选中虚拟机名称
4.在FileExplorer中可以看到全部文件
2.选择data打开
3.在data下面就有数据库具体文件
5.共有4个图标,分别是导出,导入到手机,删除,添加
6.就是所谓的DDMS
打开标号是3的data文件夹,选择数据表,用标号为5中的第一个按钮 导出到桌面上即可得到 databasename.db
下面就是打开啦!
需要用的工具/:推荐一个
下载地址:http://pan.baidu.com/share/link?shareid=268794&uk=940821757
使用方法:自己研究吧,跟一般的SQL工具一样
打开后就可以看到全部的的数据了!吼吼哈哈!到此就全部结束了!
至于代码,不需要把zip发给大家,上面的直接拷贝就能用了(改成你自己的具体内容)!
到此关键的操作都讲了,具体的SQLite知识,请自行谷歌
- Android数据库知识和操作笔记
- 数据库基本操作和知识
- Android sqlite数据库操作笔记
- 数据库操作 知识园
- 数据库操作小知识
- android数据库配置和操作
- 数据库知识学习笔记
- oracle数据库知识笔记
- Android下SQLite3数据库操作笔记
- Android复习笔记(5)-数据库操作 sqllite
- android笔记之SQLite 数据库操作
- Android数据库知识简介
- Android数据库小知识
- mysql数据库相关操作知识
- Android知识梳理之Sqlite数据库的使用和优化
- Android知识笔记
- android studio知识笔记
- android 数据库操作execSQL()和rawQuery()
- [unity3d3.54下载] unity 3d 安装方法 教程
- 验证是否支持html5的Video标签及MP4视频播放
- linux
- iOS开发那些事--iOS视图生命周期与视图控制器关系
- 浅谈Java--内存泄漏
- Android数据库知识和操作笔记
- SpringMVC介绍之约定优于配置
- 当你学不进去的时候,试试“普瑞马法则”
- spring MongoDB 集成crud操作(简单封装)
- 关于Node.js
- Web页面该如何布局
- 通过FTP4J 实现FTP各种操作
- mysql中pager命令的妙用
- UML中的九种图
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
送浑将军出塞高适
古诗出塞王昌龄
出塞古诗的意思
前出塞挽弓当挽强
出塞古诗朗诵
幼儿古诗出塞教案
古诗出塞王昌龄带拼音
出塞诗歌赏析
出塞古诗带拼音版
出塞王昌龄的诗句
前出塞的古诗
小鸡出壳
小鸡出壳奇石
斑鸠出壳一至十五天图
鸽子出壳一至十五天图
小鸽子出壳多久吃东西
奇石小鸡出壳图片
出壳
为什么寄居蟹出壳会死
虎皮鹦鹉孵蛋多久就出壳了
gif出处
动态图出处
出处
gif福利出处
查图片出处
图片出处
搜图片出处
出处吧
求出处
动图出处
gif图出处
经典gif出处
愿你三冬暖出处原文
英雄不问出处
gif动态图出处第900期
自闭玩家出处
gif动态图出处
艾诺迪亚4紫装出处
日本gif后扦插式出处
日本gif后扦插式出处168期
这盛世如你所愿出处