AndroidStudio——数据库SQLite

SQLite:实现数据的增删改查等操作

数据库中的主键pk(唯一不重复 int 或string)
两个类:

  1. SQLiteOpenHelp(负责创建、打开、更新、关闭数据库和创建数据表)

  2. SQLiteDatabase(负责增删改查) 存放位置:data/data/程序的报名

    称/mydata.db

user 类:

public class User {
    private int userId;
    private String name;
    private String pwd;
    private String age;
    private String img;

    public int getUserId() {
        return userId;
    }

    public String getName() {
        return name;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

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

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

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

    public void setImg(String img) {
        this.img = img;
    }

    public String getPwd() {
        return pwd;
    }

    public String getAge() {
        return age;
    }

    public String getImg() {
        return img;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                ", age='" + age + '\'' +
                ", img='" + img + '\'' +
                '}';
    }
}
public class MyDbHelper extends SQLiteOpenHelper {
    private final String DBNAME = "user.db";
    private final String TABLE_NAME = "info";
    //在SQLite里用作特殊标识的要加下划线(主键)
    private final String INFO_COLUM_ID = "_id";
    private final String INFO_COLUM_NAME = "name";
    private final String INFO_COLUM_PWD = "pwd";
    private final String INFO_COLUM_AGE = "age";
    private final String INFO_COLUM_IMG = "img";

    public MyDbHelper(Context context) {
        //版本号不能为0
        super(context, "user.db", null, 1);
    }

    public MyDbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //如果没有数据库及数据表 就会在OnCreate里自动创建
        StringBuilder sql = new StringBuilder();
        sql.append("Create table if not exists ");
        sql.append(TABLE_NAME + " ( ");
        // autoincrement 这一行自动增长
        sql.append(INFO_COLUM_ID + " integer primary key autoincrement, ");
        sql.append(INFO_COLUM_NAME + " varchar(10),");
        sql.append(INFO_COLUM_PWD + " varchar(10),");
        sql.append(INFO_COLUM_AGE + " varchar(10),");
        sql.append(INFO_COLUM_IMG + " varchar(10) ");
        sql.append(" ) ");
        //执行SQL
        db.execSQL(sql.toString());
    }

    //数据库更新升级
    // 通过版本号Version 删除以前的表  然后重新调用OnCreate
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //删除表(delete是删除表里的数据)
        String sql = " drop table if exists " + TABLE_NAME;
        db.execSQL(sql);
        onCreate(db);
    }
}

针对user进行增删改查的类:

public class UserDao {
    private MyDbHelper myDbHelper;

    public UserDao(Context context) {
        myDbHelper = new MyDbHelper(context);
    }

    //插入数据
    public void insert(User user) {
        //得到一个可写的数据库
        SQLiteDatabase db = myDbHelper.getWritableDatabase();
        //ContentValues 键值的用法   key要跟列名一致
        ContentValues cv = new ContentValues();
        cv.put("name", user.getName());
        cv.put("pwd", user.getPwd());
        cv.put("age", user.getAge());
        cv.put("img", user.getImg());
        db.insert("info", null,cv);
        db.close();
    }

    //查询一条数据
    public User searchUser(String id) {
        SQLiteDatabase db = myDbHelper.getReadableDatabase();
        // ?为占位符  用下一个参数来匹配
        Cursor cs = db.query("info", null, "_id = ? ", new String[]{id}, null, null, null);
        User user = null;
        if (cs.moveToNext()) {
            user = new User();
            user.setUserId(cs.getInt(cs.getColumnIndex("_id")));
            user.setName(cs.getString(cs.getColumnIndex("name")));
            user.setPwd(cs.getString(cs.getColumnIndex("pwd")));
            user.setAge(cs.getString(cs.getColumnIndex("age")));
            user.setImg(cs.getString(cs.getColumnIndex("img")));
        }
        cs.close();
        db.close();
        return user;
    }

    //查询所有数据
    public List search() {
        SQLiteDatabase db = myDbHelper.getReadableDatabase();
        Cursor cs = db.query("info", null, null, null, null, null, null);
        User user = null;
        List<User> list = new ArrayList<>();
        while (cs.moveToNext()) {
            user = new User();
            // cs.getColumnIndex("_id")   id 这一列结果中的下标
            user.setUserId(cs.getInt(cs.getColumnIndex("_id")));
            user.setName(cs.getString(cs.getColumnIndex("name")));
            user.setPwd(cs.getString(cs.getColumnIndex("pwd")));
            user.setAge(cs.getString(cs.getColumnIndex("age")));
            user.setImg(cs.getString(cs.getColumnIndex("img")));
            list.add(user);
        }
        //关闭结果集
        cs.close();
        //关闭数据库
        db.close();
        return list;
    }

    //删除所有数据
    public void delete() {
        SQLiteDatabase db = myDbHelper.getWritableDatabase();
        db.delete("info", null, null);
        db.close();
    }

    //删除一条数据
    public void deleteUser(String id) {
        SQLiteDatabase db = myDbHelper.getWritableDatabase();
        db.delete("info", "_id= ? ", new String[]{id});
        db.close();
    }

    //修改数据
    public void update(User user) {
        SQLiteDatabase db = myDbHelper.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", user.getName());
        cv.put("pwd", user.getPwd());
        cv.put("age", user.getAge());
        cv.put("img", user.getImg());
        String id = String.valueOf(user.getUserId());
        db.update("info", cv, "_id= ? ", new String[]{id});
        db.close();
    }
}

SqliteTestActivity文件:

public class SqliteTestActivity extends AppCompatActivity {
    private EditText name, age, pwd;
    private Button insert, search, delete, update;
    private UserDao userDao;
    private Spinner sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sqlite_test);
        name = (EditText) findViewById(R.id.name);
        pwd = (EditText) findViewById(R.id.pwd);
        age = (EditText) findViewById(R.id.age);
        search = (Button) findViewById(R.id.search);
        insert = (Button) findViewById(R.id.insert);
        delete = (Button) findViewById(R.id.delete);
        update = (Button) findViewById(R.id.update);
        sp = (Spinner) findViewById(R.id.sp);
        userDao = new UserDao(this);
        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user = new User();
                user.setName(name.getText().toString());
                user.setPwd(pwd.getText().toString());
                user.setAge(age.getText().toString());
                userDao.insert(user);
                Toast.makeText(getBaseContext(), "新增成功", Toast.LENGTH_SHORT).show();
            }
        });
        search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //去User里重写toString方法
                List<User> list = userDao.search();
                List myData = new ArrayList();
                for (User u : list) {
                    myData.add(u.getUserId() + ":" + u.getName());
                }
                ArrayAdapter aa = new ArrayAdapter(getBaseContext(),
                        android.R.layout.simple_list_item_1, myData);
                sp.setAdapter(aa);
            }
        });
        sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String str = sp.getSelectedItem().toString();
                if (!str.equals("")) {
                    String id1 = str.split(":")[0];
                    User user = userDao.searchUser(id1);
                    name.setText(user.getName().toString());
                    age.setText(user.getAge().toString());
                    pwd.setText(user.getPwd().toString());
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = sp.getSelectedItem().toString();
                if (!str.equals("")) {
                    String id = str.split(":")[0];
                    userDao.deleteUser(id);
                }
            }
        });
        update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = sp.getSelectedItem().toString();
                if (!str.equals("")) {
                    String id = str.split(":")[0];
                    User user = userDao.searchUser(id);
                    user.setName(name.getText().toString());
                    user.setAge(age.getText().toString());
                    user.setPwd(pwd.getText().toString());
                    userDao.update(user);
                }
            }
        });
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.edu.jereh.jreduch08.sqlitedemo.SQLiteTestActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/name"
        android:hint="请输入姓名"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/pwd"
        android:hint="请输入密码"
        android:layout_below="@+id/name"
        android:layout_alignParentStart="true" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/age"
        android:hint="请输入年龄"
        android:layout_below="@+id/pwd"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="新增"
        android:id="@+id/insert"
        android:layout_below="@+id/age"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询"
        android:id="@+id/search"
        android:layout_alignTop="@+id/insert"
        android:layout_toEndOf="@+id/insert" />

    <Spinner
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/sp"
       android:layout_alignParentStart="true"
       android:layout_below="@+id/insert">

   </Spinner>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改"
        android:id="@+id/update"
        android:layout_below="@+id/age"
        android:layout_toEndOf="@+id/search" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"
        android:id="@+id/delete"
        android:layout_below="@+id/age"
        android:layout_toEndOf="@+id/update" />

</RelativeLayout>

运行结果显示:

依次新增数据:
安卓 1,1,
苹果 2,2,
h5 3, 3

查询后结果:

这里写图片描述

删除后结果

这里写图片描述

修改后结果

这里写图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值