SQLite数据库操作 (原始操作)
android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,
使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。
execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;
rawQuery()方法可以执行select语句。
参考 http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6995
官方 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
操作数据库步骤:
一、获取代表数据库的SQLiteDatabase对象
SQLiteDatabase 提供静态方法获取SQLiteDatabase对象

二、 对数据库CRUD操作
void execSQL(String sql, Object[] bindArgs )
官方解释:
Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE.
For example, the following are good candidates for using this method:
- ALTER TABLE
- CREATE or DROP table / trigger / view / index / virtual table
- REINDEX
- RELEASE
- SAVEPOINT
- PRAGMA that returns no data
Cursor rawQuery(Stringsql, String[] selectionArgs)方法可以执行select语句。
废话说了那么多了,咋们举个栗子吧:
下面是布局文件,两个EditText , 用于插入数据库的name 和 content 字段的值。一个 TextView 用于显示从数据库查询的数据。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <EditText
android:layout_width="100px"
android:layout_height="wrap_content"
android:id="@+id/edt_name" />
<EditText
android:layout_width="100px"
android:layout_height="wrap_content"
android:id="@+id/edt_content" />
<TextView
android:text=""
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> <Button
android:onClick="insert"
android:id="@+id/btn_insert"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="click insert"
/>
<Button
android:onClick="show"
android:id="@+id/btn_show"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="click show"
/> </LinearLayout>
再加个界面吧, 一个Activity :
public class MainActivity extends Activity {
String tag="MainActivity";
SQLiteDatabase db;
EditText edt_name ,edt_content;
TextView tv_name;
public void createDB(){
// 捕获异常是因为db.execSQL(sql)方法,如果表已经存在会报异常。
try{
db=SQLiteDatabase.openOrCreateDatabase(getFilesDir().toString()+"test.db", null);
//创建表的sql语句
String sql="create table user(_id integer primary key autoincrement,name varchar(50) ,content varchar(250))";
db.execSQL(sql);
Log.i(tag, "--------createDB()-------");
}catch(Exception e){}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt_name=(EditText) findViewById(R.id.edt_name);
edt_content=(EditText) findViewById(R.id.edt_content);
tv_name =(TextView) findViewById(R.id.tv_name);
this.createDB();
}
public void insert(View v){
String sql="insert into user values(null,?,?)";
String name =edt_name.getText().toString();
String content =edt_content.getText().toString();
String[] bindArgs=new String[]{name,content};
db.execSQL(sql, bindArgs);
Log.i(tag, "--------updata()-------");
}
public void show(View v){
String sql="select * from user";
Cursor cursor = db.rawQuery(sql,null);
while(cursor.moveToNext()){
// 将数据全部显示在TextView中, 很不规范、阅读性很差的代码!!!
tv_name.setText(tv_name.getText().toString()+"\n id="+cursor.getString(0)+" name="+cursor.getString(1)+ " content="+cursor.getString(2));
}
Log.i(tag, "--------show()-------");
}
}
遇到的问题:
1、sql语句出错!
2、sql语句又出错!
3、重复创建表

以上就是原始的SQLiteDatabase操作:
一、 没有insert() 、 updata() 、delete() 、query() 等操作,因为 execSQL() 是万能的!
二、 没有使用SQLiteOpenHelper类 ( 但此类能简化我们对数据库的操作,在下一篇介绍)
补充:Cursor、 SQLiteDatabase 用完之后要close掉
一个很详细的教程:http://www.eoeandroid.com/thread-182378-1-1.html
SQLite数据库操作 (原始操作)的更多相关文章
- Android下的SQLite数据库的相关操作及AndroidTestCase测试
一:创建数据库 package com.itcode.mysqlite; import android.content.Context; import android.database.sqlite. ...
- 安卓基础之Sqlite数据库最最基础操作
Sqlite数据库基础操作 摘要:在应用中新建一个数据库,并创建一个数据表写入数据,然后读取表中数据并展示. 主要逻辑: 1.通过继承SQLiteOpenHelper自定义类,定制数据库的表结构,初始 ...
- sqlite数据库之简单操作
一 sqlite介绍 Sqlite是一种嵌入式数据库,类似于一个文件系统,是跟程序在一起的.跟mysql等数据库程序跟数据分离是不一样的. 应用场景:常用于保存本地配置,类似于本地文件系统,因此他内嵌 ...
- android——SQLite数据库存储(操作)
public class MyDatabaseHelper extends SQLiteOpenHelper { //把定义SQL建表语句成字符串常量 //图书的详细信息 //ID.作者.价格.页数. ...
- C# SQLite 数据库操作
C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0 参考: SQLite 官网 SQL As Understood By SQL ...
- Android数据读取之Sqlite数据库操作
咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作.以一个实例开始吧: 首先,上图,看看做成后的效果: 大概描述:类似于浏览器的收藏夹,网站名称,网站地址, ...
- [Swift通天遁地]七、数据与安全-(5)高效操作SQLite数据库
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Electron中使用sql.js操作SQLite数据库
推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...
- Android SQLite数据库
SQLite数据库 SQLiteDatabase //管理操作数据库 管理 openDatabase //打开 openOrCreateDatabase //打开或创建 操作 ...
随机推荐
- C#将Word,Excel与Html,PDF互转
public class OfficeHelper { /// <summary> /// word转成html /// </summary> /// <param na ...
- mac_Mac item2常用快捷键
整理使用 iTerm 2 过程中得常用快捷键,Mac 原来自带的终端工具 Terminal 不好用是出了名的,虽然最近几个版本苹果稍微做了些优化,功能上,可用性方面增强不少,无奈有个更好用的 Iter ...
- C#中对值类型和引用类型的一点认识
区别值类型和引用类型的重要一点就是值类型赋值的时候是给出一块内存空间,空间里放下要赋给值类型的值.而引用类型是开辟一块内存空间,空间里放下的是要赋给引用类型值的指向地址. 就像一个是复制了银行卡里的现 ...
- spark in eclipse---Spark学习笔记3
想要调试源码,还是要放到eclipse里面去.先生成eclipse项目,下载依赖包 victor@victor-ubuntu:~/software/incubator-spark-0.8.1-incu ...
- javascript常用知识点集
javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...
- 移动客户端与服务端Session那点秘密
众所周知,做过Web开发的小伙伴可能知道,在浏览器向服务器发一个请求,服务器端会为当前的访问者创建一个session会话,随着浏览器的关闭而会话结束.但是移动客户端咋整呢(IOS/Android啥的) ...
- Silverlight 雷达图和一种特殊泡泡画法
原文:Silverlight 雷达图和一种特殊泡泡画法 自上次发了雷达图,也没怎么说一下. 这次又做了一种图,继续共享一下,就是以一个点为中心,周围绕着几个点,用一个箭头与中心相连并带有某些信息.圆 ...
- 编译预处理 -- 带参数的宏定义--【sky原创】
原文:编译预处理 -- 带参数的宏定义--[sky原创] 如有转载请注明出处 编译预处理 -- 带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c ...
- IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权
原文:IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权 上一篇: MyEclipse中消除frame引起的“the file XXX can not be found.Please ...
- installshield 32位打包和64位打包的注意事项
原文:installshield 32位打包和64位打包的注意事项 32/64位问题要把握几点:1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解In ...