`
veryEdu
  • 浏览: 17946 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

android SQLite操作

 
阅读更多
  在程序里面需要保存很多正常人脑袋都记不住的很多数据的时候,正常人都会想用到一个可以帮我们记忆数据的工具,毫无疑问数据库在此时显得尤为重要。android里面集成了sqlite数据库,很多桌面程序都是用的sqlite,比如firefox的数据库,主要因为体积小,这里说的小是跟微软的sql和orcal比较。
  建库建表的过程:继承自SQLiteOpenHelper这个类,名字很形象,数据库的帮助类,意思就是这个类会帮你做一些事情,如果想自己动手最好的办法是去读源码。访问sqlite有很多种方法,这里只是其中一种。
  做个最简单的例子:一个Activity一个DB。先贴源码再解释。
DB类
package opq.database;
import java.util.ArrayList;
import java.util.List;
import opq.entity.StuEntity;
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;

public class DbHelperAdapter {
	public static final String DB_NAME = "test.db";//数据库名
	public static final String TB_NAME = "tbl_stuInfo";//表名
	
	//字段名
	public static final String STU_ID = "_id";
	public static final String STUNAME = "stuName";//学生姓名
	public static final String STUSEX="stuSex";//学生性别
	public static final String STUAGE="stuAge";//学生年龄


	Context context;//上下文对象 
	private TestHelper tHelper;//帮助类
	private SQLiteDatabase db;//数据库对象
	
	public DbHelperAdapter(Context context){
		this.context=context;
	}
	
	/**
	 * 打开数据库连接
	 * @return
	 */
	public DbHelperAdapter open(){
		tHelper = new TestHelper(context);
		db =  tHelper.getWritableDatabase();
		return this;
	}
	/**
	 * 关闭连接
	 */
	public void close(){
		tHelper.close();
	}
	
	/**
	 * 插入数据
	 * @param stu实体类
	 * @return
	 */
	public long create(StuEntity stu){
		ContentValues cv = new ContentValues();
		cv.put(STUNAME,stu.getStuName());
		cv.put(STUSEX,stu.getStuSex());
		cv.put(STUAGE,stu.getStuAge());
		return db.insert(TB_NAME, null, cv);
	}
	
	/**
	 * 删除 
	 * @param stu
	 */
	public void delete(StuEntity stu){
		db.delete(TB_NAME, STU_ID +"="+stu.getStuId() , null);
	}
	
	/**
	 * 更新 整行数据
	 * @param stu
	 */
	public void update(StuEntity stu){
		ContentValues cv = new ContentValues();
		cv.put(STUNAME,stu.getStuName());
		cv.put(STUSEX ,stu.getStuSex());
		cv.put(STUAGE,stu.getStuAge());
		db.update(TB_NAME, cv, STU_ID+"="+stu.getStuId(), null);
                /*最后一个为null 所以是更新整行数据,*/
	}
	/**
	 * 更新单个
	 * @param strTime
	 */
	public void updateTime(String strTime){
		ContentValues cv = new ContentValues();
		cv.put(STUNAME,"yyy");
		db.update(TB_NAME, cv,STU_ID+"=?", new String[] { "0" });
	}
	
	/**
	 * 查询全部
	 * @return
	 */
	public List<StuEntity> getAll(){
		String[] col = {STU_ID, STUNAME , STUSEX,STUAGE};
		Cursor cursor = db.query(TB_NAME, col, null, null, null, null, null);
		List<StuEntity> list = new ArrayList<StuEntity>();
		
		if (cursor.moveToFirst()) {
			do {
				StuEntity stu = new StuEntity();
				stu.setStuId(Integer.valueOf(cursor.getString(0)));
				stu.setStuName(cursor.getString(1));
				stu.setStuSex(cursor.getString(2));
				stu.setStuAge(Integer.valueOf(cursor.getString(3)));
				list.add(stu);
			}while (cursor.moveToNext());
		}
		return list;
	}	
	/*数据库帮助类 内部类*/
	public static class TestHelper extends SQLiteOpenHelper{
		public TestHelper(Context context){
			super(context, DB_NAME, null, 1);
		}
		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			Log.d("TAG","sqliteHelper onCreate");
			String CREATE_TABLE ="create table " +TB_NAME +
					"( " +
					STU_ID+ " integer primary key AUTOINCREMENT,"+
					STUNAME+ " text not null,"+
					STUSEX+" text not null," +
					STUAGE+" int not null "+
					")";
					db.execSQL(CREATE_TABLE);
		}
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub
			db.execSQL("drop table if exists "+TB_NAME);
			onCreate(db);
			Log.d("TAG","sqliteHelper onUpgrade");
		}
	}
}

Activity类
package opq.testdb;

import opq.database.DbHelperAdapter;
import opq.entity.StuEntity;
import android.app.Activity;
import android.os.Bundle;

public class TestdbActivity extends Activity {
	DbHelperAdapter dbHelperAdapter;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        dbHelperAdapter=new DbHelperAdapter(this);
        StuEntity stu=new StuEntity();
        stu.setStuAge(10);
        stu.setStuName("asdf");
        stu.setStuSex("xx");
        dbHelperAdapter.open();
        dbHelperAdapter.create(stu);
        dbHelperAdapter.close();
    }
}

运行该工程文件,就已经创建好了一张表,问题也就随之而来了,怎么知道表已经创建好了呢。先找到点成就感才有兴趣继续玩下去。
  cmd之前先确定模拟器已经启动了,如果模拟器没启动 cmd--adb shell报个什么错忘记了。
打开cmd,敲如下命令行:adb shell  ,如果回车以后看到的是什么内部外部命令的错误信息,则打开android-skd 目录,在platform-tools目录下面找个这么个东西,adb.exe的可运行文件,找到以后把文件路径地址复制到 环境变量PATH里面,这是本人的PATH值 仅供参考:C:\Program Files\Java\jdk1.6.0_26\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Windows7Master;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;D:\Android\android-sdk\platform-tools         
  传说adb.exe这个文件不在platform-tools就在platform里面,如果俩文件夹里面都没有,自己去重新下载android的SDK。
  继续cmd,adb shell以后,敲的所有命令都是linux的,在这个项目里面,敲这样的:
  cd data/data/opq.testdb/databases  回车 中间的opq.testdb是自己定义的包名。这个包名是有意思的,应该写当时创建Android工程项目的时候,都会自动建立一个Activity,cd data/data/(包名)/databases  (包名)=自动建立的Activity所在的包名,因为所有的Android 的程序都是独立的,包括所有的数据也是独立的,不能互相访问,数据库文件必须依托程序而存在,一个sqlite数据库文件对应一个程序,体会一下区别:在java web里面 多个工程可以共用一个sql或者orcal的同一个表空间,在android里面搞同样的事情结果不怎么样只是会报错。
  ls -l 回车
  如果什么都没看到,那是不可能的,正常情况下,会有一个叫做,test.db的文件,这个就是在数据库操作类里面定义的DB_NAME值,继续敲命令:sqlite3 test.db   如果是命令是正确的,最开始的 # 会变成这样:sqlite>  ,敲命令行:  .tables   tables前面还有个点啊。火车以后会看到至少一张表名:android_metadata 还有一张是自己创建的表名:TB_NAME所指定的值,从这里以后,接下来的操作都跟sql  orcal mysql里面的操作一样了,增删改查的语句大同小异。
  开始说SQLiteOpenHelper这个类会帮我们做一些事情,创建这个类以后,它会自动去判断我们指定的数据库文件存不存在,如果存在了则不会去调用onCreate方法,如果数据库文件不存在先建库再调用onCreate方法,在onCreate方法里面写的都是创建表的语句,还有一个  onUpgrade 方法,这个方法本人压根就没发现它被调用过,虽然同样是必须实现的父类方法。
  每次打开数据库连接以后记得关闭连接,就是 open 和 close 必须成对的出现,最后 have fun
分享到:
评论
1 楼 awp258 2011-12-08  
谢谢,能发个源码吗?

相关推荐

    android sqlite操作 demo

    本`android sqlite操作 demo`提供了关于如何在Android应用中使用SQLite进行数据操作的示例。 SQLite在Android中的使用通常包括以下几个步骤: 1. **创建数据库**: 首先,我们需要创建一个SQLite数据库。这通常是...

    Android Sqlite操作类(原创)

    现用项目中Sqlite操作类, 1.数据库初始化 2.数据库版本升级 3.从表中查询数据,并返回ArrayList,简单操作不需要建类 4.单一行查询返回、int 返回、string查询返回

    mono for android sqlite操作示例源代码

    mono for android sqlite操作示例源代码、 包括 sqliteconnection 获取 地址设置 commond 链接,操作 完成了 数据库文件创建,数据库表创建, 内容添加等 没做提示窗口, 请用 Android device logging 查找标签:...

    android sqlite操作源码(含滑动分页)

    本项目"android sqlite操作源码(含滑动分页)"旨在提供一套完整的SQLite数据库操作示例,涵盖了基本的增删改查功能,并且结合了滑动分页技术,这对于处理大量数据的Android应用来说是必不可少的。 首先,我们需要...

    android sqlite操作

    总的来说,Android的SQLite操作涵盖了数据库的创建、使用、事务管理、优化等多个方面,熟练掌握这些知识点对于开发高效、可靠的Android应用程序至关重要。通过实践和不断学习,开发者可以更好地利用SQLite为用户提供...

    android SQLite 操作数据库

    本文将深入探讨如何在Android环境中进行SQLite数据库的操作。 首先,我们需要创建一个SQLite数据库。在Android中,通常通过继承`SQLiteOpenHelper`类来实现。这个类提供了创建、升级和打开数据库的方法。你需要重写...

    Android SQLite学习工具

    这篇博客“Android SQLite学习工具”可能详细介绍了如何在Android环境中使用SQLite进行数据操作,并提供了一个实用的SQLite管理工具——sqlite3.exe。 SQLite数据库在Android中的应用主要包括创建数据库、创建表、...

    android Sqlite基本操作

    为了提高性能和用户体验,可以使用异步任务或Android的`AsyncTask`来处理SQLite操作,避免阻塞主线程。 六、数据库升级 当需要更改数据库结构(如添加、删除或修改表)时,需要增加`DATABASE_VERSION`并实现`...

    android sqlite可视化工具

    为了更方便地管理和操作SQLite数据库,开发者通常会借助一些可视化工具,例如“android sqlite可视化工具”。这类工具提供了图形化的界面,使得数据库的创建、查询、修改和管理变得更加直观和便捷。 “android ...

    Android SQLite数据库操作Demo

    在这个"Android SQLite数据库操作Demo"中,我们将探讨如何在Android应用中创建、查询、更新和删除SQLite数据库的数据。 1. **数据库初始化** 在Android中,我们通常通过扩展SQLiteOpenHelper类来初始化SQLite...

    android Sqlite数据库操作demo

    在这个"android Sqlite数据库操作demo"中,我们可以深入理解如何在Android应用中进行SQLite的增删改查操作。 首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过继承SQLiteOpenHelper类来实现。...

    Android SQLite 增、删、查、改操作源码

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统...在提供的压缩包文件中,应该包含了这些操作的完整源码,你可以通过学习和理解这些代码来进一步提升你在Android SQLite操作上的能力。

    Android SQLite的基本操作Demo

    本教程将详细介绍Android SQLite的基本操作,包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据。 首先,我们需要在Android应用中创建一个SQLiteOpenHelper的子类,这个类是管理SQLite数据库生命...

    Android实验报告Sqlite数据库操作.pdf

    Android SQLite 数据库操作报告 一、实验目的 Android 实验报告的主要目的是熟悉 Android 平台的文件操作、掌握 Android SQLite 数据库的设计和应用、熟悉 XML 和 JSON 文件的读取。通过本实验,用户可以掌握 ...

    Android数据库SQLite详解

    Android中的SQLite操作 - **SQLiteOpenHelper**: 这是Android提供的一个抽象类,用于创建、升级和打开数据库。你需要继承这个类并实现其中的`onCreate()`和`onUpgrade()`方法。 - **onCreate()**: 当数据库首次...

    android sqlite常用操作语句

    android中 sqlite数据库操作中常用的SQL 语句,留下备用,防止出错

    sqlite-android,android sqlite支持库.zip

    SQLite 是一个轻量级的关系型数据库管理系统,广泛应用于移动设备,尤其..."sqlite-android,android sqlite支持库.zip" 提供了针对 Android 平台的 SQLite 最新实现,可以帮助开发者更高效地管理和操作应用程序的数据。

    Android SQLite可视化操作工具

    总之,“Android SQLite可视化操作工具”为Android开发者提供了高效的数据管理手段,减少了与SQLite数据库交互时的复杂性,提高了开发效率。通过熟练掌握这类工具,开发者可以更好地管理和优化应用程序的数据库部分...

    Android SQLite数据库操作demo

    本篇将基于一个名为"Android SQLite数据库操作demo"的示例项目,探讨如何在Android中进行SQLite数据库的相关操作。原作者的博客地址为http://blog.csdn.net/liuhe688/article/details/6715983。 首先,我们来看一下...

    Android SQLite源码+说明

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,允许开发者在移动设备上存储和管理数据。本资料包包含了对Android SQLite的详细文档和源码分析,帮助开发者深入理解其工作原理。 ...

Global site tag (gtag.js) - Google Analytics