zoukankan      html  css  js  c++  java
  • SQLiteOpenHelper与SQLiteDatabase

    SQLiteOpenHelper与SQLiteDatabase

      实现对SQLite数据库的简单操作,增删改查

    SQL:

    package com.example.sql_demo;
    
    import android.Manifest;
    import android.app.Activity;
    import android.content.pm.PackageManager;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.os.Build;
    import android.os.Environment;
    import android.support.annotation.NonNull;
    import android.support.v4.app.ActivityCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.CursorAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.SimpleCursorAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.io.File;
    import java.security.Permission;
    
    public class MainActivity extends AppCompatActivity {
        private static final String TAG = "MainActivity";
        public static final int REQUESTCODE = 1;
        String[] permision = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };
        private SQLiteDatabase sqLiteDatabase;
        private EditText et_name;
        private EditText et_age;
        private EditText et_id;
        private RadioGroup radioGroup;
        private RadioButton rb_man;
        private RadioButton rb_woman;
        private String sex ="男";
        private String name,age,id;
        private ListView listView;
        private TextView result;
        private SimpleCursorAdapter cursorAdapter;
        private View v;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            et_name = findViewById(R.id.et_name);
            et_age = findViewById(R.id.et_age);
            et_id = findViewById(R.id.et_id);
            radioGroup = findViewById(R.id.rg_sex);
            rb_man = findViewById(R.id.rb_man);
            rb_woman = findViewById(R.id.rb_woman);
            listView = findViewById(R.id.listView);
            v = getLayoutInflater().inflate(R.layout.header,null);
            listView.addHeaderView(v);
            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, int i) {
                    if (i == R.id.rb_woman){
                        sex = "女";
                    }else{
                        sex = "男";
                    }
                }
            });
            /**
             * 数据库辅助类
             * 参数1 上下文  参数2 1.如果只有一个数据库名称,那么这个数据库就在app的私有路径下
             *                    2.如果带路径,那么数据库就会在指定路径下
             * 参数3 游标工厂 null会选择默认
             * 参数4 版本号 控制升级
             */
            if (TextUtils.equals(Environment.getExternalStorageState(),Environment.MEDIA_MOUNTED))
            {
                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
                    for (String str : permision) {
                        if (ActivityCompat.checkSelfPermission(this, str) != PackageManager.PERMISSION_GRANTED) {
                            ActivityCompat.requestPermissions(this, permision, REQUESTCODE);
                        }
                    }
    
                }
            }
            String path = Environment.getExternalStorageDirectory() + File.separator + "stu2.db";
            SQLiteOpenHelper helper = new SQLiteOpenHelper(this,path,null,1) {
                @Override
                public void onCreate(SQLiteDatabase sqLiteDatabase) {
                    //创建方法
    //                    Toast.makeText(MainActivity.this,"数据库创建",Toast.LENGTH_LONG).show();
                    Log.e(TAG, "onCreate: " + "数据创建成功");
                    String sql = "create table test2(" + "_id integer primary key autoincrement," + "name varchar(20) not null," +
                            "age integer," + "sex varchar(2) not null)" ;
                    //创建数据库
                    sqLiteDatabase.execSQL(sql);
                    /**
                     * execSQL()  数据表的创建 数据修改 删除 添加
                     * rawQuery() 数据库查询
                     */
    
                }
    
                @Override
                public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
                    //升级方法
                    Toast.makeText(MainActivity.this,"数据库创建",Toast.LENGTH_LONG).show();
                }
            };
            //获取数据库操作对象  会判断指定数据库是否存在 1.存在 打开 2.不存在 创建   如果数据版本较高,则执行升级方法
            sqLiteDatabase = helper.getReadableDatabase();
    
    
        }
        public void onButtonClick(View view) {
            id = et_id.getText().toString();
            name = et_name.getText().toString();
           age = et_age.getText().toString();
    
            switch (view.getId()){
                case R.id.in_button:
                    listView.removeHeaderView(v);
                    //第一种写法直接加入参数
                    /*String sql = "insert into stu(name,age,sex) values ('"+ et_name.getText().toString()+"',"+ et_age.getText().toString()+","+ sex+")";
                    sqLiteDatabase.execSQL(sql);*/
                    //第二种写法,加入数组
                    String sql = "insert into test2(name,age,sex) values (?,?,?)";
                    sqLiteDatabase.execSQL(sql,new String[]{name, age,sex});
                    break;
                case R.id.sea_button:
                    //select * from test where ...
                    String sql2 = "select * from test2";
                    if (!id.isEmpty()){
                        sql2 += " where _id=" + id;
                    }
                    //查询结果
                    Cursor cursor = sqLiteDatabase.rawQuery(sql2,null);
                    //参数2 适配器布局  参数3 数据库列名    参数4 对应资源id  参数 5  int类型 自动更新
                    cursorAdapter = new SimpleCursorAdapter(this, R.layout.listview_item,cursor,
                            new String[]{"_id","name","age","sex"},
                            new int[]{R.id.id_item,R.id.name_item,R.id.age_item,R.id.sex_item}
                            ,CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    
                    if (cursorAdapter.isEmpty()){
                        Toast.makeText(MainActivity.this,"数据不存在",Toast.LENGTH_LONG).show();
                    }else {
                        listView.setAdapter(cursorAdapter);
                    }
                    break;
                case R.id.del_button:
                    //删除
                    String sql3 = "delete from test2 where _id=?";
                    sqLiteDatabase.execSQL(sql3,new String[]{id});
                    break;
                case R.id.upl__button:
                    if (name.isEmpty()||age.isEmpty()){
                        Toast.makeText(MainActivity.this,"姓名和年龄不能为空",Toast.LENGTH_LONG).show();
                        break;
                    }
                    String sql4 = "update test2 set name=?, age=? ,sex=? where _id=?";
                    sqLiteDatabase.execSQL(sql4,new String[]{name,age,sex,id});
                    break;
            }
            et_id.setText("");
            et_name.setText("");
            et_age.setText("");
    
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
          /*  if (requestCode == REQUESTCODE){
    
            }*/
    
        }
    }

    直接使用SQLiteDatabase提供的方法进行增删改查操作

    package com.example.sql_demo;
    
    import android.Manifest;
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.pm.PackageManager;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.os.Build;
    import android.os.Environment;
    import android.support.annotation.NonNull;
    import android.support.v4.app.ActivityCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.CursorAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.SimpleCursorAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.io.File;
    import java.security.Permission;
    
    public class Main2Activity extends AppCompatActivity {
        private static final String TAG = "MainActivity";
        public static final int REQUESTCODE = 1;
        String[] permision = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };
        private SQLiteDatabase sqLiteDatabase;
        private EditText et_name;
        private EditText et_age;
        private EditText et_id;
        private RadioGroup radioGroup;
        private RadioButton rb_man;
        private RadioButton rb_woman;
        private String sex ="男";
        private String name,age,id;
        private ListView listView;
        private TextView result;
        private SimpleCursorAdapter cursorAdapter;
        private View v;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            et_name = findViewById(R.id.et_name);
            et_age = findViewById(R.id.et_age);
            et_id = findViewById(R.id.et_id);
            radioGroup = findViewById(R.id.rg_sex);
            rb_man = findViewById(R.id.rb_man);
            rb_woman = findViewById(R.id.rb_woman);
            listView = findViewById(R.id.listView);
            v = getLayoutInflater().inflate(R.layout.header,null);
            listView.addHeaderView(v);
            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, int i) {
                    if (i == R.id.rb_woman){
                        sex = "女";
                    }else{
                        sex = "男";
                    }
                }
            });
            /**
             * 数据库辅助类
             * 参数1 上下文  参数2 1.如果只有一个数据库名称,那么这个数据库就在app的私有路径下
             *                    2.如果带路径,那么数据库就会在指定路径下
             * 参数3 游标工厂 null会选择默认
             * 参数4 版本号 控制升级
             */
            if (TextUtils.equals(Environment.getExternalStorageState(),Environment.MEDIA_MOUNTED))
            {
                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
                    for (String str : permision) {
                        if (ActivityCompat.checkSelfPermission(this, str) != PackageManager.PERMISSION_GRANTED) {
                            ActivityCompat.requestPermissions(this, permision, REQUESTCODE);
                        }
                    }
    
                }
            }
            String path = Environment.getExternalStorageDirectory() + File.separator + "stu2.db";
            SQLiteOpenHelper helper = new SQLiteOpenHelper(this,path,null,1) {
                @Override
                public void onCreate(SQLiteDatabase sqLiteDatabase) {
                    //创建方法
    //                    Toast.makeText(MainActivity.this,"数据库创建",Toast.LENGTH_LONG).show();
                    Log.e(TAG, "onCreate: " + "数据创建成功");
                    String sql = "create table test2(" + "_id integer primary key autoincrement," + "name varchar(20) not null," +
                            "age integer," + "sex varchar(2) not null)" ;
                    //创建数据库
                    sqLiteDatabase.execSQL(sql);
                    /**
                     * execSQL()  数据表的创建 数据修改 删除 添加
                     * rawQuery() 数据库查询
                     */
    
                }
    
                @Override
                public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
                    //升级方法
                    Toast.makeText(Main2Activity.this,"数据库创建",Toast.LENGTH_LONG).show();
                }
            };
            //获取数据库操作对象  会判断指定数据库是否存在 1.存在 打开 2.不存在 创建   如果数据版本较高,则执行升级方法
            sqLiteDatabase = helper.getReadableDatabase();
    
    
        }
        public void onButtonClick(View view) {
            id = et_id.getText().toString();
            name = et_name.getText().toString();
            age = et_age.getText().toString();
    
            switch (view.getId()){
                case R.id.in_button:
                    /**
                     * 在SqLiteDatabase类下提供了四个操作数据库的方法  可以不用写sql语句
                     * insert  添加    delete  删除
                     * update  修改    query   查询
                     */
                    //相当于HashMap  key  value
                    ContentValues values = new ContentValues();
                    //参数1 要插入数据的列名  参数2  插入的数据
                    values.put("name",name);
                    values.put("age",age);
                    values.put("sex",sex);
    
                    //参数1 数据库表名
                    // 参数2 可以为空的列  自动补全 null
                    // 参数3 ContentValues类对象(插入数据)
                    //返回数据表示当前添加数据的id编号
                    long id2 = sqLiteDatabase.insert("test2",null,values);
                    break;
                case R.id.sea_button:
                    /**
                     * 参数1  表名   参数2 所查询的列名 {"name","age"} 查询所有传入null或{"*"}
                     * 参数3 参数4  表示查询条件  例如"name=?and age=?",new String[]{"HEJUN","23"}
                     * 参数5 分组
                     * 参数6 通过having去除不符合条件的组
                     * 参数7 排序
                     * --聚合函数:用于统计数据的函数
                     --count(列名)统计总数
                     统计各个年龄段的人数 按年龄分组 年龄大于18 降序排序
                     select count(*),age from test2 group by age having age>18 order by age desc
                     */
                    Cursor cursor = sqLiteDatabase.query("test2",null,null,null,null,null,null);
                    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.listview_item,cursor,
                            new String[]{"_id","name","age","sex"},
                            new int[]{R.id.id_item,R.id.name_item,R.id.age_item,R.id.sex_item},
                            CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
                    if (adapter.isEmpty()){
                        Toast.makeText(this,"数据不存在",Toast.LENGTH_LONG).show();
                    }else {
                        listView.setAdapter(adapter);
                    }
                    break;
                case R.id.del_button:
                    //返回数据是删除数据的数目
                    int count = sqLiteDatabase.delete("test2","_id=?",new String[]{id});
                    if (count < 0){
                        Toast.makeText(this,"数据不存在",Toast.LENGTH_LONG).show();
                    }else {
                        Toast.makeText(this,"删除成功",Toast.LENGTH_LONG).show();
                    }
                    break;
                case R.id.upl__button:
                    ContentValues values1 = new ContentValues();
                    values1.put("name",name);
                    values1.put("age",age);
                    values1.put("sex",sex);
                    sqLiteDatabase.update("test2",values1,"_id=?",new String[]{id});
                    break;
            }
            et_id.setText("");
            et_name.setText("");
            et_age.setText("");
    
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
          /*  if (requestCode == REQUESTCODE){
    
            }*/
    
        }
    }

      尽管SQLiteDatabase提供了轻便的操作方法,但SQL语句一个程序员的必备技能哦,不要一味的依赖.

  • 相关阅读:
    synchronized使用及java中的原子性问题
    Volatile 原理及使用,java并发中的可见性问题
    final 修饰符
    java 常见OPTS参数的含义
    Redis面试题
    Count(1),Count(*),Count(column)区别
    Mysql索引创建及删除
    springboot 非端口模式启动
    sql批量插入缓慢
    sql server sql语句导入数据到execl2007中
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/9447712.html
Copyright © 2011-2022 走看看