zoukankan      html  css  js  c++  java
  • Android 数据库 SQLite

    首先关于SQLite的介绍百度上看看就大致了解的差不多了。

    Android 操作数据库的关键步骤就在于实现API SQLiteOpenHelper,通常这个库辅助类来创建或打开数据库。

      废话不多说直接上代码解释吧:

     1 public class PersonDBOpenHelper extends SQLiteOpenHelper {
     2     //context 上下文
     3     //第二个是名字,如果名字空 为内存数据库  数据库名字
     4     //CursorFactory  游标工厂
     5     //version 数据库的版本号 最小为1 
     6     public PersonDBOpenHelper(Context context) {
     7         super(context, "Person.db", null, 3);
     8         // TODO Auto-generated constructor stub
     9         //数据量存放再data/data/包名/database 下
    10     }



    11 /** 12 * 数据量在<b>第一次创建的时候</b>使用的方法 13 * 仅仅是在数据库第一次被创建的时候执行 14 */ 15 @Override 16 public void onCreate(SQLiteDatabase db) { 17 // TODO Auto-generated method stub 18 Log.i("MyTag", "数据库被创建了"); 19 String sql = "create table person (id integer primary key autoincrement," + 20 " name varchar(100), phone varchar(20))"; 21 22 //db.beginTransaction();开始事务 23 db.execSQL(sql); 24 }


    25 //数据库升级的时候被使用 26 //这里面常常添加跟新数据库的sq语句 27 @Override 28 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 29 // TODO Auto-generated method stub 30 Log.i("MyTag", "数据库更新了"); 31 String sql = "insert into person (name,phone)values('zhangsan','110')"; 32 String sql2 = "insert into person (name,phone)values('liss','1520345')"; 33 String sql3 = "insert into person (name,phone)values('nuli','100')"; 34 String sql4 = "insert into person (name,phone)values('fengfou','11001578')"; 35 db.execSQL(sql4); 36 db.execSQL(sql3); 37 db.execSQL(sql2); 38 db.execSQL(sql); 39 Log.i("MyTag", "已经成功的插入了几行数据"); 40 } 41 42 }

      再使用的时候如果只new出来上面的实现类oncreate()方法是不会执行的就是说数据库是不会创建的,通常都是执行了

    getWritableDatabase()或者getReadableDatabase() 之后才会而执行。这点很重要。

    关于数据库的操作有多种实现方法,可以像在javaweb那样操作数据库如下:

    package com.person.dao;
    
    import com.tai.db.PersonDBOpenHelper;
    
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    
    public class PersonDao {
    
        private PersonDBOpenHelper helper;
        
        public PersonDao(Context cont) {
            helper = new PersonDBOpenHelper(cont);
        }
        
        public void add(String name,String phone)
        {
            SQLiteDatabase Database =  helper.getWritableDatabase();
            String sql = "insert into person(name,phone)values(?,?)";
            Database.execSQL(sql, new Object[]{name,phone});
            Database.close();//关闭数据库是为了避免过多的连接
        }
        
        
        public boolean find(String name)
        {
            SQLiteDatabase Database =  helper.getReadableDatabase();
            Cursor cursor = Database.rawQuery("select * from person where name = ?", new String[] {name});
            boolean result = cursor.moveToFirst();
            cursor.close();//游标也是要关闭的
            return result;
        }
        
        public void update(String newphone,String name)
        {
            SQLiteDatabase Database =  helper.getWritableDatabase();
            String sql = "update person set phone = ? where name=?;)";
            Database.execSQL(sql, new Object[]{newphone,name});
            Database.close();
        }
        
        public void delete(String name)
        {
            SQLiteDatabase Database =  helper.getWritableDatabase();
            String sql = "delete from person where name = ?;)";
            Database.execSQL(sql, new Object[]{name});
            Database.close();
        }
        
    }

    要记得再使用过SQLiteDatabase以及游标Cursor后把它关闭。

    上面是通过执行SQL语句来操作数据库,android也给我们提供了方便的API使用方法了可以参照下面的方法

     1 package com.person.dao;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import android.content.ContentValues;
     7 import android.content.Context;
     8 import android.database.Cursor;
     9 import android.database.sqlite.SQLiteDatabase;
    10 import android.util.Log;
    11 
    12 import com.person.bean.Person;
    13 import com.tai.db.PersonDBOpenHelper;
    14 
    15 public class PersonDao2 {
    16 
    17     private PersonDBOpenHelper helper;
    18     
    19     public PersonDao2(Context cont) {
    20         helper = new PersonDBOpenHelper(cont);
    21     }
    22     
    23     public boolean add(String name,String phone)
    24     {
    25         SQLiteDatabase Database =  helper.getWritableDatabase();
    26         ContentValues contentValues = new ContentValues();
    27         contentValues.put("name", name);
    28         contentValues.put("phone", phone);
    29         long id = Database.insert("person", null, contentValues);
    30         Database.close();//关闭数据库是为了避免过多的连接
    31         return id!=-1;
    32     }
    33     
    34     
    35     public boolean find(String name)
    36     {
    37         SQLiteDatabase Database =  helper.getReadableDatabase();
    38         Cursor cursor = Database.query("person", null, "name = ?", new String[]{name}, null, null, null);
    39         boolean result = cursor.moveToFirst();
    40         cursor.close();//游标也是要关闭的
    41         return result;
    42     }
    43     
    44     public boolean update(String newphone,String name)
    45     {
    46         SQLiteDatabase Database =  helper.getWritableDatabase();
    47 //        String sql = "update person set phone = ? where name=?;)";
    48 //        Database.execSQL(sql, new Object[]{newphone,name});
    49         ContentValues contentValues = new ContentValues();
    50         contentValues.put("phone", newphone);
    51         int row = Database.update("person", contentValues, "name = ?", new String[] {name});
    52         Database.close();
    53         return row!=-1;
    54     }
    55     
    56     public boolean delete(String name)
    57     {
    58         SQLiteDatabase Database =  helper.getWritableDatabase();
    59 //        String sql = "delete from person where name = ?;)";
    60 //        Database.execSQL(sql, new Object[]{name});
    61         int row = Database.delete("person", "name = ?", new String[]{name});
    62         Database.close();
    63         Log.i("MyTag", row+"");
    64         return row!=-1;
    65     }
    66     
    67     public List<Person> findAll()
    68     {
    69         SQLiteDatabase Database =  helper.getReadableDatabase();
    70         List<Person> list = new ArrayList<Person>();
    71         Cursor cursor = Database.query("person", null, null, null, null, null, null);
    72             while (cursor.moveToNext()) {
    73             int id = cursor.getInt(cursor.getColumnIndex("id"));
    74             String name = cursor.getString(cursor.getColumnIndex("name"));
    75             String phone = cursor.getString(cursor.getColumnIndex("phone"));
    76             Person person = new Person(id,name,phone);
    77             list.add(person);
    78         }
    79             cursor.close();
    80             Database.close();
    81         return list;
    82     }
    83 }
    这里各个方法的参数都差不多,就是把平时我们用得SQL语句拆分开来,也就query的多一点别的都差不多。
    android.database.sqlite.SQLiteDatabase.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

    String table,表名  String[] columns,要查询列表的列。传递null将返回所有列。String selection,查询条件String[] selectionArgs,查询条件对应的值

    tring groupBy, String having, String orderBy  这些简要易懂和sql一样。

  • 相关阅读:
    编程与操作系统
    maven环境快速搭建
    Maven那点事儿(Eclipse版)
    几种简单的负载均衡算法及其Java代码实现
    Java集合中那些类是线程安全的
    自己随手的一些知识点
    设计模式(一)—— 策略模式
    Unity Audio Source Properties
    [转载]Web前端和后端之区分,以及面临的挑战
    TestNG 与 Junit的比较(转)
  • 原文地址:https://www.cnblogs.com/mauiie/p/3734807.html
Copyright © 2011-2022 走看看