zoukankan      html  css  js  c++  java
  • Android之数据库操作

    安卓数据库帮助类

    /**
     * 数据库帮助类,用于管理数据库
     * @author Administrator
     *
     */
    public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
    
        private String tag="PersonSQLiteOpenHelper";
    
        public PersonSQLiteOpenHelper(Context context) {
        //数据库名,数据库版本号
            super(context, "zj.db", null, 2);
            // TODO Auto-generated constructor stub
        }
    
        /**
         * 数据库第一次创建时调用此方法
         */
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            //操作数据库
            String sql="create table person(_id integer primary key,name varchar(20),age integer);";
            db.execSQL(sql);
    
        }
    
        /**
         * 更新数据库的内容
         */
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            if(oldVersion==1&&newVersion==2)
            {
                Log.i(tag, "数据库更新了");
                //在表中添加一个余额列
                db.execSQL("alter table person add balance interger;");
            }else if(oldVersion==2&&newVersion==3)
            {
                //其他操作
            }
    
        }
    
    }

    其中onCreate只在第一次创建是调用,OnUpergrade在数据库版本号升级,如要修改数据库,为数据库增加一列,或删除一列的情况下使用

    数据库操作

    打开数据库

    private PersonSQLiteOpenHelper mOpenHelper;//数据库帮助类
    
        public PersonDao(Context context)
        {
            mOpenHelper = new PersonSQLiteOpenHelper(context);
    
        }

    由mOpenHelper得到数据库

    SQLiteDatabase db= mOpenHelper.getWritableDatabase();

    此时可设置版本号,便会根据版本号调用OnUpgrate

             db.getVersion();
            db.setVersion(2);

    对数据库增删改查有两种方式

    插入数据 ,直接用SQL语句

    public void insert(Person person)
        {
            SQLiteDatabase db= mOpenHelper.getWritableDatabase();
            if(db.isOpen())
    
            {
                //执行添加的操作
                db.execSQL("insert into person(name, age) values(?, ?);",new Object[]{person.getName(),person.getAge()});
                db.close();
            }
        }

    插入数据方法二

    public void insert(Person person)
        {
            SQLiteDatabase db= mOpenHelper.getWritableDatabase();
            if(db.isOpen())
            {
                ContentValues values=new ContentValues();
                values.put("name", person.getName());
                values.put("age", person.getAge());
                //执行添加的操作
                long id=db.insert("person", null, values);
                Log.i(tag, "id:"+id);
                db.close();
            }
        }

    第一种方法删除与更新

    public void delete(int id)
        {
            SQLiteDatabase db= mOpenHelper.getWritableDatabase();
            if(db.isOpen())
            {
                db.execSQL("delete from person where _id = ?;",new Integer[]{id});
                //执行添加的操作
                db.close();
            }
        }
    
        public void update(int id,String name)
        {
            SQLiteDatabase db= mOpenHelper.getWritableDatabase();
            if(db.isOpen())
            {
                db.execSQL("update person set name = ? where id = ?;",new Object[]{name,id});
                //执行添加的操作
                db.close();
            }
        }

    第二种方法删除与更新

    public void delete(int id)
        {
            SQLiteDatabase db= mOpenHelper.getWritableDatabase();
            if(db.isOpen())
            {
                //执行添加的操作
                String whereClause=" _id = ?";
                String []whereArgs={id+""};
                int count=db.delete("person", whereClause,whereArgs );
                Log.i(tag, "count="+count+"行");
                db.close();
            }
        }
    
        public void update(int id,String name)
        {
            SQLiteDatabase db= mOpenHelper.getWritableDatabase();
            if(db.isOpen())
            {
                //执行添加的操作
                ContentValues values=new ContentValues();
                values.put("name", name);
    
                int count=db.update("person", values, "_id=?", new String[]{id+""});
                Log.i(tag, "修改了count="+count+"行");
                db.close();
            }
        }

    第一种方法查询一项与查询所有

    public List<Person> queryAll()
        {
            SQLiteDatabase db= mOpenHelper.getReadableDatabase();
            if(db.isOpen())
            {
                Cursor cursor= db.rawQuery("select * from person;", null);
                if(cursor!=null&&cursor.getCount()>0)
                {
                    List<Person> personList=new ArrayList<Person>();
                    int id;
                    String name;
                    int age;
                    while(cursor.moveToNext())
                    {
                         id=cursor.getInt(0);
                         name=cursor.getString(1);
                         age=cursor.getInt(2);
                        personList.add(new Person(id, name, age));
    
                    }
                    db.close();
                    return personList;
                }
                db.close();
            }
            return null;
        }
    
        public Person queryItem(int id)
        {
            SQLiteDatabase db= mOpenHelper.getReadableDatabase();
            if(db.isOpen())
            {
                Cursor cursor= db.rawQuery("select * from person where id= ?;", new String []{id+""});
                if(cursor!=null&&cursor.moveToFirst())
                {
                    int id1=cursor.getInt(0);
                    String name=cursor.getString(1);
                    int age=cursor.getInt(2);
                    db.close();
                    return new Person(id1,name,age);
                }
                db.close();
            }
            return null;
        }

    第二种方法查询数据库

    public List<Person> queryAll()
        {
            SQLiteDatabase db= mOpenHelper.getReadableDatabase();
            if(db.isOpen())
            {
                String [] columns={"_id","name","age"};
                String selection=null;
                String[] selectionArgs=null;
                String groupBy=null;
                String having=null;
                String orderBy=null;
    
                Cursor cursor=db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
                int id;
                String name;
                int age;
                if(cursor!=null&&cursor.getCount()>0)
                {
                    List<Person> personList=new ArrayList<Person>();
                    while(cursor.moveToNext())
                    {
                        //向下移一位
                         id=cursor.getInt(0);
                         name=cursor.getString(1);
                         age=cursor.getInt(2);
                        personList.add(new Person(id,name,age));
                    }
                    db.close();
                    return personList;
                }
                db.close();
            }
            return null;
        }
    
        public Person queryItem(int id)
        {
            SQLiteDatabase db= mOpenHelper.getReadableDatabase();
            if(db.isOpen())
            {
                String [] columns={"_id","name","age"};
                String selection="_id=?";
                String[] selectionArgs={id+""};
                String groupBy=null;
                String having=null;
                String orderBy=null;
    
                Cursor cursor=db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
                int _id;
                String name;
                int age;
                if(cursor!=null&&cursor.moveToFirst())
                {
                    _id=cursor.getInt(0);
                    name=cursor.getString(1);
                    age=cursor.getInt(2);
                    db.close();
                    return new Person(_id,name,age);
                }
                db.close();
            }
            return null;
        }

    数据库的事务,防止多线程并发操作

    public void testTransaction()
        {
            PersonSQLiteOpenHelper openHelper=new PersonSQLiteOpenHelper(getContext());
            SQLiteDatabase db= openHelper.getWritableDatabase();
    
            if(db.isOpen())
            {
                try
                {
                //开户事务
                db.beginTransaction();
                //执行业务逻辑
                db.execSQL("update person set balance =balance -1000 where name='zhangsan';");
    
                //ATM机损坏
                //int result=10/0;
                db.execSQL("update person set balance =balance +1000 where name='lisi';");
                //标记事务成功
                db.setTransactionSuccessful();
                }finally
                {
                    //停止事务
                    db.endTransaction();
                }
    
                db.close();
            }
        }
    
        public void testTransationInsert()
        {
            PersonSQLiteOpenHelper openHelper=new PersonSQLiteOpenHelper(getContext());
            SQLiteDatabase db= openHelper.getWritableDatabase();
    
            if(db.isOpen())
            {
                //记录当前时间
                long start=System.currentTimeMillis();
                //开始添加数据
                try
                {
                db.beginTransaction();
                for(int i=0;i<10000;i++)
                {
    
                    db.execSQL("insert into person(name, age, balance) values('wang" + i + "', " + (10 + i) + ", " + (10000 + i) + ")");            
                    }
                db.setTransactionSuccessful();
                }finally
                {
                    db.endTransaction();
                }
    
                //记住结束时间,计算耗时
                long end=System.currentTimeMillis();
                long diff=end-start;
                Log.i(tag, "耗时:"+diff+"ms");
                db.close();
            }
        }

    Android数据库基本操作完成

  • 相关阅读:
    php配置修改后,平滑启动php-fpm
    php-fpm参数调优
    php-fpm 高并发 参数调整 转
    redis分布式锁
    MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容
    MySQL中information_schema 数据库 是干什么的
    Mysqldump参数大全 这 些参数 不同于 mysql 的那些参数(下边文章开头有链接) :2 种类型的参数含义是不一样的
    mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数(下边文章开头有链接) :2种类型的参数 含义是不一样的
    not found 什么时候触发
    intellJ svn控制错误
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223738.html
Copyright © 2011-2022 走看看