轻量级数据库sqlite的使用

本文不涉及一些概念性的东西,请大家多多原谅

这个就是Android sqlite的简单框架。

使用sqlite 大概分为3步

第一步:创建自己的sqliteopenhelper类

第二步:创建数据库中的dao层 ,其中分装了对数据库的操作

第三步:在activity 中使用dao层的操作了(多线程的形式,防止卡界面)

第一步:创建 sqliteopenhelper

/**
 * @author skyfin
 *@time 2015/6/4
 */
public class MyDatabase extends SQLiteOpenHelper {

	/**
	 * 数据库的名字
	 */
	public final static String DB_NAME = "ClassaateInfo";

	/**
	 * 数据库的版本号
	 */
	public final static int VERSION = 1;

	/**
	 * @param 默认构造的函数
	 */
	public MyDatabase(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO 自动生成的构造函数存根
	}

	public MyDatabase(Context context, String name, CursorFactory factory,
			int version, DatabaseErrorHandler errorHandler) {
		super(context, name, factory, version, errorHandler);
		// TODO
	}

	/**
	 * @param 为了每次不用传入数据库名和版本信息
	 */
	public MyDatabase(Context context) {
		this(context, DB_NAME, null, VERSION);
	}

	/**
	 * @param 为了更新数据库名和版本信息
	 */
	public MyDatabase(Context context, int version) {
		this(context, DB_NAME, null, version);
	}

	/*
	 * (非 Javadoc)
	 *
	 * @see
	 * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
	 * .SQLiteDatabase)
	 * 创建了数据库 主键 id name 和phone
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO 创建数据库对数据库的操作
		String sql = "create table IF NOT EXISTS student"+"("
				+ "id int primary key autoincrement," + "name varchar(20),"
				+ "phone int)";
		db.execSQL(sql);
	}

	/* (非 Javadoc)
	 * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
	 *
	 * 更改数据库版本的操作
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO 更改数据库版本的操作
		//String sql = "updete student ";
		//db.execSQL(sql);
	}

	@Override
	public void onOpen(SQLiteDatabase db) {
		// TODO 打开数据库
		super.onOpen(db);
	}

}

第二步:创建StudentDao 封装了 相关的操作

public class StudentDao {

	MyDatabase myDatabase = null;

	public StudentDao(Context context) {
		myDatabase = new MyDatabase(context);
	}

	public StudentDao(Context context, int version) {
		myDatabase = new MyDatabase(context, version);
	}

	/**
	 *
	 * @param 实现数据的插入
	 */
	public void insertData(Student stu) {

		/*
		 * 方法一 使用了(?)的占位符 ,重载后的execSQL(String sql, Object[] bindArgs)方法
		 */

		// try {
		// Log.i("skyfin", "insert datebase" + stu.id);
		// String sql = "insert into student(id,name,phone)values(?,?,?)";
		// SQLiteDatabase db = myDatabase.getWritableDatabase();
		// db.execSQL(sql, new Object[] { stu.id, stu.name, stu.phone });
		// db.close();
		// } catch (Exception e) {
		// e.printStackTrace();
		// // TODO: handle exception
		// }

		/*
		 * 方法二 使用了 ContentValues字段存放的形式
		 */
		SQLiteDatabase db = myDatabase.getWritableDatabase();
		ContentValues values = new ContentValues();

		values.put("id", stu.id);
		values.put("name", stu.name);
		values.put("phone", stu.phone);

		long rowid = db.insert("student", null, values);// 返回新添记录的行号,与主键id无关
		db.close();
	}

	// 测试
	public void insert() {

		Log.i("skyfin", "test");
	}

	public void seleteAll() {

		/*
		 *
		 * 方法一  query 形式
		 */

		 try {
		 Log.i("skyfin", "select  datebase");
		 String sql = "select  * from student";

		 SQLiteDatabase db = myDatabase.getWritableDatabase();
		 // 产生一个新的游标,游标课向前和向后
		 Cursor cursor = db.rawQuery(sql,null);
		 while(cursor.moveToNext()){
		 int id = cursor.getInt(cursor.getColumnIndex("id"));
		 String name = cursor.getString(cursor.getColumnIndex("name"));
		 int phone = cursor.getInt(cursor.getColumnIndex("phone"));
		 //日志打印输出
		 Log.i("skyfin","query-->"+"id: "+id+"name: "+name+"phone: "+phone);
		 }
		 db.close();
		 } catch (Exception e) {
		 // TODO 自动生成的 catch 块
		 e.printStackTrace();
		 }

		/*
		 *
		 * 方法二  query 形式
		 */
//		try {
//			SQLiteDatabase db = myDatabase.getWritableDatabase();
//			Cursor cursor = db.query("student",
//					new String[] { "id","name","phone" }, null,
//					null, null, null, null, null);
//
//			while (cursor.moveToNext()) {
//				Log.i("skyfin", "cursor");
//				int id = cursor.getInt(cursor.getColumnIndex("id"));
//				String name = cursor.getString(cursor.getColumnIndex("name"));
//				int phone = cursor.getInt(cursor.getColumnIndex("phone"));
//				// 日志打印输出
//				Log.i("skyfin", "query-->" + "id: " + id + "name: " + name
//						+ "phone: " + phone);
//
//			}
//			cursor.close();
//			db.close();
//		} catch (Exception e) {
//			// TODO 自动生成的 catch 块
//			e.printStackTrace();
//		}

	}

	public void update() {
		try {
			SQLiteDatabase db = myDatabase.getWritableDatabase();

			//ContentValues 是一种 key -value 的形式 ,类似于map
			ContentValues values = new ContentValues();

			values.put("id", 1020);//key为字段名,value为值
			values.put("name","doubi");
			values.put("phone", 1234);
			//update 函数后面表示 条件
			db.update("student", values, "id=?", new String[]{"123"});
			db.close();
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}

	}
	public void delete(){
		SQLiteDatabase db = myDatabase.getWritableDatabase();
		//和update类似
		db.delete("student", "id<?", new String[]{"2000"});
		db.close();
	}

}

最后在 Activity中使用

public class MainActivity extends Activity implements OnClickListener {

	public StudentDao studentDao = null;
	public EditText edit_Id= null;
	public EditText edit_Name= null;
	public EditText edit_Phone= null;
	public Button ok_btn = null;
	public Button show_btn = null;
	public Button update_btn = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        studentDao = new StudentDao(getApplicationContext());
        edit_Id = (EditText)findViewById(R.id.id);
        edit_Name = (EditText)findViewById(R.id.name);
        edit_Phone = (EditText)findViewById(R.id.phonenum);
        ok_btn = (Button)findViewById(R.id.ok);
        show_btn = (Button)findViewById(R.id.show);
        update_btn = (Button)findViewById(R.id.update);
        ok_btn.setOnClickListener(this);
        show_btn.setOnClickListener(this);
        update_btn.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

	@Override
	public void onClick(View v) {
		// TODO 自动生成的方法存根

		switch (v.getId()) {
		case R.id.ok:
			Toast.makeText(getApplicationContext(), "点击了确认按钮", Toast.LENGTH_SHORT).show();
			Log.i("skyfin", "insert into datebase");

			final Student student = new Student();
			student.setId(Integer.parseInt(edit_Id.getText().toString()));
			student.setName(edit_Name.getText().toString());
			student.setPhone(Integer.parseInt(edit_Phone.getText().toString()));

			Log.i("skyfin", student.toString());
		    new Thread(new Runnable() {

				@Override
				public void run() {
					Log.i("skyfin", "insert thread is running");
					studentDao.insertData(student);

				}
			}).start();

			break;
		case R.id.show:
			 new Thread(new Runnable() {

					@Override
					public void run() {
						Log.i("skyfin", "select  thread is running");
						studentDao.seleteAll();

					}
				}).start();
			break;

		case R.id.update:
			 new Thread(new Runnable() {

					@Override
					public void run() {
						Log.i("skyfin", "update  thread is running");
						studentDao.update();
						//studentDao.delete();

					}
				}).start();
			break;
		default:
			break;
		}
	}
}

dome下载地址

时间: 2024-12-15 17:13:44

轻量级数据库sqlite的使用的相关文章

轻量级数据库sqlite的编译

sqlite是很多客户端程序所使用的一种轻量级数据库,但是目前没有lib文件,只有源码和dll文件,我们可以利用VS工具生成lib,然后在应用程序中使用. (1)下载地址 http://www.sqlite.org/download.html (2)下载库文件和源码 库:sqlite-amalgamation-3081002.zip 源码:sqlite-dll-win32-x86-3081002.zip (3)使用VS命令行工具生成lib 命令行为 LIB /DEF:sqlite3.def /m

轻量级数据库sqlite的接口说明

原文地址:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html 一.使用流程 要使用sqlite,需要从sqlite官网下载到三个文件,分别为sqlite3.lib,sqlite3.dll,sqlite3.h,然后再在自己的工程中配置好头文件和库文件,同时将dll文件放到当前目录下,就完成配置可以使用sqlite了. 使用的过程根据使用的函数大致分为如下几个过程: sqlite3_open() sqlite3_prepare

sqlite( 轻量级数据库)

sqlite(轻量级数据库) 1.为什么要使用数据库呢? 文件读写, NSUserDefualts, 归档, 写入的过程是覆盖, 效率比较低, 并且不支持针对某些数据的修改 2.数据库: 存放数据的仓库 数据库以表的形势存放数据 每个表都有字段, 用于标示存什么样的数据 在字段中, 有一种特殊的字段(主键), 主键数据是唯一, 不重复, 用于区分数据使用 3.常用的数据库: Oracle, SQLServer, access, sqlite(轻量级数据库, 体积小, 占用内存小, 能够满足基本的

ios UI数据库 sqlite小型数据库的增、删、改、查、排序

#import "table.h" @implementation table // 1.创建表 每一列之间用',',如果存在就不创建 create table if not exists t_class( class_id integer primary key autoincrement, class_name varchar, person_count integer default 0) // 1.1// 删除表 drop table if exists t_person //

【转】afinal来操作android的数据库sqlite

今天给大家介绍下#afinal#来操作android的数据库sqlite. #afinal#是一个android的orm.ioc快速开发框架,里面包含了四大功能:空间的id绑定和事件绑定功能:网络图片的显示功能(里面包含了强大的缓存框架):数据库sqlite的操作功能:http数据的读取功能(支持ajax方式读取): #afinal#开源网址:https://github.com/yangfuhai/afinal 这篇文章主要是介绍afinal的功能之一FinalDb组件,其他组件请关注我的博客

Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题

做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹...会遇到找不到数据库文件的问题.当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没有则创建出这个文件,然后建立连接.当在Android平台上时,扯淡的事情就开始了,总之便不

IOS中使用轻量级数据库

目录 概述 IOS中的轻量级数据库 第三方类库 概述 IOS中的轻量级数据库 第三方类库

Android - 插入数据库(SQLite)错误

插入数据库(SQLite)错误 本文地址: http://blog.csdn.net/caroline_wendy Error: android.database.sqlite.SQLiteException: no such table: step (code 1): ,  while compiling: INSERT INTO step(duration,date,counter) VALUES (?,?,?). 错误:插入数据库错误,没有找到表,插入表的地方写入参数,而参数地方传入空值.

android listview级联三菜单选择地区,本地数据库sqlite级联地区,item选中不变色

前言:因为找了N多网上的资源都没有好的解决方案,别人都是只给思路没给具体源码,真TMD纠结,干嘛求别人,自己动手才是真,最痛恨那些所谓大牛的作风,给了点点代码就让别人去想,你让我们这种小白情何于堪!!!!!!此例是基于listview来实现本地sqlite实现的! 二话不说,程序猿求的是有图有真相有源码!大家下载后有什么问题可以找到本人:QQ508181017 核心代码如下 1.数据库操作类 package com.icq.demo.db; import java.util.ArrayList;