android 对sqlite数据库的增删改查

朴灿烈づ我的快乐病毒、 2021-11-09 06:14 546阅读 0赞

android平台下数据库的一些概念

Sqlite是android平台的一款轻量级的、嵌入式的、关系型数据库产品,以下是一些主要概念。

  1. 1.Sqlite通过文件保存数据库,创建的数据库文件默认存在在/data/data/<package>/databases/的文件

夹下,一个文件就是一个数据库。

2.一个数据库包含多个表格,一个表格包含不同的字段,字段类型等等,这与SQL数据库相似。

3.Sqlite记录没有顺序的概念,不存在第一第二类的概念,通过查询获取满足条件的记录。

android平台下操作数据库的的相关类

(1.)SQLiteOpenHelper 抽象类,用于创建和管理数据库以及版本,需要创建一个子类继承,该类封装

了对数据库操作的基本方法,使用方便。

(2.)SQLiteDatabase 数据库访问了,主要是对数据库的增删改查等常用操作,功能比

SQLiteOpenHelper丰富,比如事务管理,分页等等。

(3.)Cursor游标类,主要用来返回返回查询记录结果

SQLiteOpenHelper 类使用方法比较少,网上介绍也比较多,本程序主要采用SQLiteDatabase类操作数

据库,介绍android 平台下Sqlite的多种使用方法。主要功能如图-1界面所示。

sqlite ui

图-1 Sqlite数据库界面的操作及其功能

Sqlite databases

图-2 创建的数据库截图

源码下载: Sqlite.zip
1.对数据库的操作

(1.)创建一个数据库

view plain copy to clipboard print ?

  1. //在文件夹/data/data//databases/创建一个students.db的数据库
  2. //该类返回一个SQLiteDatabase,对那个数据库操作,就要打开该数据库
  3. openOrCreateDatabase(“students.db”,SQLiteDatabase.CREATE_IF_NECESSARY, null);

(2.)删除一个数据库

view plain copy to clipboard print ?

  1. //在Context环境中,删除students.db,该方法返回一个boolean类型
  2. deleteDatabase(“students.db”);

(3.)获取应用程序所有数据库的名称

view plain copy to clipboard print ?

  1. //在Context环境中,获取该应用程序的所有数据库名称(即databases文件夹下的数据库文件)
  2. //该方法返回一个字符串数组
  3. databaseList()

(4.)重命名一个数据库

view plain copy to clipboard print ?

  1. //将数据库data.db重命名为renamedata.db
  2. File f = getDatabasePath(“data.db”);
  3. File renameFile=getDatabasePath(“renamedata.db”);
  4. f.renameTo(renameFile);

2.对表的操作

(1.)创建一个表(sql语句中创建)

view plain copy to clipboard print ?

  1. mDb.execSQL(“create table if not exists “+table+
  2. “ (id integer primary key autoincrement, “
  3. + “username text not null, info text not null);”);

(2.)删除一个表

view plain copy to clipboard print ?

  1. mDb.execSQL(“drop table if exists “ + table);

(3.)修改表

Sqlite是不能修改一个表的字段,不能删除一个表的字段,但是可以重命名一个表的名称,可以添加一

个字段及其属性

1.)重命名表

view plain copy to clipboard print ?

  1. mDb.execSQL(“alter table “ + oldTable + “ rename to “+ newTableName+”;”);

2.)添加一列

view plain copy to clipboard print ?

  1. mDb.execSQL(“alter table “ + table + “ add column “ + column + type + “ ;”);

(4.)获取一个数据库的所有表的名称

view plain copy to clipboard print ?

  1. mDb.rawQuery(“select name from sqlite_master where type=’table’ order by name”,null);

3.对数据库记录的操作

(1.)添加一条记录

view plain copy to clipboard print ?

  1. ContentValues values = new ContentValues();
  2. values.put(“username”, user.getUsername());
  3. values.put(“info”, user.getInfo());
  4. mDb.insert(table, null, values);

(2.)删除一条记录

view plain copy to clipboard print ?

  1. String whereClause = “id=?”;
  2. String[] whereArgs = new String[] {String.valueOf(id)};
  3. mDb.delete(table, whereClause, whereArgs);

(3.)修改一条记录

view plain copy to clipboard print ?

  1. ContentValues values = new ContentValues();
  2. values.put(“username”, username);
  3. values.put(“info”, info);
  4. String whereClause = “id=?”;
  5. String[] whereArgs = new String[] { String.valueOf(id) };
  6. mDb.update(table, values, whereClause, whereArgs);

(4.)查询一条数据

view plain copy to clipboard print ?

  1. String[] columns = new String[] { “id”, “username”, “info” };
  2. String selection = “id=?”;
  3. String[] selectionArgs = { String.valueOf(id) };
  4. String groupBy = null;
  5. String having = null;
  6. String orderBy = null;
  7. mDb.query(table, columns, selection,selectionArgs, groupBy, having, orderBy);

(5.)查询所有记录

view plain copy to clipboard print ?

  1. mDb.rawQuery(“select * from “+table, null);

SqliteActivity源码类如下(注意:在点击对数据记录的增删改查时要先create table ,否则会因为无法找到mytable表而报错)

SqliteActivity.java

view plain copy to clipboard print ?

  1. package com.sqlite.main;
  2. import java.io.File;
  3. import android.app.Activity;
  4. import android.content.ContentValues;
  5. import android.database.Cursor;
  6. import android.database.SQLException;
  7. import android.database.sqlite.SQLiteDatabase;
  8. import android.os.Bundle;
  9. import android.text.Html;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15. public class SqliteActivity extends Activity {
  16. /** Called when the activity is first created. */
  17. //SQLiteDatabase 引用
  18. SQLiteDatabase mDb;
  19. SQLiteDatabaseDao dao;
  20. //显示结果
  21. TextView show;
  22. @Override
  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.main);
  26. //默认创建一个users.db的数据库
  27. dao=new SQLiteDatabaseDao();
  28. //创建一个数据库
  29. Button createDatabase=(Button)findViewById(R.id.createdatabase);
  30. createDatabase.setOnClickListener(createDatabaseClick);
  31. //获取所有数据库
  32. Button getDatabasesList=(Button)findViewById(R.id.getdatabaseslist);
  33. getDatabasesList.setOnClickListener(getDatabaseListClick);
  34. //重命名数据库
  35. Button renameDatabase=(Button)findViewById(R.id.renamedatabase);
  36. renameDatabase.setOnClickListener(renameDatabaseClick);
  37. //删除一个数据库
  38. Button removeDatabase=(Button)findViewById(R.id.removedatabase);
  39. removeDatabase.setOnClickListener(removeDatabaseClick);
  40. //创建一个表
  41. Button createTable=(Button)findViewById(R.id.createtable);
  42. createTable.setOnClickListener(createTableClick);
  43. //获取所有的表
  44. Button getTablesList=(Button)findViewById(R.id.gettableslist);
  45. getTablesList.setOnClickListener(getTablesListClick);
  46. //重命名一个表
  47. Button renameTable=(Button)findViewById(R.id.renametable);
  48. renameTable.setOnClickListener(renameTableClick);
  49. //删除一个表
  50. Button dropTable=(Button)findViewById(R.id.droptable);
  51. dropTable.setOnClickListener(dropTableClick);
  52. //为表添加一个字段
  53. Button addTableColumn=(Button)findViewById(R.id.addtablecolumn);
  54. addTableColumn.setOnClickListener(addTableColumnClick);
  55. //获取表的所有列
  56. Button getTableColumnsList=(Button)findViewById(R.id.gettablecolumnslist);
  57. getTableColumnsList.setOnClickListener(getTableColumnsListClick);
  58. //插入一条数据
  59. Button insertTable=(Button)findViewById(R.id.inserttable);
  60. insertTable.setOnClickListener(insertTableClick);
  61. //查询一条数据
  62. Button queryTable=(Button)findViewById(R.id.querytable);
  63. queryTable.setOnClickListener(queryTableClick);
  64. //更新一条数据
  65. Button updateTable=(Button)findViewById(R.id.updatetable);
  66. updateTable.setOnClickListener(updateTableClick);
  67. //删除一条数据
  68. Button delete=(Button)findViewById(R.id.delete);
  69. delete.setOnClickListener(deleteClick);
  70. //显示结果
  71. show=(TextView)findViewById(R.id.showresult);
  72. }
  73. /************对按钮事件进行操作的事件响应****************/
  74. //创建一个数据库
  75. OnClickListener createDatabaseClick=new OnClickListener() {
  76. @Override
  77. public void onClick(View v) {
  78. // TODO Auto-generated method stub
  79. //创建一个名为students.db的数据库,主要是生成另外一个数据库以示区别
  80. openOrCreateDatabase(“students.db”,
  81. SQLiteDatabase.CREATE_IF_NECESSARY, null);
  82. show.setText(“创建的数据库路径为\n”
  83. +getDatabasePath(“students.db”));
  84. }
  85. };
  86. //创建一个应用程序数据库的个数(list)的事件响应
  87. OnClickListener getDatabaseListClick=new OnClickListener() {
  88. @Override
  89. public void onClick(View v) {
  90. // TODO Auto-generated method stub
  91. String []dblist=dao.getDatabasesList();
  92. String rs=””;
  93. for(String s:dblist){
  94. rs+=s+”\n”;
  95. }
  96. show.setText(“数据库名称为:\n”+ rs);
  97. }
  98. };
  99. //重命名一个数据库的事件响应
  100. OnClickListener renameDatabaseClick=new OnClickListener() {
  101. @Override
  102. public void onClick(View v) {
  103. // TODO Auto-generated method stub
  104. //创建一个data.db的数据库,并命名为renamedata.db数据库
  105. openOrCreateDatabase(“data.db”,
  106. SQLiteDatabase.CREATE_IF_NECESSARY, null);
  107. File f = getDatabasePath(“data.db”);
  108. File renameFile=getDatabasePath(“renamedata.db”);
  109. boolean b=f.renameTo(renameFile);
  110. if(b)
  111. show.setText(“data.db已经重命名为renamedata.db”);
  112. else
  113. show.setText(“无法重命名”);
  114. }
  115. };
  116. //删除一个数据库的事件响应
  117. OnClickListener removeDatabaseClick=new OnClickListener() {
  118. @Override
  119. public void onClick(View v) {
  120. // TODO Auto-generated method stub
  121. //删除students.db数据库
  122. dao.dropDatabase(“students.db”);
  123. //重新获取数据库名称
  124. String []dblist=dao.getDatabasesList();
  125. String rs=””;
  126. for(String s:dblist){
  127. rs+=s+”\n”;
  128. }
  129. show.setText(“数据库students.db已经删除\n现在数据库的名称为:\n”+rs);
  130. }
  131. };
  132. //创建一个表的事件响应
  133. OnClickListener createTableClick=new OnClickListener() {
  134. @Override
  135. public void onClick(View v) {
  136. // TODO Auto-generated method stub
  137. //在user.db数据库中插入mytable表,并添加相应的字段
  138. dao.createTable(mDb, “mytable”);
  139. show.setText(“数据库students.db已经创建mytable表\n”);
  140. }
  141. };
  142. //获取一个数据库的所有表个数(list)的事件响应
  143. OnClickListener getTablesListClick=new OnClickListener() {
  144. @Override
  145. public void onClick(View v) {
  146. // TODO Auto-generated method stub
  147. //显示所有的表的数据
  148. String tableNames=dao.getTablesList(mDb);
  149. show.setText(tableNames);
  150. }
  151. };
  152. //重命名一个表的事件响应
  153. OnClickListener renameTableClick=new OnClickListener() {
  154. @Override
  155. public void onClick(View v) {
  156. // TODO Auto-generated method stub
  157. //创建一个testtable的表
  158. dao.createTable(mDb, “testtable”);
  159. //将testtable重命名为newtable
  160. boolean b=dao.alterTableRenameTable(mDb, “testtable”, “newtable”);
  161. if(b)show.setText(“testtable已经重命名为\nnewtable表\n”);
  162. else show.setText(“newtable已经存在\n请删除(drop table)后重试”);
  163. }
  164. };
  165. //删除一个表的事件响应
  166. OnClickListener dropTableClick=new OnClickListener() {
  167. @Override
  168. public void onClick(View v) {
  169. // TODO Auto-generated method stub
  170. //删除 newtable表
  171. dao.dropTable(mDb, “newtable”);
  172. //显示所有的表的数据
  173. String tableNames=dao.getTablesList(mDb);
  174. show.setText(“newtable已经删除\n现在表名称为:\n”+tableNames);
  175. }
  176. };
  177. //修改一个表(给表添加一个字段)的事件响应
  178. OnClickListener addTableColumnClick=new OnClickListener() {
  179. @Override
  180. public void onClick(View v) {
  181. // TODO Auto-generated method stub
  182. //默认添加一个password字段,类型为varchar,长度为30
  183. boolean b=dao.alterTableAddColumn(mDb, “mytable”, “password”, “ varchar(30)”);
  184. if(b)show.setText(“已经添加password字段\n字符类型为:varchar\n长度为:30”);
  185. else show.setText(“mytable表中password字段已经存在”);
  186. }
  187. };
  188. //获取一个表的所有列的名称事件响应
  189. OnClickListener getTableColumnsListClick=new OnClickListener() {
  190. @Override
  191. public void onClick(View v) {
  192. // TODO Auto-generated method stub
  193. String str=dao.getTableColumns(mDb);
  194. show.setText(“mytable表的列名:\n”+str);
  195. }
  196. };
  197. //对一个表添加一个数据的事件响应
  198. OnClickListener insertTableClick=new OnClickListener() {
  199. @Override
  200. public void onClick(View v) {
  201. // TODO Auto-generated method stub
  202. User user=new User();
  203. user.setUsername(“Mr.Young”);
  204. user.setInfo(“好学生”);
  205. dao.insert(mDb, “mytable”, user);
  206. Cursor c=dao.getAllData(mDb, “mytable”);
  207. if(c.moveToLast()){
  208. String id=c.getString(0);
  209. String username=c.getString(1);
  210. String info=c.getString(2);
  211. show.setText(“最新添加的一条数据:\n”+“id:”+id+”\nusername:”+username+”\ninfo:”+info);
  212. }
  213. }
  214. };
  215. //查询一个表的所有数据记录的事件响应
  216. OnClickListener queryTableClick=new OnClickListener() {
  217. @Override
  218. public void onClick(View v) {
  219. // TODO Auto-generated method stub
  220. //默认查询mytable所有数据
  221. Cursor c=dao.getAllData(mDb, “mytable”);
  222. String s=””;
  223. int columnsSize=c.getColumnCount();
  224. String []columns=c.getColumnNames();
  225. String columnsName=””;
  226. //获取表头
  227. for (String col : columns) {
  228. columnsName+=col+”\u0020 \u0020”;
  229. }
  230. //获取表的内容
  231. while(c.moveToNext()){
  232. for(int i=0;i<columnsSize;i++){
  233. s+=c.getString(i)+”\u0020 \u0020”;
  234. }
  235. s+=”
    “;
  236. }
  237. show.setText(Html.fromHtml(“
    “+columnsName+”
    “+s));
  238. }
  239. };
  240. //更新一个表的数据的事件响应
  241. OnClickListener updateTableClick=new OnClickListener() {
  242. @Override
  243. public void onClick(View v) {
  244. // TODO Auto-generated method stub
  245. Cursor c=dao.getAllData(mDb, “mytable”);
  246. if(c.moveToFirst()){
  247. int first=Integer.valueOf(c.getString(0));
  248. //默认修改第一条记录
  249. dao.update(mDb, “mytable”, first, “Yong Ming”, “学习成绩优异”);
  250. Cursor u=dao.queryById(mDb, “mytable”, first);
  251. u.moveToFirst();
  252. show.setText(“id为:”+first+”的记录已经修改:\nid:”+first+”\nusername:”+u.getString(1)+”\ninfo:”+u.getString(2));
  253. }else
  254. show.setText(“没有要更新的记录!请添加数据后再作修改”);
  255. }
  256. };
  257. //删除一个表的一条数据的事件响应
  258. OnClickListener deleteClick=new OnClickListener() {
  259. @Override
  260. public void onClick(View v) {
  261. // TODO Auto-generated method stub
  262. Cursor c=dao.getAllData(mDb, “mytable”);
  263. if(c.moveToLast()){
  264. int last=Integer.valueOf(c.getString(0));
  265. //默认删除最后一条记录
  266. boolean b=dao.delete(mDb, “mytable”, last);
  267. if(b)
  268. show.setText(“成功删除id为:\n”+last+”的记录!”);
  269. }
  270. else
  271. show.setText(“没有要删除的记录!”);
  272. }
  273. };
  274. //退出时关闭数据库
  275. @Override
  276. public void finish() {
  277. // TODO Auto-generated method stub
  278. super.finish();
  279. mDb.close();
  280. }
  281. /*******************
  282. *
  283. *
  284. *
  285. * 对Sqlite数据库进行操作的类
  286. *
  287. *
  288. *
  289. * ****************/
  290. class SQLiteDatabaseDao {
  291. public SQLiteDatabaseDao(){
  292. mDb=openOrCreateDatabase(“users.db”,
  293. SQLiteDatabase.CREATE_IF_NECESSARY, null);
  294. }
  295. /************ 对数据库的操作 ***********************/
  296. // 获取所有数据库的名称
  297. public String[] getDatabasesList() {
  298. return databaseList();
  299. }
  300. // 创建一个数据库
  301. public void createDatabase(String db) {
  302. openOrCreateDatabase(db, SQLiteDatabase.CREATE_IF_NECESSARY, null);
  303. }
  304. // 删除一个数据库
  305. public void dropDatabase(String db) {
  306. try {
  307. deleteDatabase(db);
  308. } catch (SQLException e) {
  309. Toast.makeText(getApplicationContext(), “删除数据库失败”,
  310. Toast.LENGTH_LONG).show();
  311. }
  312. }
  313. /************ 对数据库的表的属性添加修改操作 ***********************/
  314. // 获取某个数据库的表的名称
  315. public String getTablesList(SQLiteDatabase mDb) {
  316. Cursor c = mDb
  317. .rawQuery(
  318. “select name from sqlite_master where type=’table’ order by name”,
  319. null);
  320. String str=””;
  321. while (c.moveToNext()) {
  322. str+=c.getString(0)+”\n”;
  323. }
  324. return “表的名称为:\n”+str;
  325. }
  326. // 创建一个表,默认创建一个username info字段的表,可以在后面的代码中添加相应的列
  327. public void createTable(SQLiteDatabase mDb, String table) {
  328. try {
  329. mDb.execSQL(“create table if not exists “+table+
  330. “ (id integer primary key autoincrement, “
  331. + “username text not null, info text not null);”);
  332. } catch (SQLException e) {
  333. Toast.makeText(getApplicationContext(), “数据表创建失败”,
  334. Toast.LENGTH_LONG).show();
  335. }
  336. }
  337. // 删除一个表
  338. public void dropTable(SQLiteDatabase mDb, String table) {
  339. try {
  340. mDb.execSQL(“drop table if exists “ + table);
  341. } catch (SQLException e) {
  342. Toast.makeText(getApplicationContext(), “数据表删除失败”,
  343. Toast.LENGTH_LONG).show();
  344. }
  345. }
  346. // 修改表—重命名表名
  347. public boolean alterTableRenameTable(SQLiteDatabase mDb, String oldTable,
  348. String newTableName) {
  349. try {
  350. mDb.execSQL(“alter table “ + oldTable + “ rename to “
  351. + newTableName+”;”);
  352. } catch (SQLException e) {
  353. Toast.makeText(getApplicationContext(), “数据表重命名失败”,
  354. Toast.LENGTH_LONG).show();
  355. return false;
  356. }
  357. return true;
  358. }
  359. // 修改表—添加一列
  360. // @table 需要修改的table名
  361. // @column 添加的列的名称
  362. // @type 列的类型,如text,varchar等
  363. public boolean alterTableAddColumn(SQLiteDatabase mDb, String table,
  364. String column, String type) {
  365. try {
  366. mDb.execSQL(“alter table “ + table + “ add column “ + column
  367. + type + “ ;”);
  368. } catch (SQLException e) {
  369. Toast.makeText(getApplicationContext(), “数据表添加失败”,
  370. Toast.LENGTH_LONG).show();
  371. return false;
  372. }
  373. return true;
  374. }
  375. // 获取表的列的名称
  376. public String getTableColumns(SQLiteDatabase mDb) {
  377. Cursor c=dao.getAllData(mDb, “mytable”);;
  378. String []columns=c.getColumnNames();
  379. String str=””;
  380. for (String s : columns) {
  381. str+=s+”\n”;
  382. }
  383. return str;
  384. }
  385. /************ 对数据库的表数据增删改查操作 ***********************/
  386. // 添加一条数据,默认只向username和info字段添加数据
  387. public long insert(SQLiteDatabase mDb,String table,User user) {
  388. ContentValues values = new ContentValues();
  389. values.put(“username”, user.getUsername());
  390. values.put(“info”, user.getInfo());
  391. return mDb.insert(table, null, values);
  392. }
  393. /*
  394. *
  395. * 删除一条数据
  396. */
  397. public boolean delete(SQLiteDatabase mDb,String table,int id) {
  398. String whereClause = “id=?”;
  399. String[] whereArgs = new String[] {String.valueOf(id)};
  400. try{
  401. mDb.delete(table, whereClause, whereArgs);
  402. }catch (SQLException e) {
  403. Toast.makeText(getApplicationContext(), “删除数据库失败”,
  404. Toast.LENGTH_LONG).show();
  405. return false;
  406. }
  407. return true;
  408. }
  409. /*
  410. *
  411. * 修改一条数据
  412. */
  413. public void update(SQLiteDatabase mDb,String table,int id,String username,String info)
  414. {
  415. ContentValues values = new ContentValues();
  416. values.put(“username”, username);
  417. values.put(“info”, info);
  418. String whereClause = “id=?”;
  419. String[] whereArgs = new String[] { String.valueOf(id) };
  420. mDb.update(table, values, whereClause, whereArgs);
  421. }
  422. public Cursor queryById(SQLiteDatabase mDb,String table,int id) {
  423. // 第一个参数String:表名
  424. // 第二个参数String[]:要查询的列名
  425. // 第三个参数String:查询条件
  426. // 第四个参数String[]:查询条件的参数
  427. // 第五个参数String:对查询的结果进行分组
  428. // 第六个参数String:对分组的结果进行限制
  429. // 第七个参数String:对查询的结果进行排序
  430. String[] columns = new String[] { “id”, “username”, “info” };
  431. String selection = “id=?”;
  432. String[] selectionArgs = { String.valueOf(id) };
  433. String groupBy = null;
  434. String having = null;
  435. String orderBy = null;
  436. return mDb.query(table, columns, selection,
  437. selectionArgs, groupBy, having, orderBy);
  438. }
  439. public Cursor getAllData(SQLiteDatabase mDb,String table) {
  440. //遍历表所有数据
  441. return mDb.rawQuery(“select * from “+table, null);
  442. /** 如果需要返回指定的列,则执行以下语句
  443. String[] columns = new String[] { “id”,”username”, “info” };
  444. // 调用SQLiteDatabase类的query函数查询记录
  445. return mDb.query(table, columns, null, null, null, null,
  446. null);
  447. */
  448. }
  449. }
  450. }

转载于:https://www.cnblogs.com/Codenewbie/archive/2013/03/21/2973252.html

发表评论

表情:
评论列表 (有 0 条评论,546人围观)

还没有评论,来说两句吧...

相关阅读