数据库Sqlite(创建,增删改查)详细介绍

01_android下数据库的创建(重点)

在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 
但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后面的数据类型信息,如下面语句你可以省略 name字段的类型信息:



CREATE TABLE person (_id integer primary key autoincrement, name varchar(20));

SQLite可以解析大部分标准SQL语句,如:

查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句
如:select * from person
        select * from person order by id desc
        select name from person group by name having count(*)>1
分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘传智’,3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10
删除语句:delete from 表名 where 条件子句。如:delete from person  where id=10

获取添加记录后自增长的ID值:SELECT last_insert_rowid()


SQLiteOpenHelper:管理数据库的版本;

在android应用程序中创建按数据库的步骤:
1、写一个DBHelper,继承了SQLiteOpenHelper,重新写了父类的构造方法、onCreate、onUpGrade:
	//创建数据库
	DBHelper helper = new DBHelper(this, "account.db", null, 1);

	
    onCreate是在数据库创建的时候调用的,主要用来初始化数据表结构和插入数据初始化的记录
    
	onUpGrade是在数据库版本升级的时候调用的,主要用来改变表结构
    
2、调用db = helper.getWritableDatabase(),得到数据对象


数据库的存储位置:/data/data/包名/databases/数据库名

##02_数据库sql语句的增删改查

##03_android下数据库的增删改查(重点)

代码:

	package com.itheima.db;

	import android.app.Activity;
	import android.database.Cursor;
	import android.database.sqlite.SQLiteDatabase;
	import android.os.Bundle;
	import android.view.View;
	
	public class MainActivity extends Activity {
	
		private SQLiteDatabase db;
	
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			setContentView(R.layout.activity_main);
	
			DBHelper helper = new DBHelper(this, "itheima.db", null, 1);
			db = helper.getWritableDatabase();
	
		}
	
		public void insert(View view) {
	
			db.execSQL("insert into account (name,money) values ('liufeng','1000000')");
	
		}
	
		public void update(View view) {
	
			db.execSQL("update account set money = '10000000' where name='liufeng'");
	
		}
	
		public void query(View view) {
			// 查询数据库返回一个结果集
			Cursor cursor = db.rawQuery("select * from account where name = ?",
					new String[] { "liufeng" });


	
			while (cursor.moveToNext()) {
				int id = cursor.getInt(0);
				
				String name = cursor.getString(1);
				
				String money = cursor.getString(2);
				
				System.out.println("id="+id+"; name="+name+"; money="+money);
			}
			cursor.close();
		}
		
		public void delete(View view) {
	
			db.execSQL("delete from account where name=?",new String[]{"liufeng"});
	
		}
	}

##04_数据库的另外一种增删改查方法(重点)

代码:

  • DBHelper.java:

      package com.itheima.db;
    
      import android.content.ContentValues;
      import android.content.Context;
      import android.database.Cursor;
      import android.database.sqlite.SQLiteDatabase;
      import android.database.sqlite.SQLiteDatabase.CursorFactory;
      import android.database.sqlite.SQLiteOpenHelper;
      
      public class DBHelper extends SQLiteOpenHelper {
      
      	/**
      	 * 
      	 * @param context
      	 *            上下午对象
      	 * @param name
      	 *            数据库的名称
      	 * @param factory
      	 *            游标工厂 ,null表示使用系统默认的游标工厂
      	 * @param version
      	 *            数据库的版本号,最小为1,升级时版本号应该增加
      	 */
      	public DBHelper(Context context, String name, CursorFactory factory,
      			int version) {
      		super(context, name, factory, version);
      	}
      
      	// public DBHelper(Context context) {
      	// super(context, name, factory, version);
      	// }
      
      	/**
      	 * 初始化数据库实例时调用这个方法 创建表结构,添加初始数据记录
      	 * 
      	 * db:数据库实例对象
      	 */
      	@Override
      	public void onCreate(SQLiteDatabase db) {
      		System.out.println("======onCreate============");
      
      		String sql = "create table account (_id integer primary key autoincrement,name varchar(20),money varchar(20))";
      		// 创建表结构
      		db.execSQL(sql);
      	}
      
      	public void insert(SQLiteDatabase db, String table, ContentValues values) {
      
      		// //使用类似map的数据结构存储数据
      		// ContentValues values = new ContentValues();
      		// values.put("name", "liufeng");
      		// values.put("money", "1000000");
      		// 插入数据
      		db.insert("account", null, values);
      
      		// 如果不关闭,数据库连接会一直存在导致内存不够用或者数据库被锁定
      		db.close();
      	}
      
      	public void update(SQLiteDatabase db, String table, ContentValues values,
      			String whereClause, String[] whereArgs) {
      
      		// //使用类似map的数据结构存储数据
      		// ContentValues values = new ContentValues();
      		// values.put("name", "liufeng");
      		// values.put("money", "1000000");
      		// 插入数据
      		db.update(table, values, whereClause, whereArgs);
      
      		// 如果不关闭,数据库连接会一直存在导致内存不够用或者数据库被锁定
      		db.close();
      	}
      
      	public Cursor query(SQLiteDatabase db, String table, String[] columns,
      			String selection, String[] selectionArgs, String groupBy,
      			String having, String orderBy) {
      
      		Cursor cursor = db.query(table, columns, selection, selectionArgs,
      				groupBy, having, orderBy);
      
      		return cursor;
      
      	}
      
      	public void delete(SQLiteDatabase db, String table, String whereClause,
      			String[] whereArgs) {
      
      		db.delete(table, whereClause, whereArgs);
      
      		db.close();
      	}
      
      	/**
      	 * 升级数据库时调用这个方法
      	 * 
      	 * 修改表结构,升级数据库
      	 */
      	@Override
      	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      
      		System.out.println("======onUpgrade============");
      	}
      
      }
    

MainActivity.java:

	package com.itheima.db;
	
	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;
	
	public class MainActivity extends Activity {
	
		private SQLiteDatabase db;
		private DBHelper helper;
	
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			setContentView(R.layout.activity_main);
	
			helper = new DBHelper(this, "itheima.db", null, 1);
			db = helper.getWritableDatabase();
	
		}
	
		public void insert(View view) {
	
			// 使用类似map的数据结构存储数据
			ContentValues values = new ContentValues();
			values.put("name", "liufeng");
			values.put("money", "1000000");
			helper.insert(db, "account", values);
	
		}
	
		public void update(View view) {
	
			// db.execSQL("update account set money = '10000000' where name='liufeng'");
	
			ContentValues values = new ContentValues();
			values.put("money", "10000000");
			helper.update(db, "account", values, "name=?",
					new String[] { "liufeng" });
	
		}
	
		public void query(View view) {
			// 查询数据库返回一个结果集
			Cursor cursor = helper.query(db, "account", new String[] { "name",
					"money" }, "name=?", new String[] { "liufeng" }, null, null,
					null);
	
			while (cursor.moveToNext()) {
	
				String name = cursor.getString(0);
	
				String money = cursor.getString(1);
	
				System.out.println(" name=" + name + "; money="
						+ money);
			}
	
			cursor.close();
		}
	
		public void delete(View view) {
	
			helper.delete(db, "account", "name=?", new String[]{"liufeng"});
	
		}
	}

##05_命令行查看数据库

使用SQLite的命令查看远程设备上的数据库;
步骤:
	1.使用adb shell :切换到linux系统中;
	2.使用cd命令切换到 数据库文件 所在的目录:/data/data/com.itheima.sqlite/databases/
	3.使用sqlite3 数据库文件名.db 打开数据库;

##06_数据库的事务(重点)
事务:一组数据库操作要么同时成功要么同时失败;

从liufeng账户转出100万,给panxu;

liufeng-1000000
panxu+1000000

示例:

public void trans() {

	// //使用类似map的数据结构存储数据
	// ContentValues values = new ContentValues();
	// values.put("name", "liufeng");
	// values.put("money", "1000000");
	// 插入数据
	
	SQLiteDatabase db = this.getWritableDatabase();
	
	try {
		//开启事务
		db.beginTransaction();

		ContentValues values = new ContentValues();
		values.put("money", "9900000");
		db.update("account", values, "name=?", new String[]{"liufeng"});
		
		ContentValues values02 = new ContentValues();
		values02.put("money", "100100");
		db.update("account", values, "name=?", new String[]{"panxu"});

		//告诉数据库事务提交成功
		db.setTransactionSuccessful();


		values.put("money", "9900000");
		db.update("account", values, "name=?", new String[]{"liufeng"});
		
		ContentValues values02 = new ContentValues();
		values02.put("money", "100100");
		db.update("account", values, "name=?", new String[]{"panxu"});


		....

	} catch (Exception e) {
		
		e.printStackTrace();
	}finally{
		//结束事务
		db.endTransaction();
	}
	// 如果不关闭,数据库连接会一直存在导致内存不够用或者数据库被锁定
	db.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值