SQLite

/*
SQLite的增删查改   db.rawQuery();        查询    select * from 表名
                  db.execSQL();         添加、删除、修改、创建表
SQLiteOpenHelper  Android平台里一个数据库辅助类,用于创建或打开数据库,并且对数据库的创建和版本进行管理。
SQLiteDatabase  用于管理和操作SQLite数据库,几乎所有的数据库操作。

 */
public class MainActivity extends Activity {

    private EditText nameEdt, ageEdt, idEdt;
    private RadioGroup genderGp;
    private ListView stuList;
    private RadioButton malerb;
    private String genderStr = "男";
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //添加操作
        //数据库名称
        //如果只有一个数据库名称,那么这个数据库的位置会是在私有目录中(data
        //如果带SD卡路径,那么数据库位置则在指定的路径下
        String path = Environment.getExternalStorageDirectory() + "/stu.db";
        //Android平台里一个数据库辅助类,用于创建或打开数据库,并且对数据库的创建和版本进行管理。
        SQLiteOpenHelper helper = new SQLiteOpenHelper(this, path, null, 2) {
            @Override
            public void onCreate(SQLiteDatabase sqLiteDatabase) {
                //创建
                Toast.makeText(MainActivity.this, "数据库创建", Toast.LENGTH_SHORT).show();

                //如果数据库不存在,则会调用onCreate方法,那么我们可以将表的创建工作放在这里面完成
                String sql = "create table test_tb (_id integer primary key autoincrement," +
                        "name varhcar(20)," +
                        "age integer)";
                sqLiteDatabase.execSQL(sql);
            }

            @Override
            public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
                //升级
                Toast.makeText(MainActivity.this, "数据库升级", Toast.LENGTH_SHORT).show();
            }
        };

        //用于获取数据库对象//获取可读数据库
        //1.数据库存在,则直接打开数据库
        //2.数据库不存在,则调用创建数据库的方法,再打开数据库
        //3.数据库存在,但版本号升高了,则调用数据库升级方法
        db = helper.getReadableDatabase();

        nameEdt = (EditText) findViewById(R.id.name_edt);
        ageEdt = (EditText) findViewById(R.id.age_edt);
        idEdt = (EditText) findViewById(R.id.id_edt);
        malerb = (RadioButton) findViewById(R.id.male);

        genderGp = (RadioGroup) findViewById(R.id.gender_gp);
        genderGp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                if (i == R.id.male) {
                    genderStr = "男";
                } else {
                    genderStr = "女";
                }
            }
        });

        stuList = (ListView) findViewById(R.id.stu_list);
    }

    //   SQLiteOpenHelper
    //   SQLiteDatabase  用于管理和操作SQLite数据库,几乎所有的数据库操作。
    //db.rawQuery();        查询    select * from 表名
    //db.execSQL();         添加、删除、修改、创建表
    public void operate(View v) {
        String nameStr = nameEdt.getText().toString();
        String ageStr = ageEdt.getText().toString();
        String idStr = idEdt.getText().toString();
        switch (v.getId()) {
            //两种方法添加
            case R.id.insert_btn:
                //String sql = "insert into info_tb (name,age,gender) values ('"+nameStr+"',"+ageStr+",'"+genderStr+"')";
                String sql = "insert into info_tb (name,age,gender) values (?,?,?)";
                //执行数据库
                db.execSQL(sql, new String[]{nameStr, ageStr, genderStr});
                Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();
                break;
            //查询并显示出来
            case R.id.select_btn:
                //select * from 表名 where _id = ?
                //1、查询所有
                String sql2 = "select * from info_tb";
                //2、id输入框不为空就可以带条件查询
                if (!idStr.equals("")) {
                    sql2 += " where _id=" + idStr;
                }
                //查询结果,用Cursor  代表数据源   rawQuery的返回值是Cursor类型,想象成一张表
                Cursor c = db.rawQuery(sql2, null);

                //有了结果之后用游标适配器与ListView匹配,显示出来
                //SimpleCursorAdapter
                //SimpleAdapter a = new SimpleAdapter()
                //参数3:数据源  即Cursor c
                SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                        this, R.layout.item, c,
                        new String[]{"_id", "name", "age", "gender"},
                        new int[]{R.id.id_item, R.id.name_item, R.id.age_item, R.id.gender_item}
                        , CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
                stuList.setAdapter(adapter);
                break;
            //删除所设编号的数据
            case R.id.delete_btn:
                String sql3 = "delete from info_tb where _id=?";
                db.execSQL(sql3, new String[]{idStr});
                Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
                break;
            case R.id.update_btn:
                String sql4 = "update info_tb set name=? , age=? , gender=?  where _id=?";
                db.execSQL(sql4, new String[]{nameStr, ageStr, genderStr, idStr});
                Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
                break;
        }
        nameEdt.setText("");
        ageEdt.setText("");
        idEdt.setText("");
        malerb.setChecked(true);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context="MainActivity">

    <EditText
        android:id="@+id/name_edt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="姓名:" />

    <EditText
        android:id="@+id/age_edt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="年龄:"
        android:numeric="integer" />

    <RadioGroup
        android:id="@+id/gender_gp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="性别:" />

        <RadioButton
            android:id="@+id/male"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:checked="true"
            android:text="男" />

        <RadioButton
            android:id="@+id/female"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:text="女" />
    </RadioGroup>

    <EditText
        android:id="@+id/id_edt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="编号" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/insert_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="operate"
            android:text="添加" />

        <Button
            android:id="@+id/select_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="operate"
            android:text="查询" />

        <Button
            android:id="@+id/delete_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="operate"
            android:text="删除" />

        <Button
            android:id="@+id/update_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="operate"
            android:text="修改" />
    </LinearLayout>

    <ListView
        android:id="@+id/stu_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/id_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/name_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/age_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/gender_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

</LinearLayout>
/*
API
 */
public class MainActivity2 extends Activity {

    private EditText nameEdt, ageEdt, idEdt;
    private RadioGroup genderGp;
    private ListView stuList;
    private RadioButton malerb;
    private String genderStr = "男";
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //添加操作
        //数据库名称
        //如果只有一个数据库名称,那么这个数据库的位置会是在私有目录中
        //如果带SD卡路径,那么数据库位置则在指定的路径下
        String path = Environment.getExternalStorageDirectory() + "/stu.db";
        SQLiteOpenHelper helper = new SQLiteOpenHelper(this, path, null, 2) {
            @Override
            public void onCreate(SQLiteDatabase sqLiteDatabase) {
                //创建
                Toast.makeText(MainActivity2.this, "数据库创建", Toast.LENGTH_SHORT).show();
                //如果数据库不存在,则会调用onCreate方法,那么我们可以将表的创建工作放在这里面完成
                        /*
                        String sql = "create table test_tb (_id integer primary key autoincrement," +
                                "name varhcar(20)," +
                                "age integer)";
                        sqLiteDatabase.execSQL(sql);*/
            }

            @Override
            public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
                //升级
                Toast.makeText(MainActivity2.this, "数据库升级", Toast.LENGTH_SHORT).show();
            }
        };

        //用于获取数据库库对象
        //1.数据库存在,则直接打开数据库
        //2.数据库不存在,则调用创建数据库的方法,再打开数据库
        //3.数据库存在,但版本号升高了,则调用数据库升级方法
        db = helper.getReadableDatabase();

        nameEdt = (EditText) findViewById(R.id.name_edt);
        ageEdt = (EditText) findViewById(R.id.age_edt);
        idEdt = (EditText) findViewById(R.id.id_edt);
        malerb = (RadioButton) findViewById(R.id.male);

        genderGp = (RadioGroup) findViewById(R.id.gender_gp);
        genderGp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                if (i == R.id.male) {
                    genderStr = "男";
                } else {
                    genderStr = "女";
                }
            }
        });

        stuList = (ListView) findViewById(R.id.stu_list);
    }

    //    SQLiteOpenHelper
//    SQLiteDatabase
    public void operate(View v) {

        String nameStr = nameEdt.getText().toString();
        String ageStr = ageEdt.getText().toString();
        String idStr = idEdt.getText().toString();
        switch (v.getId()) {
            case R.id.insert_btn:
                //在SqliteDatabase类下,提供四个方法
                //insert(添加)、delete(删除)、update(修改)、query(查询)
                //都不需要写sql语句
                //参数1:你所要操作的数据库表的名称
                //参数2:可以为空的列.  如果第三个参数是null或者说里面没有数据
                //那么我们的sql语句就会变为insert into info_tb () values ()  ,在语法上就是错误的
                //此时通过参数3指定一个可以为空的列,语句就变成了insert into info_tb (可空列) values (null)
                ContentValues values = new ContentValues();
                //insert into 表明(列1,列2) values(值1,值2)
                values.put("name", nameStr);
                values.put("age", ageStr);
                values.put("gender", genderStr);
                long id = db.insert("info_tb", null, values);
                Toast.makeText(this, "添加成功,新学员学号是:" + id, Toast.LENGTH_SHORT).show();
                break;
            case R.id.select_btn:
                //select 列名 from 表名 where 列1 = 值1 and 列2 = 值2
                //参数2:你所要查询的列。{”name","age","gender"},查询所有传入null/{“*”}
                //参数3:条件(针对列)
                //参数5:分组
                //参数6:当 group by对数据进行分组后,可以通过having来去除不符合条件的组
                //参数7:排序
                Cursor c = db.query("info_tb", null, null, null, null, null, null);

                //SimpleCursorAdapter
                //SimpleAdapter a = new SimpleAdapter()
                //参数3:数据源
                SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                        this, R.layout.item, c,
                        new String[]{"_id", "name", "age", "gender"},
                        new int[]{R.id.id_item, R.id.name_item, R.id.age_item, R.id.gender_item});
                stuList.setAdapter(adapter);
                break;
            case R.id.delete_btn:
                int count = db.delete("info_tb", "_id=?", new String[]{idStr});
                if (count > 0) {
                    Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.update_btn:
                ContentValues values2 = new ContentValues();
                //update info_tb set 列1=xx , 列2=xxx where 列名 = 值
                values2.put("name", nameStr);
                values2.put("age", ageStr);
                values2.put("gender", genderStr);
                int count2 = db.update("info_tb", values2, "_id=?", new String[]{idStr});
                if (count2 > 0) {
                    Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
                }
                break;
        }
        nameEdt.setText("");
        ageEdt.setText("");
        idEdt.setText("");
        malerb.setChecked(true);
    }
}
/*
GreenDao  实现封装数据库操作类
MainActivity+实体类+数据库封装操作类
https://www.jianshu.com/p/967d402d411d
 */

public class MainActivity3 extends Activity {

    private EditText nameEdt, ageEdt, idEdt;
    private RadioGroup genderGp;
    private ListView stuList;
    private RadioButton malerb;
    private String genderStr = "男";
    private StudentDao dao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dao = new StudentDao(this);

        nameEdt = (EditText) findViewById(R.id.name_edt);
        ageEdt = (EditText) findViewById(R.id.age_edt);
        idEdt = (EditText) findViewById(R.id.id_edt);
        malerb = (RadioButton) findViewById(R.id.male);

        genderGp = (RadioGroup) findViewById(R.id.gender_gp);
        genderGp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                if (i == R.id.male) {
                    //“男”
                    genderStr = "男";
                } else {
                    //"女"
                    genderStr = "女";
                }
            }
        });

        stuList = (ListView) findViewById(R.id.stu_list);
    }

    public void operate(View v) {

        String nameStr = nameEdt.getText().toString();
        String ageStr = ageEdt.getText().toString();
        String idStr = idEdt.getText().toString();
        switch (v.getId()) {
            case R.id.insert_btn:
                Student stu = new Student(nameStr, Integer.parseInt(ageStr), genderStr);
                dao.addStudent(stu);
                Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();
                break;
            case R.id.select_btn:
                String key = "", value = "";
                if (!nameStr.equals("")) {
                    value = nameStr;
                    key = "name";
                } else if (!ageStr.equals("")) {
                    value = ageStr;
                    key = "age";
                } else if (!idStr.equals("")) {
                    value = idStr;
                    key = "_id";
                }
                Cursor c;
                if (key.equals("")) {
                    c = dao.getStudent();
                } else {
                    c = dao.getStudent(key, value);
                }

                SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                        this, R.layout.item, c,
                        new String[]{"_id", "name", "age", "gender"},
                        new int[]{R.id.id_item, R.id.name_item, R.id.age_item, R.id.gender_item});
                stuList.setAdapter(adapter);
                break;
            case R.id.delete_btn:

                String[] params = getParams(nameStr, ageStr, idStr);

                dao.deleteStudent(params[0], params[1]);
                Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
                break;
            case R.id.update_btn:
                Student stu2 = new Student(Integer.parseInt(idStr), nameStr, Integer.parseInt(ageStr), genderStr);
                dao.updateStudent(stu2);
                Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
                break;
        }
        nameEdt.setText("");
        ageEdt.setText("");
        idEdt.setText("");
        malerb.setChecked(true);
    }

    public String[] getParams(String nameStr, String ageStr, String idStr) {
        String[] params = new String[2];
        if (!nameStr.equals("")) {
            params[1] = nameStr;
            params[0] = "name";
        } else if (!ageStr.equals("")) {
            params[1] = ageStr;
            params[0] = "age";
        } else if (!idStr.equals("")) {
            params[1] = idStr;
            params[0] = "_id";
        }
        return params;
    }
}


/**
 * 实体类
 */

public class Student {
    //私有属性
    private int id;
    private String name;
    private int age;
    private String gender;

    //无参构造
    public Student() {

    }

    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    //有参构造
    public Student(int id, String name, int age, String gender) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    //创建的setter和getter方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }


}

/**
 数据库封装操作类
 */

public class StudentDao {
    private SQLiteDatabase db;

    public StudentDao(Context context) {
        String path = Environment.getExternalStorageDirectory() + "/stu.db";
        SQLiteOpenHelper helper = new SQLiteOpenHelper(context, path, null, 2) {
            @Override
            public void onCreate(SQLiteDatabase sqLiteDatabase) {
            }

            @Override
            public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
            }
        };
        db = helper.getReadableDatabase();
    }

    public void addStudent(Student stu) {
        String sql = "insert into info_tb (name,age,gender) values(?,?,?)";
        db.execSQL(sql, new Object[]{stu.getName(), stu.getAge() + "", stu.getGender()});
    }

    public Cursor getStudent(String... strs) {
        //1.查询所有(没有参数)
        String sql = "select * from info_tb ";
        //2.含条件查询(姓名/年龄/编号)(参数形式:第一个参数指明条件,第二个参数指明条件值)
        if (strs.length != 0) {
            sql += " where " + strs[0] + "='" + strs[1] + "'";
        }
        Cursor c = db.rawQuery(sql, null);
        return c;
    }

    public ArrayList<Student> getStudentInList(String... strs) {
        ArrayList<Student> list = new ArrayList<>();
        Cursor c = getStudent(strs);
        while (c.moveToNext()) {
            int id = c.getInt(0);
            String name = c.getString(1);
            int age = c.getInt(2);
            String gender = c.getString(3);
            Student s = new Student(id, name, age, gender);
            list.add(s);
        }
        return list;
    }

    public void deleteStudent(String... strs) {
        String sql = "delete from info_tb where " + strs[0] + "='" + strs[1] + "'";
        db.execSQL(sql);
    }

    public void updateStudent(Student stu) {
        String sql = "update info_tb set name=?,age=?,gender=? where _id=?";
        db.execSQL(sql, new Object[]{stu.getName(), stu.getAge(), stu.getGender(), stu.getId()});
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值