SQLite使用基础

Sqlite3学习笔记 1、触发器 Trigger 说明: a)sqlite3触发器只支持FOR EACH ROW,不支持FOR EACH STATMENT,即只能对行的增删改进行监听,不能对单条SQL语句进行监听 b)sqlite3触发器触发的执行结果只能执行DML操作,无法执行DDL操作   基本用法: 阅读详情
    数据库的增删改查操作,实现对封装了bean的操作。

建表:
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABLE_NAME + "(" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + _USERNAME
+ " TEXT NOT NULL," + _PASSWORD + " TEXT)";
Log.i(TAG, sql);
db.execSQL(sql);
}
增加数据:
    ①利用sql语句
public void add(User u) {
String sql = "INSERT INTO " + TABLE_NAME + "(" + _USERNAME + ", "
+ _PASSWORD + ") VALUES(?,?)";
Log.i(TAG, sql);
db.execSQL(sql, new Object[] { u.getUserName(), u.getPassWord() });
}
    ②高级做法
public void add_(User u) {
ContentValues values = new ContentValues();
 
values.put(_USERNAME, u.getUserName());
values.put(_PASSWORD, u.getPassWord());
db.insert(TABLE_NAME, null, values);
}
db.insert(TABLE_NAMEnullvalues);
    ①参数一:表名
    ②参数二: 可选的,一般为空,当values参数为空或者里面没有内容的时候,insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里设置一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。

删除数据:
    ①利用sql语句
public void del(int id) {
String sql = "DELETE FROM " + TABLE_NAME + " WHERE " + _ID + "= ?";
Log.i(TAG, sql);
db.execSQL(sql, new Object[] { id });
}
    ②高级做法
public void del_(int id) {
String whereClause = _ID + " = ?";
String[] whereArgs = { id + "" };
db.delete(TABLE_NAME, whereClause, whereArgs);
}
db.delete(TABLE_NAMEwhereClausewhereArgs) 
    参数一:表名
    参数二:where后面添加的条件,看好格式
    参数三:条件中?参数的值的数组

更改数据:
    ①利用sql
public void update(User u) {
String sql = "UPDATE " + TABLE_NAME + " SET " + _USERNAME + " = ?,"+ _PASSWORD + "= ?" + " WHERE " + _ID + "=?";
Log.i(TAG, sql);
db.execSQL(sql, new Object[] { u.getUserName(), u.getPassWord(), u.getId() });
}
    ②推荐做法
public void update_(User u) {
 
ContentValues values = new ContentValues();
values.put(_USERNAME, u.getUserName());
values.put(_PASSWORD, u.getPassWord());
 
String whereClause = _ID + "=?"; //可以有多个条件的
String[] whereArgs = { u.getId() + "" };
db.update(TABLE_NAME, values, whereClause, whereArgs);
}
db.update(TABLE_NAMEvalueswhereClausewhereArgs) : 荐做法
    参数一:表名
    参数二:更改之后的ContentValues 类型的值
    参数三:条件语句,格式
    参数四:条件中?号所对应的值

查询数据:
    ①sql语句做法
public List<User> queryAll() {
List<User> list = new ArrayList<User>();
String sql = "SELECT * FROM " + TABLE_NAME;
Log.i(TAG, sql);
Cursor cursor = db.rawQuery(sql, null);
 
while (cursor.moveToNext()) {
User u = new User();
u.setId(cursor.getInt(cursor.getColumnIndex(_ID)));
u.setUserName(cursor.getString(cursor.getColumnIndex(_USERNAME)));
u.setPassWord(cursor.getString(cursor.getColumnIndex(_PASSWORD)));
list.add(u);
}
 
return list;
}
    ②高级用法
public List<User> queryAll_() {
List<User> list = new ArrayList<User>();
 
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null,
null);
while (cursor.moveToNext()) {
User u = new User();
u.setId(cursor.getInt(cursor.getColumnIndex(_ID)));
u.setUserName(cursor.getString(cursor.getColumnIndex(_USERNAME)));
u.setPassWord(cursor.getString(cursor.getColumnIndex(_PASSWORD)));
list.add(u);
}
return list;
}
db.query(tablecolumnsselectionselectionArgsgroupByhavingorderBy)  上面都给空,代表就是select * from user;
    参数一:表名
    参数二:需要查询的字段
    参数三:筛选的语句,类似于where中的条件
    参数四:筛选条件中的值
    参数四:为分组增加条件
    参数五:分组之后的条件
    参数六:排序
还有三个构造方法。看名称就能看懂。

实现分页的功能的查询:
public Cursor query(int currentPage,int pageSize){
int start=(currentPage-1)*pageSize;
String limit=start+","+pageSize; //和sql语句基本一样
Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null, null, limit);
return cursor;
}

整体的代码:
import java.util.ArrayList;
import java.util.List;
 
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
 
import com.mixm.bean.User;
 
public class UserDBHelper {
private static final String TAG = "UserDBHelper";
private static final String DATABASE_NAME = "user.db";
private static final int VERSISON = 1;
private static final String TABLE_NAME = "user";
private static final String _ID = "id";
private static final String _USERNAME = "username";
private static final String _PASSWORD = "password";
 
private UserHelper userHelper;
private SQLiteDatabase db;
 
// 内部类
class UserHelper extends SQLiteOpenHelper {
 
public UserHelper(Context context) {
super(context, DATABASE_NAME, null, VERSISON);
}
 
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABLE_NAME + "(" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + _USERNAME
+ " TEXT NOT NULL," + _PASSWORD + " TEXT)";
Log.i(TAG, sql);
db.execSQL(sql);
}
 
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
}
 
}
 
public UserDBHelper(Context context) {
userHelper = new UserHelper(context);
db = userHelper.getWritableDatabase();
}
 
// 普通
public void add(User u) {
String sql = "INSERT INTO " + TABLE_NAME + "(" + _USERNAME + ", "
+ _PASSWORD + ") VALUES(?,?)";
Log.i(TAG, sql);
db.execSQL(sql, new Object[] { u.getUserName(), u.getPassWord() });
}
 
// 高级 一般做法
public void add_(User u) {
ContentValues values = new ContentValues();
 
values.put(_USERNAME, u.getUserName());
values.put(_PASSWORD, u.getPassWord());
db.insert(TABLE_NAME, null, values);
}
 
public void del(int id) {
String sql = "DELETE FROM " + TABLE_NAME + " WHERE " + _ID + "= ?";
Log.i(TAG, sql);
db.execSQL(sql, new Object[] { id });
}
 
public void del_(int id) {
String whereClause = _ID + " = ?";
String[] whereArgs = { id + "" };
db.delete(TABLE_NAME, whereClause, whereArgs);
}
 
public void update(User u) {
String sql = "UPDATE " + TABLE_NAME + " SET " + _USERNAME + " = ?,"
+ _PASSWORD + "= ?" + " WHERE " + _ID + "=?";
Log.i(TAG, sql);
db.execSQL(sql,
new Object[] { u.getUserName(), u.getPassWord(), u.getId() });
}
 
public void update_(User u) {
 
ContentValues values = new ContentValues();
values.put(_USERNAME, u.getUserName());
values.put(_PASSWORD, u.getPassWord());
 
String whereClause = _ID + "=?";
String[] whereArgs = { u.getId() + "" };
db.update(TABLE_NAME, values, whereClause, whereArgs);
}
 
public List<User> queryAll() {
List<User> list = new ArrayList<User>();
String sql = "SELECT * FROM " + TABLE_NAME;
Log.i(TAG, sql);
Cursor cursor = db.rawQuery(sql, null);
 
while (cursor.moveToNext()) {
User u = new User();
u.setId(cursor.getInt(cursor.getColumnIndex(_ID)));
u.setUserName(cursor.getString(cursor.getColumnIndex(_USERNAME)));
u.setPassWord(cursor.getString(cursor.getColumnIndex(_PASSWORD)));
list.add(u);
}
 
return list;
}
 
public List<User> queryAll_() {
List<User> list = new ArrayList<User>();
Cursor cursor = db
.query(TABLE_NAME, null, null, null, null, null, null);
while (cursor.moveToNext()) {
User u = new User();
u.setId(cursor.getInt(cursor.getColumnIndex(_ID)));
u.setUserName(cursor.getString(cursor.getColumnIndex(_USERNAME)));
u.setPassWord(cursor.getString(cursor.getColumnIndex(_PASSWORD)));
list.add(u);
}
return list;
}
}
AndroidSQLiteOpenHelper类(SQLlite数据库操作)详细解析 前言 SQLite数据库操作在Android开发中非常常用今天我将带大家全面了解关于SQLite数据库的操作(增、删、查、改) 目录 1. SQLite数据库介绍 SQLiteAndroid内置的一个小型、关系型、属于文本型的数据库。 Android提供了对 SQLite数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库 阅读详情

相关推荐

Sqlite触发器关键字

关键字:  :NEW :OLD使用方法意义,new 只出现在insertupdate时,old只出现在updatedelete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。  oldnew指代的不是要触发修改的表,指代的是触发器依赖的表。

liu149339750的专栏 1391

基于eclipse的android项目实战—博学谷(九)个人资料界面

本项目是用eclipse软件编写,经过我的亲自实践,其真实有效,希望能给您有所帮助???????? 项目版本:android4.0 AVD建议:android4.4及以上 文章目录效果图:1.创建个人资料界面布局文件`activity_user_info.xml`2.创建UserBean3.创建用户信息表4.DBUtils工具类5.个人资料界面逻辑代码 效果图: 个人资料界面主要用于显示用户信息,其中包含用户头像、用户名、昵称、性别签名, 除了头像用户名不可修改之外,其余信息均可修改 1.创建个人资

雨云21的博客 6307

Android 操作SQLite基本用法

Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面。本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的。 一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,

拿铁加不加糖 18万+

轻型数据库SQLite结合PHP的开发

轻型数据库SQLite结合PHP的开发SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源

.NET博文收藏 505

java链接sqlite轻型数据库

package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; /** * @author 作者:tony chan * @email 邮箱:chenzs@tedu.cn * @versi

长安紫薯的专栏 535

Sqlite轻型数据库初级理解

SQLite简介:Android四种数据存储方式的一种,SQLite是用c语言编写的开源嵌入式数据库引擎,它支持大多数sqlL92标准(可以简单的理解为支持大部分的sql语句),并且可以在所有主要的操作系统中运行。SQLite是一个轻型数据库引擎,但是它可以存储高达2T的数据,每一个数据库是以单个文件的形式进行存在,数据以B-Three的数据结构进行存储在磁盘(data/data/包名/项目名)。

qq_29781195的博客 1462

asp.net中配置使用Sqlite轻型数据库

Sqlite 管理工具 SQLiteDeveloper及破解 功能特点 表结构设计,数据维护,ddl生成,加密数据库支持,sqlite2,3支持 唯一缺憾,收费,有试用期 破解方法: 注册表删除 HKEY_CURRENT_USER\SharpPlus\Sqlit...

chutisun0039的博客 140

c#操作轻型数据库SQLite

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两

ghevinn欢迎您光临 1813

轻型数据库SQLiteAndroid实例

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两

ITSource的专栏 1416

SQLite简单介绍

SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口。SQLite第一个Alpha版本诞生于2000年5月。

qq_45726327的博客 6446

Access、SQLite,我该如何选择?

SQLiteAccess,二者都是常用的轻型关系型数据库系统。在DB-Engines的数据库排名中,二者排名都比较靠前,名次也很接近,说明使用两种数据库的人群还都不少,很多朋友在二者之间难以选择。 SQLite:我虽渺小却锋利顽强! SQLite,是一款轻型的,遵守ACID的关系型数据库管理系统,她包含在一个相对小的C库中。主要为嵌入式应用设计,在很多嵌入式产品中应用广泛,她占用资源非常的低,只需要几百K的内存就够了。 笔者早年用过很多年Access,主要用作本地数据存储,对Access的品性

木牛的博客 1万+

SQLite---强大的轻型数据库

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL

Kiven's blog 2257
上一篇: Spinner初步了解
下一篇: SQLiteOpenHelper类
Yo_Hack
博客等级 码龄12年 2粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值