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 //打开或创建 操作 ...
随机推荐
- Android游戏开发研究与主角在地图滚动
让人感动的地图过程平滑滚动 玩过rpg朋友应该都知道RPG的游戏地图一般都比較大 今天我和大家分享一下在RPG游戏中怎样来处理超出手机屏幕大小的游戏地图. 如图所看到的为程序效果 ...
- 解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序
原文:[原创]解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序 我更换了新的电脑,操作系统也从原来32位的windows 2003 R2升级到windows 2 ...
- sql级联删除
原文:sql级联删除 功能:在删除主表时,自动删除副表(外键约束)相应内容 删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用.在级联删除中,还删除其外键值引用删除的主键值的所有行. 如: ...
- jenkins综合cobertura,来电显示cobertura的report
我的项目是使用maven作为构建工具.左右maven如何整合jenkins请参阅: http://blog.csdn.net/yaominhua/article/details/40684355 本文 ...
- Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁可是不能切换
Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁可是不能切换 1. 可能你的Alt+Tab键被别人禁用了,试下以下的方法: 1 2. 为什么要禁用Alt+Tab 1 3. ALT+TAB ...
- CSS3制作日历
目标是制作如下面DEMO显示的一个日历效果: HTML Markup 先来看看其结构: <div class="calendar"> <span class=&q ...
- loadrunner必用函数web_reg_save_param获取多个符合边界值条件的使用方法
在做loadrunner性能脚本开发时,常常碰见一个需求:符合web_reg_save_param函数中定义的左右边界值的值有多个,而我们的常规写法默认返回的是符合条件的第一个,而有时我们却需要使用后 ...
- 项目笔记---CSharp图片处理
原文:项目笔记---CSharp图片处理 项目笔记---CSharp图片处理 最近由于项目上需要对图片进行二值化处理,就学习了相关的图片处理上的知识,从开始的二值化的意义到动态阀值检测二值化等等,并用 ...
- [译]JDK 6 and JDK 7中的subString()方法
(说明,该文章翻译自The substring() Method in JDK 6 and JDK 7) 在JDK 6 and JDK 7中的substring(int beginIndex, int ...
- leetcode第四题--Add Two Numbers
Problem: You are given two linked lists representing two non-negative numbers. The digits are stored ...