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);
}
下面来做一个小小的实例来初步了解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表格:
在这个实体类中注意的事情比较多:
首先:在创建表格的列的属性时:
一定不要忘记设置表格名称。
设置主键的属性,需要在属性名称前面加 "_",下划线
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 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 list= userDoa.search();
show.setText(list.toString());
}
});
select.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List 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
以上就完成了数据库一些简单的使用方法。
运行时,首先添加数据,不然查询的数据为空,在执行删除和修改的操作时,操作后可点击查询来检测执行结果是否正确。