Android SQLite简介
SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite;
Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,往里面添加数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
- 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
- onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
- onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
详细介绍可以参考:
http://www.cnblogs.com/Excellent/archive/2011/11/19/2254888.html
http://blog.csdn.net/liuhe688/article/details/6715983
下面以一个增删改查的简单例子来说明一下:具体如图:
点击添加数据,然后点击查询数据:
然后点击修改,然后再查询:
然后删除,再查询:
实现代码如下:
MainActivity.java
package com.xiaozhang.sqltest1; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { private DatabaseHelper databaseHelper; private SQLiteDatabase sqlite; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); databaseHelper = new DatabaseHelper(this); sqlite = databaseHelper.getWritableDatabase(); } // 添加Student信息 public void add(View view) { ArrayList<Student> student = new ArrayList<Student>(); Student student1 = new Student("张三", 23, "河南省"); Student student2 = new Student("李四", 25, "山东省"); Student student3 = new Student("王五", 21, "陕西省"); Student student4 = new Student("赵六", 22, "福建省"); student.add(student1); student.add(student2); student.add(student3); student.add(student4); // 设置事务 sqlite.beginTransaction(); // 开始事务 try { for (Student stu : student) { sqlite.execSQL("INSERT INTO student VALUES(null, ?, ?, ?)", new Object[] { stu.name, stu.age, stu.address }); } sqlite.setTransactionSuccessful(); // 设置事务成功完成 } finally { sqlite.endTransaction(); // 结束事务 } } // 将姓名为 "张三" 的地址修改为 "北京市"; public void update(View view) { ContentValues cv = new ContentValues(); Student student = new Student(); student.address = "北京市"; student.name = "张三"; cv.put("address", student.address); sqlite.update("student", cv, "name = ?", new String[] { student.name }); } // 删除年龄为22岁的人 public void delete(View view) { Student student = new Student(); student = new Student(); student.age = 22; sqlite.delete("student", "age = ?", new String[] { String.valueOf(student.age) }); } //查询全部信息 public void query(View view) { Student student = new Student(); Cursor c = sqlite.rawQuery("SELECT * FROM student", null); ArrayList<Student> list = new ArrayList<Student>(); while (c.moveToNext()) { student = new Student(); student._id = c.getInt(c.getColumnIndex("_id")); student.name = c.getString(c.getColumnIndex("name")); student.address = c.getString(c.getColumnIndex("address")); student.age = c.getInt(c.getColumnIndex("age")); list.add(student); } ArrayList<Map<String, String>> list2 = new ArrayList<Map<String, String>>(); for (Student stu : list) { HashMap<String, String> map = new HashMap<String, String>(); map.put("name", stu.name); map.put("address", "-----"+stu.address + "-----" + stu.age + " years old"); list2.add(map); } c.close(); SimpleAdapter adapter = new SimpleAdapter(this, list2, android.R.layout.simple_list_item_2, new String[] { "name", "address" }, new int[] { android.R.id.text1, android.R.id.text2 }); listView.setAdapter(adapter); } }
DatabaseHelper.java
package com.xiaozhang.sqltest1; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "study"; private static final int DATABASE_VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS student" + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INTEGER, address TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("ALTER TABLE student ADD COLUMN other STRING"); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="add" android:text="添加数据" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="update" android:text="更新数据" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="delete" android:text="删除数据" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="query" android:text="查询数据" /> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
还有一点,就是查看SQLite数据库,因为在硬盘上无法直接查看,可以借助adb命令或通过Eclipse的DDMS视图来查看;
(1)在命令行中进入到Android的platform-tools目录,然后在命令行窗口输入adb shell回车,就进入了Linux命令行,现在就可以使用Linux的命令了;
(2)cd data/data,然后ls,进入到项目中,我的是:cd com.xiaozhang.sqltest1,然后cd databases,再ls就看到数据库了,我建的数据库就是study;
(3)再sqlite3 study,进入到数据库中;
(4)再.schema,查看建表语句,然后即可看到新建的表,就可以用SQL语句来进行操作了,如:
(5)就可以看到数据了,乱码的话,修改下编码就可以了;
在CMD窗口下输下,输入 chcp 65001,修改为UTF-8编码;然后在命令行标题栏上点击右键,选择【属性】 -【字体】,将字体修改为Consolas 确定;
如有需要,可以下载代码:http://download.csdn.net/detail/u012724379/8239741
Android SQLite简介的更多相关文章
- [JIT_APP]Android SQLite简介
SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目(Mozilla, PHP, Pyt ...
- Android——SQLite/数据库 相关知识总结贴
android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...
- Android SQLite数据库使用
在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...
- "浅谈Android"第一篇:Android系统简介
近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...
- Android SQLite (二) 基本用法
在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一 ...
- Android系统简介(中):系统架构
Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries & Android Runtime.Linux ...
- 数据库-SQLite简介
SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库(轻型数据库). 由于资源占用少.性能良好和零管理成本,嵌入式数据库有了它的用武之地,像Android.iPhone都有内置的S ...
- Android SQLite基本用法
SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...
- Android SQLite学习指南
一.SQLite简介 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对 ...
随机推荐
- socket编程2
package tcp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOExceptio ...
- Graph Databases—The NOSQL Phenomenon阅读笔记
本章内容着重对了NOSQL和RDBMS(关系型数据库管理系统)的不同,以及其各自背后设计时考虑的因素.然后接下来,着重讲述了NOSQL的4种分类方法.下面我们将对重要知识点进行汇总. 1.We def ...
- 利用TreeSet给纯数字字符串排序
import java.util.Iterator;import java.util.TreeSet; /* * 给字符串中的数字排序 * String str = "10,2,11,1,3 ...
- JavaScript兼容问题汇总[实时更新]
印象笔记链接地址:点我查看 遇到问题不断更新中-- [转载请注明出处-HTML5自由者]
- KVM硬件辅助虚拟化之 EPT(Extended Page Table)
传统OS环境中,CPU对内存的訪问都必须通过MMU将虚拟地址VA转换为物理地址PA从而得到真正的Physical Memory Access,即:VA->MMU->PA,见下图. 虚拟执行 ...
- [ES6] Rest Parameter
Problem with the ES5: function displayTags(){ for (let i in arguments) { let tag = arguments[i]; _ad ...
- ETL几种方案对比
- 结合tcpdump命令对traceroute深入分析
昨天突然被问到traceroute的原理,一时竟也说不出来,有些命令平时虽然经常在用,但实际原理确并不了解,趁这次机会就来梳理一下. traceroute:是网络诊断中,用来分析IP包经过那些路由的命 ...
- MVC部署-发布本地数据库(Localdb)时连接异常
解决方法: 找到对应网站的应用程序池, 在 高级设置 里找到 [标识] 选择为 LocalSystem 就可以了,注意文件的路径和连接字符串.
- C#调用cmd 脚本实例
1.实例1 public static void TestOne() { Process p = new Process(); p.StartInfo.FileName = "cmd.exe ...