sqlite的增删改查详解

增删改查源代码:

myHelper.java

package com.example.sqlite3lianxi;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class myHelper extends SQLiteOpenHelper {

	/*
	 *  参数(上下文,数据库文件名称,工厂游标,数据库文件版本号)
	 */
	public myHelper(Context context, String name, CursorFactory factory, int version) {
		super(context, "people.db", null,version);
	}
  
	//数据库文件创建成功后调用
	@Override
	public void onCreate(SQLiteDatabase db) {
		//SQLiteDatabase db是一个数据库操作对象
		//注意如果本地有数据库了就不会执行此方法了
		db.execSQL("create table people(id integer,name text)");
		System.out.println("创建成功!");
	}
	
	//数据库文件需要更新时调用
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		System.out.println("数据库更新完成!");
	}
	
}

MainActivity.java

package com.example.sqlite3lianxi;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//注意这句话执行后并没有创建数据库,仅创建了对象而已
		myHelper helper=new myHelper(getBaseContext(),null, null, 2);
		//当执行完这句话才创建完成数据库
		helper.getWritableDatabase();
		
	
	}
	//增加数据
	public void insert() {
		//创建数据库对象
		myHelper helper=new myHelper(getBaseContext(),null, null, 2);
		//返回数据库操作对象
		SQLiteDatabase database=helper.getReadableDatabase();
		
		ContentValues values=new ContentValues();
		values.put("name","老王");
		values.put("name","老李");
		//返回一个id数据的id,如果插入失败返回-1
		//参数(表名,null,插入的价值)
		long g=database.insert("people", null, values);
		
		//关闭数据库连接
		database.close();
	}
	
		//删除数据
		public void delete() {
			//创建数据库对象
			myHelper helper=new myHelper(getBaseContext(),null, null, 2);
			//返回数据库操作对象
			SQLiteDatabase database=helper.getReadableDatabase();
			
			//参数(表名,删除条件,删除条件的价值)
			//返回受影响的行数i
			int t=database.delete("people","name=?",new String[] {"老刘"});
		
			//关闭数据库连接
			database.close();
		}
		
			  //修改数据
				public void update() {
					//创建数据库对象
					myHelper helper=new myHelper(getBaseContext(),null, null, 2);
					//返回数据库操作对象
					SQLiteDatabase database=helper.getReadableDatabase();
					ContentValues values=new ContentValues();
					//参数(表名,要修改的值,修改条件,修改条件的值)
					values.put("name","小红");
					//返回受影响的行数i
					//如果要更改全部的数据表可以不指定条件     .update("people",null,null);
					int t=database.update("people", values,"name=?",new String[] {"老李"});
					
				}
				//查询数据
				public void query() {
					//创建数据库对象
					myHelper helper=new myHelper(getBaseContext(),null, null, 2);
					//返回数据库操作对象
					SQLiteDatabase database=helper.getReadableDatabase();
					/*  参数:
					 *  distinct是否去除重复的数据
					 * 	table表名,columns要查询的列
					 * 	selection筛选条件规则
					 * 	selectionArgs筛选条件规则的值
					 * 	grounBy分组
					 * 	having分组筛选
					 * 	orderBy排序	//升序或降序
					 * 	limit分页
					 */
					//返回查询到的结果集
					Cursor cursor=database.query(true, "people", new String[] {"name"},null, null,null,null,null,null);
					//遍历结果集
					while(cursor.moveToNext()) {
						
						String name=cursor.getString(cursor.getColumnIndex("name"));
						System.out.println("name="+name);
					}
				
					//关闭数据库连接
					database.close();
				}
}


增删改查小结:

我们要实现sqlite的增删改查就要写一个类继承自SQLiteOpenHelper 类
并重新两个方法一个构造方法 :


   //参数(上下文,数据库文件名称,工厂游标,数据库文件版本号号
    public myHelper(Context context, String name, CursorFactory factory, int version);
   
    //数据库文件创建成功后调用
     @Override
   public void onCreate(SQLiteDatabase db){};
   
    //数据库文件需要更新时调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){}

让后在主MainActivity中去实例化它,它返回数据库操作对象,并用此数据库操作对象实现数据库的增删改查

你会发现,用此封装好的数据库操作对象,来实现数据库的增删改查,使用一些简单的SQL语句还可以,但是实现复杂的SQL语句就不行了,因此我们就要用到SQL的原生语句,我们使用返回数据库操作象点execSQL(sql语句)方法进行复杂的SQL语句使用;

例:
增删改我们使用 :
execSQL();方法

但是增删改没有返回结果集我们可以使用execSQL()方法
但我们要查询结果返回结果集,我们就不能使用execSQL()方法了,因此我们要使用

例:
查询我们使用 :
db.rawQuery(筛选条件的sql语句,筛选条件的值);
它返回一个查询到的结果集

//遍历结果集
                    while(cursor.moveToNext()) {

                        //db.getString(0);此参数传入列的索引
 //如果传入列的索引麻烦,你还可以使用getColumnIndex("name")方法通过列名 获取列的索引
                        String name=cursor.getString(cursor.getColumnIndex("name"));
                        System.out.println("name="+name);
                    }
                }

sqlite事务

这里写图片描述
这里写图片描述

使用原生SQL语句

这里写图片描述

为什么要关闭SQL的数据库连接问题 :

这里写图片描述

据上图所示:
每执行一次helper.getReadableDatabase();或者 helper.getWritableDatabase方法将连接一次数据库
而数据库的连接是
有限的**,过多的连接会造成资源的浪费,所以每次连接数据库,执行完相应的功能模块之后我们一定要使用关闭数据库方法**close();**关闭数据库

更加具体的sqlite详解传送门:http://www.runoob.com/w3cnote/android-tutorial-sqlite-intro.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王家视频教程图书馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值