zoukankan      html  css  js  c++  java
  • sqlite数据库学习

    1.0版代码:

    package com.swust.sqlitedatabase.test;
    
    import com.swust.sqlitedatabase.myOpenHelper;
    
    
    import android.database.sqlite.SQLiteDatabase;
    import android.test.AndroidTestCase;
    
    public class TestCase extends AndroidTestCase {
        public void test(){
            //第一个参数:this->现在应用没启动,没有,真正的时候用this。所以获取虚拟上下文getContext()
            //第二个参数:数据库文件
            //第四个参数:版本号
            //recNO字段是系统的,无视
            myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
            //如果数据库不存在,先创建数据库,再获取可读可写数据库对象,如果数据存在,就直接打开
            SQLiteDatabase db=moh.getWritableDatabase();
            //创建对象也可读可写,如果存储空间满了,那么返回只读数据库对象
            //SQLiteDatabase db=moh.getReadableDatabase();
        }
        public void insert(){
            myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
            SQLiteDatabase db=moh.getWritableDatabase();
            //数据库char ,double等都是字符串,因为这个轻量级数据不检测数据
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
            db.close();
        }
    }

    插入后:

    删除:

    public void delete(){
            myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
            SQLiteDatabase db=moh.getWritableDatabase();
            db.execSQL("delete from person where name =?",new Object[]{"王**"});
        }

    之后,字段名字为“王**”的被删除

    效果:

    -------------------------------------

    代码未优化:

    package com.swust.sqlitedatabase.test;
    
    import com.swust.sqlitedatabase.myOpenHelper;
    
    
    import android.database.sqlite.SQLiteDatabase;
    import android.test.AndroidTestCase;
    
    public class TestCase extends AndroidTestCase {
        public void test(){
            //第一个参数:this->现在应用没启动,没有,真正的时候用this。所以获取虚拟上下文getContext()
            //第二个参数:数据库文件
            //第四个参数:版本号
            //recNO字段是系统的,无视
            myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
            //如果数据库不存在,先创建数据库,再获取可读可写数据库对象,如果数据存在,就直接打开
            SQLiteDatabase db=moh.getWritableDatabase();
            //创建对象也可读可写,如果存储空间满了,那么返回只读数据库对象
            //SQLiteDatabase db=moh.getReadableDatabase();
        }
        public void insert(){
            myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
            SQLiteDatabase db=moh.getWritableDatabase();
            //数据库char ,double等都是字符串,因为这个轻量级数据不检测数据
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
            db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王树青大学",25.34,"12.345"});
            db.close();
        }
        public void delete(){
            myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
            SQLiteDatabase db=moh.getWritableDatabase();
            db.execSQL("delete from person where name =?",new Object[]{"王**"});
        }
    }

    优化后:

    package com.itheima.sqlitedatabase.test;
    
    import com.itheima.sqlitedatabase.MyOpenHelper;
    
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.test.AndroidTestCase;
    
    public class TestCase extends AndroidTestCase {
    
        //此时测试框架还没有初始化完毕,没有虚拟上下文对象
    //    private MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
        private MyOpenHelper oh;
        private SQLiteDatabase db;
        public void test(){
            //getContext():获取一个虚拟的上下文
            MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
            //如果数据库不存在,先创建数据库,再获取可读可写的数据库对象,如果数据库存在,就直接打开
            SQLiteDatabase db = oh.getWritableDatabase();
            //如果存储空间满了,那么返回只读数据库对象
    //        SQLiteDatabase db = oh.getReadableDatabase();
        }
        
        //测试框架初始化完毕之后,在测试方法执行之前,此方法调用
        @Override
        protected void setUp() throws Exception {
            super.setUp();
            
            oh = new MyOpenHelper(getContext(), "people.db", null, 1);
            db = oh.getWritableDatabase();
        }
    
        //测试方法执行完毕之后,此方法调用
        @Override
        protected void tearDown() throws Exception {
            // TODO Auto-generated method stub
            super.tearDown();
            db.close();
        }
        
        public void insert(){
            
    //        db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的老婆[1]", "13000", 138438});
    //        db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的儿子", 14000, "13888"});
            db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"});
        }
        
        public void delete(){
            db.execSQL("delete from person where name = ?", new Object[]{"小志"});
        }
        
        public void update(){
            db.execSQL("update person set phone = ? where name = ?", new Object[]{186666, "小志的儿子"});
        }
        
        public void select(){
            Cursor cursor = db.rawQuery("select name, salary from person", null);
            
            while(cursor.moveToNext()){
                //通过列索引获取列的值
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String salary = cursor.getString(1);
                System.out.println(name + ";" + salary);
            }
        }
        
        public void insertApi(){
            //把要插入的数据全部封装至ContentValues对象
            ContentValues values = new ContentValues();
            values.put("name", "游天龙");
            values.put("phone", "15999");
            values.put("salary", 16000);
            db.insert("person", null, values);
        }
        
        public void deleteApi(){
            int i = db.delete("person", "name = ? and _id = ?", new String[]{"小志的儿子", "3"});
            System.out.println(i);
        }
        
        public void updateApi(){
            ContentValues values = new ContentValues();
            values.put("salary", 26000);
            int i = db.update("person", values, "name = ?", new String[]{"游天龙"});
            System.out.println(i);
        }
        
        public void selectApi(){
            Cursor cursor = db.query("person", null, null, null, null, null, null, null);
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String phone = cursor.getString(cursor.getColumnIndex("phone"));
                String salary = cursor.getString(cursor.getColumnIndex("salary"));
                System.out.println(name + ";" + phone + ";" + salary);
            }
        }
        
        public void transaction(){
            try{
                //开启事务
                db.beginTransaction();
                ContentValues values = new ContentValues();
                values.put("salary", 12000);
                db.update("person", values, "name = ?", new String[]{"小志"});
                
                values.clear();
                values.put("salary", 16000);
                db.update("person", values, "name = ?", new String[]{"小志的儿子"});
                
                int i = 3/0;
                //设置  事务执行成功
                db.setTransactionSuccessful();
            }
            finally{
                //关闭事务,同时提交,如果已经设置事务执行成功,那么sql语句就生效了,反之,sql语句回滚
                db.endTransaction();
            }
        }
    }
  • 相关阅读:
    Hashset;HashMap;ArrayList;
    排序方法(冒泡排序,直接选择排序,反转排序);
    父类引用指向子类的对象;
    SQL分支语句与循环语句
    ORCAL 数据库的约束以及SQL语言的四种类型
    Oracle基础数据类型与运算符
    集合
    数组的几种排序
    转换日期格式的工具类
    equals方法重写
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/4890626.html
Copyright © 2011-2022 走看看