AndroidStudio——数据库SQLite
2016-08-22 22:12
405 查看
SQLite:实现数据的增删改查等操作
数据库中的主键pk(唯一不重复 int 或string)
两个类:
SQLiteOpenHelp(负责创建、打开、更新、关闭数据库和创建数据表)
SQLiteDatabase(负责增删改查) 存放位置:data/data/程序的报名
称/mydata.db
user 类:
针对user进行增删改查的类:
SqliteTestActivity文件:
布局文件
运行结果显示:
依次新增数据:
安卓 1,1,
苹果 2,2,
h5 3, 3
查询后结果:
删除后结果
修改后结果
数据库中的主键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
查询后结果:
删除后结果
修改后结果
相关文章推荐
- Android开发-SQLite从资源文件中数据库复制到SD到增删改查-AndroidStudio
- sqlite3数据库的性能问题报告
- SQLite系列免费/开源数据库组件/应用
- 轻型数据库SQLite结合PHP的开发
- sqlite嵌入式数据库在arm-linux下的编译全攻略
- 在VC6下用SQLite开发零配置的数据库应用
- uclinux下的sqlite嵌入式数据库移植
- 如何在Linux下用C/C++语言操作数据库sqlite3
- uclinux下的sqlite嵌入式数据库移植全攻略 [原创]
- SQLite for uClinux(一个可以在嵌入式系统中使用的小型数据库)
- 更新:超轻量级数据库引擎SQLite3.04版和SQLiteDB 1.0.2版
- 轻型数据库SQLite结合PHP的开发
- SQLite 一个轻量级别数据库
- SQLite 一个轻量级别数据库
- [转] 开放源码嵌入式数据库 SQLite 简介
- 用PHP写了一个SQLite的数据库驱动类,测试中....
- 开源数据库系统之SQLite3.2.0、FireBird2.0 Alpha-1等
- 用sqlite3数据库做了一个个人关系管理软件:)
- 开源关系数据库 sqlite
- 嵌入式数据库SqLite3使用入门