我的Android之旅(二十三)---SQList数据库



QList: ,轻量级数据存储,方便增、删、改、查。

其中包括两个方法:SQListOpenHelper和SQListDataBase,二者用法不同,但同等重要。


SQListOpenHelper:


负责打开,更新,关闭数据库和创建数据表


SQListDataBase:


执行SQL语句,执行对数据表的增删改查
存放位置:data/data/程序的包名称/myData.db,对于存储路径来说
myData.db:只能对其进行更改,其余默认。
varchar:数据库中来保存字符串
用于主键的id要在前面加下划线:
private final String INFO_COLUM_ID  ="_id";

根据version的数据来确定版本号

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

版本不能从0开始,最小为1.
  user.setUserId(cs.getInt(cs.getColumnIndex("_id")));
先取下标,再取值

下面来做一个小小的实例来初步了解QList的使用方法

首先,建立一个实体类,创建你所需要的数据:

package com.jerehedu.jereduch10.sqlListDemo.entity;

/**
 * Created by qq on 0222016/8/22.
 */
public class User {
    private int userId;
    private String Name;
    private String pwd;
    private String age;
    private  String img;

    public int getUserId() {
        return userId;
    }

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

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getPwd() {
        return pwd;
    }

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

    public String getAge() {
        return age;
    }

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

    public String getImg() {
        return img;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", Name='" + Name + '\'' +
                ", pwd='" + pwd + '\'' +
                ", age='" + age + '\'' +
                ", img='" + img + '\'' +
                '}';
    }
}


随后依据实体类所建立的数据,来创建QList表格:

在这个实体类中注意的事情比较多:

首先:在创建表格的列的属性时:

一定不要忘记设置表格名称。

设置主键的属性,需要在属性名称前面加 "_",下划线

<pre class="java" name="code"> public MyDbHelper(Context context){
        super(context,"user.db",null,2);
}

 

在此构造函数中,需要注意最后一个参数,代表的是 版本。如果在创建表格的过程中,有代码写错的情况,如果已经运行过程序。再更改程序的同时,一定要更改版本数,注意版本数一定是大于等于1 的。否则就算你更正了程序,错误依然存在。

其次:

  sql.append("Create table if not exists ");

exists后一定记得加空格,否则单词被视为一个,读取不成功。

这里尤其注意书写的格式,以括号开始,以括号结束,其中各个语句后加“ ,”。最后一句除外。

依据下面的程序,表格我们就创建好了。

package com.jerehedu.jereduch10.sqlListDemo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by qq on 0222016/8/22.
 */
public class MyDbHelper extends SQLiteOpenHelper {
    private final String TABLE_NAME     ="info";
    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){
        super(context,"user.db",null,2);
}
    public MyDbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        StringBuilder sql=new StringBuilder();
        sql.append("Create table if not exists ");
        sql.append(TABLE_NAME+"(");
        sql.append(INFO_COLUM_ID+" integer primary key autoincrement,");
        //autoincrement:id自动增长
        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(")");
        sqLiteDatabase.execSQL(sql.toString());
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
          String sql="drop table if exists "+TABLE_NAME;
        sqLiteDatabase.execSQL(sql);
        onCreate(sqLiteDatabase);
    }
}


这里还要注意onUpgrade方法的使用。


然后建立一个class,来写数据库内的增、删、改、查的方法,我们用到这些方法时,只需要调用即可。

package com.jerehedu.jereduch10.sqlListDemo.entity;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.jerehedu.jereduch10.sqlListDemo.MyDbHelper;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by 王明松 on 0222016/8/22.
 */
public class UserDoa {
    private MyDbHelper myDbHelper;
    public UserDoa(Context context){
        myDbHelper=new MyDbHelper(context);
    }
    //插入数据
    public void insert(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());
        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();
            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();


    }
}


最后建立一个新的Activity来执行所有的方法。

package com.jerehedu.jereduch10.sqlListDemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.jerehedu.jereduch10.R;
import com.jerehedu.jereduch10.sqlListDemo.entity.User;
import com.jerehedu.jereduch10.sqlListDemo.entity.UserDoa;

import java.util.ArrayList;
import java.util.List;

public class SqliteTextActivity extends AppCompatActivity {
private EditText name,age,pwd;
    private Button insert,search,select,delete,updata;
    private TextView show;
    private UserDoa userDoa;
    private Spinner sp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sqlite_text);
        name= (EditText) findViewById(R.id.name);
        age= (EditText) findViewById(R.id.age);
        pwd= (EditText) findViewById(R.id.pwd);
        insert= (Button) findViewById(R.id.insert);
        search= (Button) findViewById(R.id.search);
        delete= (Button) findViewById(R.id.delete);
        show= (TextView) findViewById(R.id.show);
        sp= (Spinner) findViewById(R.id.sp);
        select= (Button) findViewById(R.id.select);
        updata= (Button) findViewById(R.id.updata);
        userDoa=new UserDoa(this);
        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user=new User();
                user.setName(name.getText().toString());
                user.setAge(age.getText().toString());
                user.setPwd(pwd.getText().toString());
                userDoa.insert(user);
               Toast.makeText(SqliteTextActivity.this,"新增成功",Toast.LENGTH_SHORT).show();
            }
        });
        search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              List<User> list= userDoa.search();
              show.setText(list.toString());

            }
        });
        select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                List<User> list=userDoa.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 id1) {
                String str = sp.getSelectedItem().toString();
                if (!str.equals("")) {
                    String id = str.split(":")[0];
                    User user = userDoa.searchUser(id);
                    //查找原始的数据,包含所有的信息。
                    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];
                    userDoa.deleteUser(id);
                }


            }
        });
        updata.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=userDoa.searchUser(id);
                    user.setName(name.getText().toString());
                    user.setAge(age.getText().toString());
                    user.setPwd(pwd.getText().toString());
                    userDoa.update(user);
                }

            }
        });

    }
}


布局文件:

布局文件中主要用到了一个下拉列表Spinner


<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.jerehedu.jereduch10.sqlListDemo.SqliteTextActivity">
<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/age"
        android:hint="请输入年龄"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/pwd"
        android:inputType="numberPassword"
        android:hint="请输入密码"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="新增"
            android:id="@+id/insert"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="查询"
            android:id="@+id/search"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/select"
            android:text="选择"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/delete"
            android:text="删除"/>
        
    </LinearLayout>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/updata"
        android:text="修改"/>
    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sp">
    </Spinner>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/show"/>

</LinearLayout>


以上就完成了数据库一些简单的使用方法。

运行时,首先添加数据,不然查询的数据为空,在执行删除和修改的操作时,操作后可点击查询来检测执行结果是否正确。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值