您的位置:首页 > 移动开发 > Android开发

AndroidStudio——数据库SQLite

2016-08-22 22:12 405 查看
SQLite:实现数据的增删改查等操作

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

两个类:

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

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

查询后结果:



删除后结果



修改后结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: