Android数据库操作

Posted wlytctw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android数据库操作相关的知识,希望对你有一定的参考价值。

SQLite数据库的一般操作包括:创建数据库、创建表、向表中添加数据、从表中删除数据、修改表中的数据、关闭数据库、删除指定表、删除数据库和查询表中的某条数据。

1、重写SQLiteOpenHelper 类

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 AppSQLHelper extends SQLiteOpenHelper 
    /**
     * 当前数据库版本(最新版本)
     */
    public final static int version = 1;
    /**
     * 数据库名
     */
    public final static String SQL_NAME = "AppDataBase";


    public AppSQLHelper(Context context, String name, CursorFactory factory,
            int version) 
        super(context, name, factory, version);
    

    @Override
    public void onCreate(SQLiteDatabase db) 
        creatTables(db);
    

    private void creatTables(SQLiteDatabase db) 
        if (db == null)
            return;
        db.execSQL("CREATE TABLE IF NOT EXISTS appRunTimeToday(_id integer primary key autoincrement, appid integer, name varchar(20), stepNumber integer)");


        upgradeTo2(db);
    

    /* 1.0.1数据库新增的数据表 */
    private void upgradeTo2(SQLiteDatabase db) 

    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        switch (oldVersion) 
        case 1:
            upgradeTo2(db);
            break;

        default:
            break;
        
    

    public void closeCursor(Cursor cursor)
        if(cursor == null)
            return;
        cursor.close();
    

    public void closeDataBase(SQLiteDatabase db)
        if(db == null)
            return;
        db.close();
    

    public void closeDbAndCursor(SQLiteDatabase db, Cursor cursor)
        closeCursor(cursor);
        closeDataBase(db);
    

2、定义数据库字段


public class SQLColumns 
    public static String TABLE_NAME ="appRunTimeToday";
    public static String APPID = "appid";
    public static String NAME ="name";
    public static String STEPNUMBER = "stepNumber";

3、定义JavaBean


import java.io.Serializable;

public class AppInfo implements Serializable
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private int appid;
    private String name;
    private int stepNumber;

    public AppInfo()

    


    public AppInfo(int appid, String name, int stepNumber) 
        super();
        this.appid = appid;
        this.name = name;
        this.stepNumber = stepNumber;
    
    public int getAppid() 
        return appid;
    
    public void setAppid(int appid) 
        this.appid = appid;
    
    public String getName() 
        return name;
    
    public void setName(String name) 
        this.name = name;
    
    public int getStepNumber() 
        return stepNumber;
    
    public void setStepNumber(int stepNumber) 
        this.stepNumber = stepNumber;
    
    @Override
    public String toString() 
        return "AppInfo [name=" + name + ", stepNumber=" + stepNumber + "]";
    


3、数据库常见操作。为了方便所以对其 数据库的操作进行了封装

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.wangly.database.AppSQLHelper;
import com.wangly.database.bean.AppInfo;
import com.wangly.database.utils.SQLColumns;

public class DataBaseManger 
    public static DataBaseManger dBadapter = null;
    private AppSQLHelper openHelper;

    private DataBaseManger(Context context) 
        this.openHelper = new AppSQLHelper(context, AppSQLHelper.SQL_NAME, null, AppSQLHelper.version);
    

    public static synchronized DataBaseManger getNotedBadapter(Context context)
        if(dBadapter == null)
            dBadapter = new DataBaseManger(context);
        return dBadapter;
    


    /**
     * 向表中插入数据
     * @param info
     */
    public boolean insert(AppInfo info)
        long i = 0;
        SQLiteDatabase db = openHelper.getWritableDatabase();
        //开始事务
        try
            i = db.insert(SQLColumns.TABLE_NAME, null, converToValues(info));
            //事务成功
        catch(Exception e)
            e.printStackTrace();
        finally
            openHelper.closeDataBase(db);
            //结束事务
        
        return i>0;
    


    private ContentValues converToValues(AppInfo info)
        ContentValues vaules = new ContentValues();
        vaules.put(SQLColumns.APPID, info.getAppid());
        vaules.put(SQLColumns.NAME, info.getName());
        vaules.put(SQLColumns.STEPNUMBER, info.getStepNumber());

        return vaules;
    

    /**
     * 删除表中全部数据
     * @return
     */
    public boolean deleteAll()
        SQLiteDatabase db = openHelper.getWritableDatabase();
        return db.delete(SQLColumns.TABLE_NAME, null, null) > 0;
    


    /**
     * 删除表中数据
     * @return
     */
    public boolean delete(String name)
        SQLiteDatabase db = openHelper.getWritableDatabase();
        return db.delete(SQLColumns.TABLE_NAME, SQLColumns.NAME+"'" + name+"'", null) > 0;
    


    /**
     * 查询全部数据
     * @return
     */
    public synchronized ArrayList<AppInfo> queryAll()
        SQLiteDatabase  db = openHelper.getReadableDatabase();
        ArrayList<AppInfo> list = new ArrayList<AppInfo>();
        Cursor cursor = null;
        try
            cursor = db.query(SQLColumns.TABLE_NAME, null, null, null, null, null, null);
            if(cursor == null)
                return list;
            cursor.moveToFirst();
            do
                AppInfo noteSQLInfo = cursorToInfo(cursor);
                list.add(noteSQLInfo);
            while(cursor.moveToNext());
        catch(Exception e)
            e.printStackTrace();
        finally
            openHelper.closeDbAndCursor(db, cursor);
        
        return list;
    

    /**
     * 通过游标(Cursor)来获取数据
     * @param cursor
     */
    private AppInfo cursorToInfo(Cursor cursor)
        AppInfo info = new AppInfo();
        info.setAppid(cursor.getInt(cursor.getColumnIndex(SQLColumns.APPID)));
        info.setName(cursor.getString(cursor.getColumnIndex(SQLColumns.NAME)));
        info.setStepNumber(cursor.getInt(cursor.getColumnIndex(SQLColumns.STEPNUMBER)));
        return info;
    
    /**
     * 修改表中数据
     */
    public boolean update(AppInfo info)
        SQLiteDatabase db = openHelper.getWritableDatabase();
        try
            int result = db.update(SQLColumns.TABLE_NAME, converToValues(info), SQLColumns.APPID+"'" + info.getAppid()+"'", null);
            if(result > 0)
                return true;
            
        catch(Exception e)
            e.printStackTrace();
        finally
            openHelper.closeDataBase(db);
        
        return false;
    


    /**
     * 采取分页的方法进行读取数据内容
     * 
     * @param begain 从什么位置开始
     * @param end    到什么位置结束
     * @return persons  集合
     */
    public List<AppInfo> getScroolDate(int begain, int end) 
        List<AppInfo> persons = new ArrayList<AppInfo>();
        SQLiteDatabase db = openHelper.getReadableDatabase();
        Cursor cursor = null;
        try 
            cursor = db
                    .rawQuery(
                            "select * from"+ SQLColumns.TABLE_NAME+" order by personid asc limit ?,?",
                            new String[]  String.valueOf(begain),
                                    String.valueOf(end) );
            while (cursor.moveToNext()) 
                int appid = cursor.getInt(cursor.getColumnIndex(SQLColumns.APPID));
                String name = cursor.getString(cursor.getColumnIndex(SQLColumns.NAME));
                int step = cursor.getInt(cursor.getColumnIndex(SQLColumns.STEPNUMBER));
                persons.add(new AppInfo(appid, name, step));
            
         catch (Exception e) 

         finally 
            openHelper.closeDbAndCursor(db, cursor);
        
        return persons;
    


    /**
     * 获得数据库的总条目数
     * 
     * @return result 总数
     */
    public long getCount() 
        SQLiteDatabase db = openHelper.getReadableDatabase();
        Cursor cursor = null;
        long result = 0;
        try 
            cursor = db.rawQuery("select count(*)from "+SQLColumns.TABLE_NAME, new String[] );
            cursor.moveToFirst();
            result = cursor.getLong(0);
         catch (Exception e) 
            // TODO: handle exception
         finally 
            openHelper.closeDbAndCursor(db, cursor);
        
        return result;
    

以上是关于Android数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Wifi 网络共享模式下查找连接的设备总数和详细信息?

如何获得总数。行数,在 SQLite 中使用 LIMIT 时

plsql怎么看查询的数据总数

Android 方法数 65k 限制与 LinearAlloc 限制

软件测试中执行覆盖率怎么计算。

[Android] Android统计Apk , jar包方法数