`

android 数据库操作 (非ContentProvider)

 
阅读更多
这里有个概念上需要纠正的东西,ContentProvider是android中共享数据的机制,而不是操作数据库的机制,android的数据库是sqlite。
下面演示如何建立数据库和操作它。
首先要来个SQLiteOpenHelper子类。

    public class DatabaseHelper extends SQLiteOpenHelper {  
      
        private final static String NAME="sharp.db" ;   
        public DatabaseHelper(Context context, String name, CursorFactory factory,  
                int version) {  
            super(context, name, factory, version);  
            // TODO Auto-generated constructor stub  
        }  
        public DatabaseHelper(Context context){  
            super(context, NAME, null, 1 );  
        }  
      
        /**  
         * 用户第一次使用软件时调用,实现数据库的操作crud  
         */  
        @Override  
        public void onCreate(SQLiteDatabase db) {  
            // TODO Auto-generated method stub  
            Log.i("save" ,  "create" );  
            db.execSQL("create table person(personid integer primary key autoincrement,name varcahr(20),age integer)" );  
        }  
      
        @Override  
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
            // TODO Auto-generated method stub  
            db.execSQL("drop table if exists person" );  
            onCreate(db);  
        }  
        /**  
         * 根据版本号进行更新  
         * @param db  
         * @param mNewVersion  
         */  
        public void checkVersionCreate(SQLiteDatabase db,int mNewVersion){  
            int version = db.getVersion();  
            if (version != mNewVersion) {  
            db.beginTransaction();  
            try {  
            if (version == 0 ) {  
            onCreate(db);  
            }else{  
            onUpgrade(db, version,mNewVersion);  
            }  
            db.setVersion(mNewVersion); //设置为新的版本号  
            db.setTransactionSuccessful();  
            }  
            finally{  
            db.endTransaction();  
            }  
            }  
        }  
        /**  
         * 数据库名不空,获得数据库实例  
         * @param mDatabase  
         * @param mContext  
         * @param mName  
         * @param mFactory  
         * @return  
         */  
        public SQLiteDatabase getDatabase(SQLiteDatabase mDatabase,Context mContext,String mName,CursorFactory mFactory){  
                if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) {  
                    return mDatabase; // The database is already open for business  
                    }  
                if (mName == null) {  
                    mDatabase = SQLiteDatabase.create(null);  
                    } else {  
                        mDatabase = mContext.openOrCreateDatabase(mName, 0 , mFactory);  
                    }  
                return mDatabase;  
            }  
    }  



然后再写个类来进行db的操作。
public   class  DbService {  
    private  DatabaseHelper databaseHelper;  
    private  Context context;  
    public  DbService(Context context){  
        this .context=context;  
        databaseHelper=new  DatabaseHelper( this .context);  
    }  
    //保存   
    public   void  save(Person person){  
        SQLiteDatabase db = databaseHelper.getWritableDatabase();  
        db.execSQL("insert into person(name, age) values(?,?)" , new  Object[]{person.getName(), person.getAge()});  
        }  
    //更新   
    public   void  update(Person person){  
        SQLiteDatabase db = databaseHelper.getWritableDatabase();  
        db.execSQL("update person set name=?,age=? where personid=?" ,  
        new  Object[]{person.getName(), person.getAge(),  
        person.getId()});  
        }  
    //根据id查找   
    public  Person find(Integer id){  
        SQLiteDatabase db = databaseHelper.getReadableDatabase();  
        Cursor cursor = db.rawQuery("select personid,name,age from person where personid=?" ,  new  String[]{String.valueOf(id)});  
        if (cursor.moveToNext()){  //迭代记录集   
        Person person = new  Person(); //实例化person   
        person.setId(cursor.getInt(cursor.getColumnIndex("personid" )));  
        person.setName(cursor.getString(1 ));  
        person.setAge(cursor.getInt(2 ));  //将查到的字段,放入person,   
        return  person;  
        }  
        cursor.close();//游标关闭   
        return   null ;  
        }  
    //删除   
    public   void  delete(Integer id){  
        SQLiteDatabase db=databaseHelper.getWritableDatabase();  
        db.execSQL("delete from person where id=?" , new  Object[]{id});  
    }  
    //   
    public  List<Person> getScrollData( int  firstResult,  int  maxResult){  
        List<Person> persons = new  ArrayList<Person>();  
        SQLiteDatabase db = databaseHelper.getReadableDatabase();  
        Cursor cursor = db.rawQuery("select personid,name,age from person limit ?,?" ,  
        new  String[]{String.valueOf(firstResult),String.valueOf(maxResult)});  //firstResult开始索引   
        while (cursor.moveToNext()){  //maxResult每页获取的记录数   
        Person person = new  Person();  
        person.setId(cursor.getInt(cursor.getColumnIndex("personid" )));  
        person.setName(cursor.getString(1 ));  
        person.setAge(cursor.getInt(2 ));  
        persons.add(person);  
        }  
        cursor.close();  
        return  persons;  
        }  
    //   
    public   long  getCount(){  
        SQLiteDatabase db = databaseHelper.getReadableDatabase();  
        Cursor cursor = db.rawQuery("select count(*) from person" ,  null );  
        //没有占位符参数的话,直接用null   
        cursor.moveToFirst();  
        long  count = cursor.getLong( 0 );  
        cursor.close();  
        return  count;  
        }  
    //   
    public   void  close(){  
        databaseHelper.close();  
        }  
}   

当然Person是自己写的一个java bean。对Person信息的封装而已。
好了,这样你就可以完成对数据库和表的创建以及相关操作了。
分享到:
评论

相关推荐

    android 数据库 以及自定义ContentProvider demo

    首先,我们来了解Android数据库。Android系统使用SQLite作为默认的轻量级数据库,它支持SQL语法,适用于小型数据存储。在Android中,我们通常通过SQLiteOpenHelper这个类来创建、升级和管理数据库。这个类提供了...

    Android+Room+ContentProvider

    其他应用可以通过ContentResolver访问这些数据,使用标准的URI和ContentProvider操作。 综上所述,Android Room简化了SQLite数据库的管理,提供了更友好的编程接口,而ContentProvider则为数据共享提供了统一的入口...

    Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作

    接下来,我们将深入探讨如何使用ContentProvider和SQLite在Android应用中执行数据库操作。 首先,SQLite在Android中的应用非常广泛。每个Android应用程序可以拥有一个或多个SQLite数据库,这些数据库存储在应用程序...

    Android实现使用自定义ContentProvider共享生词本数据库

    Android高级编程雪梨作业之自定义ContentProvider 将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交...

    android 创建数据库contentprovider

    `android 创建数据库contentprovider`这个主题主要涉及如何创建一个自定义的ContentProvider来管理数据库中的数据,并实现跨应用的数据共享。以下是对这个主题的详细阐述: 一、ContentProvider概述 ...

    android数据库操作封装

    "android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...

    contentprovider实现数据库访问

    通过实现ContentProvider并配合SQLite数据库,我们可以方便地实现数据的增、删、改、查操作。同时,通过自定义组件和Adapter,可以灵活地展示和管理这些数据。理解并熟练掌握ContentProvider的使用,对于提升Android...

    ContentProvider实现数据库操作

    本示例通过ContentProvider实现了对SQLite数据库的增删改查(CRUD)操作,展示了如何利用ContentProvider来增强应用的数据管理功能和扩展性。 首先,理解ContentProvider的基本结构至关重要。ContentProvider是一个...

    Android数据库ContentProvider封装原理.pdf

    "Android数据库ContentProvider封装原理" Android操作系统中的数据库管理是通过ContentProvider来实现的,而ContentProvider是一个抽象类,提供了标准化的接口来访问和管理应用程序的数据。ContentProvider可以提供...

    android数据库操作实例

    总结来说,这个"android数据库操作实例"涵盖了Android应用中使用SQLite数据库的基础知识,包括创建数据库、定义表结构、插入、查询、更新和删除数据等操作。通过学习这个实例,开发者可以更好地理解如何在Android...

    你想要Android数据库操作精华(安全、并发、单例等)

    本Demo——"你想要的Android数据库操作精华(安全、并发、单例等)",旨在深入探讨如何在Android Studio环境下进行高效且安全的数据库操作,包括使用数据库框架、数据库加密、并发控制以及单例模式的应用。...

    android 数据共享(ContentProvider)

    ContentProvider提供了一种标准化的机制,使得不同的应用程序可以安全、有序地访问和共享数据,无论这些数据是存储在SQLite数据库、文件系统还是其他持久化存储中。下面我们将深入探讨ContentProvider的工作原理及其...

    Android数据库SQLite详解

    本文将深入探讨SQLite在Android中的使用,包括基本概念、数据库操作以及实际应用示例。 ### 1. SQLite基本概念 - **数据库**: 数据库是存储和组织数据的结构化系统,SQLite在Android中表现为一个数据库文件,扩展...

    android 数据库代码和资料

    本资源包提供了完整的Android数据库代码示例和详细的讲解资料,非常适合开发者深入学习和理解Android数据库的使用。 首先,我们来了解一下Android中主要使用的数据库系统——SQLite。SQLite是一个轻量级、嵌入式的...

    contentprovider操作数据库

    现在,我们来看如何实现一个简单的ContentProvider操作数据库的Demo: 1. **定义Contract类**:创建一个名为`DatabaseContract`的类,定义数据表的列名和URI常量。例如: ```java public final class ...

    ContentProvider操作数据库小例子

    在这个小例子中,我们将深入理解如何利用ContentProvider来操作SQLite数据库,并展示查询结果到ListView。 首先,让我们了解ContentProvider的基本结构。一个ContentProvider类需要继承自`android.content....

    Android ContentProvider简单实现

    在Android开发中,ContentProvider是四大组件之一,它充当了数据共享的桥梁,使得不同的应用程序之间可以安全地访问和共享数据。本篇文章将详细介绍如何在Android中实现一个简单的ContentProvider。 首先,理解...

    Android 之 自定义ContentProvider的使用

    在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的角色。自定义ContentProvider允许开发者创建自己的数据存储解决方案,并与其他应用程序无缝交互。这篇博客将深入探讨如何在...

    Android第八章ContentProvider

    ContentProvider的insert、query、update和delete方法会对应到SQLite数据库的相应操作。这种方式使得数据管理更加规范,同时也方便了数据的跨应用共享。 六、权限控制 ContentProvider可以设置访问权限,限制其他...

    android数据库系统源码

    本文将深入解析"android数据库系统源码",并以其基础的图书管理系统为例,探讨如何通过源码理解ContentProvider的基本实现。 首先,Android中的SQLite数据库是一个轻量级、事务型的关系型数据库,它被集成到Android...

Global site tag (gtag.js) - Google Analytics