zoukankan      html  css  js  c++  java
  • Android入门:SQLite


    一、SQLite介绍


    SQLite是一个小型的内嵌于Android的数据库;我们不需要引入驱动即可访问它;

    SQLite可视化工具:SQLite Expert Professional 3;


    二、Android访问SQLite


    主要步骤:


    (1)创建某个类继承SQLiteOpenHelper,并重写

    -- 带Context参数的构造函数; //用来创建数据库
    -- onCreate(SQLiteDatabase db); //在创建数据库时调用
    -- onUpgrade(SQLiteDatabase db,int old,int newversion);  //数据库版本更改时调用

    (2)创建数据库:SQLiteDatabase db = helper.getWritableDatabase();

    (3)SQL语句:db.execSQL(String sql);


    具体模板代码如下:


    package org.xiazdong.db.util;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
    public class DatabaseHelper extends SQLiteOpenHelper{
    	private static final String TAG = "DatabaseHelper";
    	private static  int VERSION = 1;
    	public DatabaseHelper(Context context) {
    		super(context, "test.db", null, VERSION);
    	}
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		db.execSQL("create table 语句");
    	}
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		Log.i(TAG, "版本更新...");
    	}
    }
    

    当创建数据库时,database存放在/data/data/package/databases 目录中;


    1.打开数据库


    SQLiteDatabase db = helper.getWritableDatabase();
    SQLiteDatabase db = helper.getReadableDatabase(); //此函数内部其实也调用了getWritableDatabase()函数,即调用了此函数,也可以写数据

    2.insert语句


    (1)db.execSQL("insert into person(name,age) values(?,?)",new Object[]{"xiazdong",20});
    (2)
    ContentValues values = new ContentValues();
    values.put("name","xiazdong");
    values.put("age",20);
    db.insert("tablename",null,values);

    3.delete语句


    (1)db.execSQL("delete from person where id=?",new Object[]{id});
    (2)db.delete("tablename","id=?",new String[]{id+""});

    4.update语句


    (1)
    db.exeSQL("update person set age=? where name=?",new Object[]{30,"xiazdong"});
    (2)
    ContentValues values = new ContentValues();
    values.put("age",30);/*set子句*/
    db.update("tablename",values,"name=?"/*where子句*/,new String[]{"xiazdong"}/*where子句参数*/);

    5.query语句


    (1)
    Cursor cursor = db.rawQuery("select * from person where name=?",new Object[]{"xiazdong"});
    while(cursor.moveToNext()){
        //int index = cursor.getColumnIndex(String name);//根据name获得索引
        //String name = cursor.getString(int index);    //根据索引获得值
        String name = cursor.getString(cursor.getColumnIndex("name")); 
    }

    (2)
    Cursor cursor = db.query("tablename",null/*表示select * */,"name=?"/*where语句*/,new String[]{"xiazdong"},null/*group by 语句*/,null/*having 语句*/,null/*order by语句*/,null/*limit 语句*/);

    6.分页语句


    Cursor cursor = db.rawQuery("select * from person limit ?,?",new Object[]{5,5});    //第一个5表示跳过5条记录,下一个5为查询结果的记录个数
    while(cursor.moveToNext()){
        String name = cursor.getString(cursor.getColumnIndex("name")); 
    }

    7.获得记录个数语句


    (1)
    Cursor cursor = db.rawQuery("select count(*) from person", null);
    cursor.moveToFirst();
    int count = cursor.getInt(0);

    (2)
    db.query("person",new String[]{"count(*)"},null,null,null,null,null,null);

    三、事务操作


    模板代码如下:

    db.beginTransaction();
    try{
    	//事务操作
    	db.setTransactionSuccessful();//此句必须要有,不然db.endTransaction()默认为回滚
    }
    finally{
    	db.endTransaction();
    }



  • 相关阅读:
    如何正确记忆单词
    转:超级通用型分页存储过程
    Delphi报表开发ReportMachine的小计和总计的计算
    DELPHI编程用SQLDMO呈现带进度条的SQL Server数据库Databnse备份!
    datasnap 2010 心跳包,连接断开处理
    合并BPL包图文教程
    Borland DataSnap(MIDAS)三层架构编程中,主细表的处理方式
    网上摘的 杀进程函数
    为RB定制支持参数的自定义函数
    获取一个数据库中的所有表的名称、一个表中所有字段的名称
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3057993.html
Copyright © 2011-2022 走看看