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();
            }
        }
    }
  • 相关阅读:
    Asp.net 动态添加Meta标签
    【转】在SharePoint Server 2010中更改“我的网站”
    SPQuery DateTime 类型查询
    Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found
    How To Create SharePoint 2010 Site Collection In Its Own DB
    C# 文件打印
    面试题 java集合
    《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读
    《深入理解Java虚拟机》(五)JVM调优
    《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/4890626.html
Copyright © 2011-2022 走看看