Android基础篇-五大存储方式之一数据库存储

这里写图片描述

废话不多说,直接看代码

activity_main:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


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

        <EditText
            android:id="@+id/et_search"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:hint="请输入搜索的姓名"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="btn_search"
            android:text="搜索" />
    </LinearLayout>
    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入姓名" />

    <EditText
        android:id="@+id/et_sex"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入性别" />

    <EditText
        android:id="@+id/et_age"
        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:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="btn_insert"
            android:text="添加" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="btn_delete"
            android:text="删除" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="btn_select"
            android:text="查询" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="btn_update"
            android:text="修改" />
    </LinearLayout>

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

        <TextView
            android:id="@+id/tv_id"
            android:layout_width="0dp"
            android:background="#ffffff"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="学号"
            android:layout_margin="3dp"
            android:textColor="#ff0000" />

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="0dp"
            android:background="#ffffff"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="姓名"
            android:layout_margin="3dp"
            android:textColor="#ff0000" />

        <TextView
            android:layout_margin="3dp"
            android:background="#ffffff"
            android:id="@+id/tv_sex"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="性别"
            android:textColor="#ff0000" />

        <TextView
            android:background="#ffffff"
            android:layout_margin="3dp"
            android:id="@+id/tv_age"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="年龄"
            android:textColor="#ff0000" />
    </LinearLayout>

    <ListView
        android:id="@+id/lv_list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

item_layout:

<?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="wrap_content"
    android:orientation="horizontal"
    android:background="#000000" >

    <TextView
        android:id="@+id/tv_id"
        android:layout_width="0dp"
        android:background="#ffffff"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:layout_margin="3dp"
        android:textColor="#ff0000" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:background="#ffffff"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:layout_margin="3dp"
        android:textColor="#ff0000" />

    <TextView
        android:layout_margin="3dp"
        android:background="#ffffff"
        android:id="@+id/tv_sex"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:textColor="#ff0000" />

    <TextView
        android:background="#ffffff"
        android:layout_margin="3dp"
        android:id="@+id/tv_age"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:textColor="#ff0000" />


</LinearLayout>

Student:

package com.example.jhl.jhllearn;

/**
 * Created by Administrator on 2016/11/4.
 */
public class Student {

    private int id;
    private String name;
    private String sex;
    private int age;

    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 String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", sex=" + sex
                + ", age=" + age + "]";
    }

    public Student(int id, String name, String sex, int age) {
        super();
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
}


MyAdapter:

package com.example.jhl.jhllearn;

/**
 * Created by Administrator on 2016/11/4.
 */
import java.util.List;

import android.content.Context;
import android.view.InflateException;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {

    private Context context;
    private List<Student> oList;
    private LayoutInflater inflater;
    public MyAdapter(Context context,List<Student> oList)
    {
        this.context=context;
        this.oList=oList;
        this.inflater=LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return oList.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return oList.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder;
        if (v==null) {
            holder=new ViewHolder();
            v=inflater.inflate(R.layout.item_layout, null);
            holder.tv_id=(TextView)v.findViewById(R.id.tv_id);
            holder.tv_name=(TextView)v.findViewById(R.id.tv_name);
            holder.tv_sex=(TextView)v.findViewById(R.id.tv_sex);
            holder.tv_age=(TextView)v.findViewById(R.id.tv_age);
            v.setTag(holder);
        }else {
            holder=(ViewHolder)v.getTag();
        }
        holder.tv_id.setText( oList.get(position).getId()+"");
        holder.tv_name.setText( oList.get(position).getName());
        holder.tv_sex.setText( oList.get(position).getSex());
        holder.tv_age.setText( oList.get(position).getAge()+"");
        return v;
    }

    public class ViewHolder
    {
        TextView tv_id,tv_name,tv_sex,tv_age;

    }

}


MySqliteOpenHelper:

package com.example.jhl.jhllearn;

/**
 * Created by Administrator on 2016/11/4.
 */
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class MySqliteOpenHelper extends SQLiteOpenHelper {

    /**
     *
     * @param context
     *            上下文对象
     * @param name
     *            数据库名称
     * @param factory
     *            游标工厂,默认为空
     * @param version
     */

    // resulSet
    public MySqliteOpenHelper(Context context, String name,
                              CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 当前第一次创建数据库的时候回调
        db.execSQL("create table Student(id Integer primary key autoincrement, name varchar(10),sex varchar(4),age Integer)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 当前数据库版本更新后,回调该方法

    }

}


MainActivity:

package com.example.jhl.jhllearn;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText et_name, et_sex, et_age, et_search;
    private ListView lv_list;
    private List<Student> oList = new ArrayList<Student>();
    private MyAdapter adapter;
    // 称为数据库辅助类,用于创建和更新
    private MySqliteOpenHelper helper;
    // 操作数据库增删改查
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_name = (EditText) findViewById(R.id.et_name);
        et_sex = (EditText) findViewById(R.id.et_sex);
        et_age = (EditText) findViewById(R.id.et_age);
        et_search = (EditText) findViewById(R.id.et_search);
        lv_list = (ListView) findViewById(R.id.lv_list);
        helper = new MySqliteOpenHelper(this, "student_db", null, 1);
        /**
         * getReadableDatabase与getWritableDatabase sqlite数据库有一定的大小
         * 当sqlite存取数据到达上线的时候,不能再写入数据 getReadableDatabase方法不允许读取,不允许写
         * getWritableDatabase方法不允许写,可允许读
         */
        db = helper.getWritableDatabase();
    }

    // 向SQLite中插入数据
    public void btn_insert(View v) {
        // insert_sql();
        insert();
    }
    /**
     * 以insert()方法传参方式添加数据
     */
    public void insert() {
        String name = et_name.getText().toString();
        String sex = et_sex.getText().toString();
        String age = et_age.getText().toString();
        // table 表名
        // nullColumnHack 当我们需要插入数据时,没有明确指定字段名,默认插入数据为空
        // values :ContentValues 插入的字段值
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("sex", sex);
        values.put("age", Integer.parseInt(age));
        // {name="",sex="",age=""}
        // 返回的是long类型,返回的是当前插入的数据的ID号
        long index = db.insert("Student", null, values);
        if (index >= 0) {
            Show_Toase("插入成功" + index);
        }
    }

    /**
     * 以sql语句的形式添加数据
     */
    public void insert_sql() {
        String name = et_name.getText().toString();
        String sex = et_sex.getText().toString();
        String age = et_age.getText().toString();

        db.execSQL("insert into Student(name,sex,age) values(?,?,?)",
                new Object[]{name, sex, Integer.parseInt(age)});
        Show_Toase("添加成功");
    }

    public void btn_search(View v) {
        if (oList.size() > 0) {
            oList.clear();
        }
        String seach_str = et_search.getText().toString();

        Cursor cursor = db.rawQuery("select * from Student where name like ?",
                new String[]{"%" + seach_str + "%"});
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String sex = cursor.getString(cursor.getColumnIndex("sex"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            Student student = new Student(id, name, sex, age);
            oList.add(student);
        }
        dateSetChang();
    }

    private void dateSetChang() {
        if (adapter == null) {
            adapter = new MyAdapter(this, oList);
            lv_list.setAdapter(adapter);
        } else {
            adapter.notifyDataSetChanged();
        }
    }

    public void Show_Toase(String text) {
        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }

    // 删除数据
    public void btn_delete(View v) {
        delete();
        // delete_sql();
    }

    /**
     * 以delete()方法实现删除数据
     */
    public void delete() {
        String name = et_name.getText().toString();
        String sex = et_sex.getText().toString();
        String age = et_age.getText().toString();
        // table 表名
        // whereClause 带有占位符的条件
        // whereArgs 条件所对应的值数据
        // 当前整型返回的是删除记录的行数
        int i = db.delete("Student", "name=? and sex=? and age=?",
                new String[]{name, sex, age});
        if (i > 0) {
            Show_Toase("删除成功" + i);
        }
    }

    /**
     * 以sql语句的形式删除数据
     */
    public void delete_sql() {
        String name = et_name.getText().toString();
        String sex = et_sex.getText().toString();
        String age = et_age.getText().toString();
        db.execSQL("delete from Student where name=? and sex=? and age=?",
                new Object[]{name, sex, Integer.parseInt(age)});
        Show_Toase("删除成功");

        boolean is = false;
        for (int i = 0; i < oList.size() && !is; i++) {
            if (oList.get(i).getName().equals(name)
                    && oList.get(i).getSex().equals(sex)
                    && oList.get(i).getAge() == Integer.parseInt(age)) {
                oList.remove(i);
                is = true;
            }
        }
        dateSetChang();
    }

    // 查询数据
    public void btn_select(View v) {
        query();
        // query_sql();
    }

    /*
     * 使用query()方法查询数据
     */
    public void query() {
        if (oList.size()>0){
            oList.clear();
        }
        // table 表名
        // columns 查询的列名
        // selection 带有占位符的条件
        // selectionArgs 条件所对应的值
        // groupBy 分组
        // having 分组的条件
        // orderBy 排序(分为升序ASC,降序DESC)
        // select * from Student order by id asc
        Cursor cursor = db.query("Student", null, null, null, null, null,
                "id asc");
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String sex = cursor.getString(cursor.getColumnIndex("sex"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            Student student = new Student(id, name, sex, age);
            oList.add(student);
        }
        dateSetChang();
    }

    /*
     * 使用SQL语句的形式查询数据
     */
    public void query_sql() {
        if (oList.size() > 0) {
            oList.clear();
        }
        Cursor cursor = db.rawQuery("select * from Student", new String[]{});
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String sex = cursor.getString(cursor.getColumnIndex("sex"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));

            Student student = new Student(id, name, sex, age);

            oList.add(student);

        }
        dateSetChang();
    }

    // 更新数据
    public void btn_update(View v) {
        // update_sql();
        update();
    }

    /**
     * 以update()方法实现修改数据
     */
    public void update() {
        String name = et_name.getText().toString();
        String sex = et_sex.getText().toString();
        String age = et_age.getText().toString();
        // table 表名
        // valuse ContentValues 修改后的数据
        // whereClause 带占位符的条件
        // whereArgs 条件的值
        // update Student set name=?,age=? where sex=?
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("age", Integer.parseInt(age));
        // 返回值表示执行修改语句后,别修改了的行数
        int i = db.update("Student", values, "sex=?", new String[]{sex});
        if (i > 0) {
            Show_Toase("修改成功" + i);
        }
    }

    /*
     * 以sql语句的形式修改数据
     */
    public void update_sql() {
        String name = et_name.getText().toString();
        String sex = et_sex.getText().toString();
        String age = et_age.getText().toString();
        db.execSQL("update Student set name=?,age=? where sex=?", new Object[]{
                name, Integer.parseInt(age), sex});
        Show_Toase("修改成功");
        for (int i = 0; i < oList.size(); i++) {
            if (oList.get(i).getSex().equals(sex)) {
                oList.get(i).setName(name);
                oList.get(i).setAge(Integer.parseInt(age));
            }
        }
        dateSetChang();
    }
}

到这里,数据库存储就OVER了,其实上面是有BUG的,比如插入的时候我的条件是根据name,age,sex,如果你有一种未填写的话,是会崩掉的,因为我没判断。这篇文章我只是具体介绍怎么学习操作数据库,其他的没去做太多处理,读者自行完善

最后如果想看创建的数据库的效果话首先必须是模拟器,真机是没用的,然后下载一个操作数据库的SQLite,下载地址:http://download.csdn.net/detail/qq_33750826/9673234
然后安装打开

然后打开AndroidStudio或者Eclipse的File Explorer:
在里面找到data->data->找到自己的项目包名
这里写图片描述

这里写图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有头发的猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值