读书人

android 对sqlite数据库的增删节查

发布时间: 2013-03-04 17:22:13 作者: rapoo

android 对sqlite数据库的增删改查

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

android 对sqlite数据库的增删节查

图-2 创建的数据库截图

?

(1.)创建一个数据库

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

(2.)删除一个数据库

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

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

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

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

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

2.对表的操作

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

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

(2.)删除一个表

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

(3.)修改表

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

1.)重命名表

?
  1. mDb.execSQL("alter?table?"?+?oldTable?+?"?rename?to??"+?newTableName+";");?????

2.)添加一列

?
  1. mDb.execSQL("alter?table??"?+?table?+?"?add?column?"?+?column?+??type?+?"?;");?????

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

?
  1. mDb.rawQuery("select?name?from?sqlite_master?where?type='table'?order?by?name",null);?????

3.对数据库记录的操作

(1.)添加一条记录

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

(2.)删除一条记录

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

(3.)修改一条记录

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

(4.)查询一条数据

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

(5.)查询所有记录

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

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

SqliteActivity.java

?
  1. package?com.sqlite.main;????
  2. import?java.io.File;??import?android.app.Activity;??
  3. import?android.content.ContentValues;??import?android.database.Cursor;??
  4. import?android.database.SQLException;??import?android.database.sqlite.SQLiteDatabase;??
  5. import?android.os.Bundle;??import?android.text.Html;??
  6. import?android.view.View;??import?android.view.View.OnClickListener;??
  7. import?android.widget.Button;??import?android.widget.TextView;??
  8. import?android.widget.Toast;????
  9. public?class?SqliteActivity?extends?Activity?{??/**?Called?when?the?activity?is?first?created.?*/??
  10. ??? ? //SQLiteDatabase?引用??
  11. ? ? SQLiteDatabase?mDb;??? ? SQLiteDatabaseDao?dao;??
  12. ? ? //显示结果??? ? TextView?show;??
  13. ??? ? @Override??
  14. ? ? public?void?onCreate(Bundle?savedInstanceState)?{??? ? ? ? ?super.onCreate(savedInstanceState);??
  15. ? ? ? ? ?setContentView(R.layout.main);??? ? ? ? //默认创建一个users.db的数据库??
  16. ? ? ? ? ?dao=new?SQLiteDatabaseDao();??????? ? //创建一个数据库??
  17. ? ? Button?createDatabase=(Button)findViewById(R.id.createdatabase);??? ? createDatabase.setOnClickListener(createDatabaseClick);??
  18. ? ? //获取所有数据库??? ? Button?getDatabasesList=(Button)findViewById(R.id.getdatabaseslist);??
  19. ? ? getDatabasesList.setOnClickListener(getDatabaseListClick);??? ? //重命名数据库??
  20. ? ? Button?renameDatabase=(Button)findViewById(R.id.renamedatabase);??? ? renameDatabase.setOnClickListener(renameDatabaseClick);??
  21. ? ? //删除一个数据库??? ? Button?removeDatabase=(Button)findViewById(R.id.removedatabase);??
  22. ? ? removeDatabase.setOnClickListener(removeDatabaseClick);??? ? //创建一个表??
  23. ? ? Button?createTable=(Button)findViewById(R.id.createtable);??? ? createTable.setOnClickListener(createTableClick);??
  24. ? ? //获取所有的表??? ? Button?getTablesList=(Button)findViewById(R.id.gettableslist);??
  25. ? ? getTablesList.setOnClickListener(getTablesListClick);??? ? //重命名一个表??
  26. ? ? Button?renameTable=(Button)findViewById(R.id.renametable);??? ? renameTable.setOnClickListener(renameTableClick);??
  27. ? ? //删除一个表??? ? Button?dropTable=(Button)findViewById(R.id.droptable);??
  28. ? ? dropTable.setOnClickListener(dropTableClick);??? ? //为表添加一个字段??
  29. ? ? Button?addTableColumn=(Button)findViewById(R.id.addtablecolumn);??? ? addTableColumn.setOnClickListener(addTableColumnClick);??
  30. ? ? //获取表的所有列??? ? Button?getTableColumnsList=(Button)findViewById(R.id.gettablecolumnslist);??
  31. ? ? getTableColumnsList.setOnClickListener(getTableColumnsListClick);??? ? //插入一条数据??
  32. ? ? Button?insertTable=(Button)findViewById(R.id.inserttable);??? ? insertTable.setOnClickListener(insertTableClick);??
  33. ? ? //查询一条数据??? ? Button?queryTable=(Button)findViewById(R.id.querytable);??
  34. ? ? queryTable.setOnClickListener(queryTableClick);??? ? //更新一条数据??
  35. ? ? Button?updateTable=(Button)findViewById(R.id.updatetable);??? ? updateTable.setOnClickListener(updateTableClick);??
  36. ? ? //删除一条数据??? ? Button?delete=(Button)findViewById(R.id.delete);??
  37. ? ? delete.setOnClickListener(deleteClick);??? ? //显示结果??
  38. ? ? show=(TextView)findViewById(R.id.showresult); ???}??
  39. ??/************对按钮事件进行操作的事件响应****************/??
  40. ??? ? //创建一个数据库??
  41. ? ? OnClickListener?createDatabaseClick=new?OnClickListener()?{???
  42. ? ? ? ? @Override??? ? ? ? public?void?onClick(View?v)?{??
  43. ? ? ? ??//?TODO?Auto-generated?method?stub??? ? ? ??//创建一个名为students.db的数据库,主要是生成另外一个数据库以示区别??
  44. ? ? ? ??openOrCreateDatabase("students.db", ?SQLiteDatabase.CREATE_IF_NECESSARY,?null); ?
  45. ? ? ? ??show.setText("创建的数据库路径为\n"??+getDatabasePath("students.db")); ??? ? }??
  46. };?????//创建一个应用程序数据库的个数(list)的事件响应??
  47. OnClickListener?getDatabaseListClick=new?OnClickListener()?{ ?
  48. ? ? @Override??? ? public?void?onClick(View?v)?{??
  49. ? ? ? ??//?TODO?Auto-generated?method?stub??? ? ? ??String?[]dblist=dao.getDatabasesList();??
  50. ? ? ? ??String?rs="";??? ? ? ??for(String?s:dblist){??
  51. ? ? ? ?? ? ? ? ??rs+=s+"\n";??? ? ? ??}??
  52. ? ? ? ??show.setText("数据库名称为:\n"+?rs); ???
  53. ? ?}??};??
  54. ????
  55. //重命名一个数据库的事件响应??
  56. OnClickListener?renameDatabaseClick=new?OnClickListener()?{ ???? ? @Override??
  57. ? ? public?void?onClick(View?v)?{??? ? ? ??//?TODO?Auto-generated?method?stub??
  58. ? ? ? ??//创建一个data.db的数据库,并命名为renamedata.db数据库??? ? ? ??openOrCreateDatabase("data.db",?SQLiteDatabase.CREATE_IF_NECESSARY,?null); ?? ? ? ??File?f?=?getDatabasePath("data.db");??
  59. ? ? ? ??File?renameFile=getDatabasePath("renamedata.db");??? ? ? ??boolean?b=f.renameTo(renameFile);??
  60. ? ? ? ??if(b)??? ? ? ?? ? ? ? ??show.setText("data.db已经重命名为renamedata.db");??
  61. ? ? ? ??else??
  62. ? ? ? ??show.setText("无法重命名");??? ? }??
  63. }; ???
  64. ??//删除一个数据库的事件响应??
  65. OnClickListener?removeDatabaseClick=new?OnClickListener()?{ ?
  66. ? ? @Override??? ? public?void?onClick(View?v)?{??
  67. ? ? ? ??//?TODO?Auto-generated?method?stub??? ? ? ??/删除students.db数据库??
  68. ? ? ? ??dao.dropDatabase("students.db");??? ? ? ??//重新获取数据库名称??
  69. ? ? ? ??String?[]dblist=dao.getDatabasesList();??? ? ? ??String?rs="";??
  70. for(String?s:dblist){??rs+=s+"\n";??
  71. }??show.setText("数据库students.db已经删除\n现在数据库的名称为:\n"+rs);??
  72. }??};??
  73. ??//创建一个表的事件响应??
  74. ??OnClickListener?createTableClick=new?OnClickListener()?{??
  75. ??@Override??
  76. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  77. //在user.db数据库中插入mytable表,并添加相应的字段??dao.createTable(mDb,?"mytable");??
  78. show.setText("数据库students.db已经创建mytable表\n");????
  79. }??};??
  80. ????
  81. //获取一个数据库的所有表个数(list)的事件响应????
  82. OnClickListener?getTablesListClick=new?OnClickListener()?{????
  83. @Override??public?void?onClick(View?v)?{??
  84. //?TODO?Auto-generated?method?stub????
  85. //显示所有的表的数据??String?tableNames=dao.getTablesList(mDb);??
  86. show.setText(tableNames);????
  87. }??};??
  88. ??//重命名一个表的事件响应??
  89. ??OnClickListener?renameTableClick=new?OnClickListener()?{??
  90. ??@Override??
  91. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  92. //创建一个testtable的表??dao.createTable(mDb,?"testtable");??
  93. //将testtable重命名为newtable??boolean?b=dao.alterTableRenameTable(mDb,?"testtable",?"newtable");??
  94. if(b)show.setText("testtable已经重命名为\nnewtable表\n");??else?show.setText("newtable已经存在\n请删除(drop?table)后重试");??
  95. }??};??
  96. ??//删除一个表的事件响应??
  97. ??OnClickListener?dropTableClick=new?OnClickListener()?{??
  98. ??@Override??
  99. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  100. //删除????newtable表??dao.dropTable(mDb,?"newtable");??
  101. //显示所有的表的数据??String?tableNames=dao.getTablesList(mDb);??
  102. show.setText("newtable已经删除\n现在表名称为:\n"+tableNames);??}??
  103. };????
  104. ??//修改一个表(给表添加一个字段)的事件响应??
  105. ??OnClickListener?addTableColumnClick=new?OnClickListener()?{??
  106. ??@Override??
  107. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  108. //默认添加一个password字段,类型为varchar,长度为30??boolean?b=dao.alterTableAddColumn(mDb,?"mytable",?"password",?"?varchar(30)");??
  109. if(b)show.setText("已经添加password字段\n字符类型为:varchar\n长度为:30");??else?show.setText("mytable表中password字段已经存在");??
  110. }??};??
  111. ??//获取一个表的所有列的名称事件响应??
  112. ??OnClickListener?getTableColumnsListClick=new?OnClickListener()?{??
  113. ??@Override??
  114. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  115. ??String?str=dao.getTableColumns(mDb);??
  116. show.setText("mytable表的列名:\n"+str);??}??
  117. };????
  118. ??//对一个表添加一个数据的事件响应??
  119. ??OnClickListener?insertTableClick=new?OnClickListener()?{??
  120. ??@Override??
  121. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  122. ??User?user=new?User();??
  123. user.setUsername("Mr.Young");??user.setInfo("好学生");??
  124. dao.insert(mDb,?"mytable",?user);????
  125. Cursor?c=dao.getAllData(mDb,?"mytable");??if(c.moveToLast()){??
  126. String?id=c.getString(0);??String?username=c.getString(1);??
  127. String?info=c.getString(2);????
  128. show.setText("最新添加的一条数据:\n"+"id:"+id+"\nusername:"+username+"\ninfo:"+info);??}??
  129. ??}??
  130. };????
  131. //查询一个表的所有数据记录的事件响应????
  132. OnClickListener?queryTableClick=new?OnClickListener()?{????
  133. @Override??public?void?onClick(View?v)?{??
  134. //?TODO?Auto-generated?method?stub??//默认查询mytable所有数据??
  135. ??Cursor?c=dao.getAllData(mDb,?"mytable");??
  136. String?s="";??int?columnsSize=c.getColumnCount();??
  137. String?[]columns=c.getColumnNames();??String?columnsName="";??
  138. //获取表头??for?(String?col?:?columns)?{??
  139. ??columnsName+=col+"\u0020?\u0020";??
  140. }??//获取表的内容??
  141. while(c.moveToNext()){????
  142. for(int?i=0;i<columnsSize;i++){??s+=c.getString(i)+"\u0020?\u0020";??
  143. }??s+="<br>";??
  144. }??show.setText(Html.fromHtml("<h5>"+columnsName+"</h5>"+s));??
  145. }??};??
  146. ??//更新一个表的数据的事件响应??
  147. ??OnClickListener?updateTableClick=new?OnClickListener()?{??
  148. ??@Override??
  149. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  150. Cursor?c=dao.getAllData(mDb,?"mytable");??if(c.moveToFirst()){??
  151. ??int?first=Integer.valueOf(c.getString(0));??
  152. ??//默认修改第一条记录??
  153. dao.update(mDb,?"mytable",?first,?"Yong?Ming",?"学习成绩优异");??Cursor?u=dao.queryById(mDb,?"mytable",?first);??
  154. u.moveToFirst();??show.setText("id为:"+first+"的记录已经修改:\nid:"+first+"\nusername:"+u.getString(1)+"\ninfo:"+u.getString(2));??
  155. ??}else??
  156. ??show.setText("没有要更新的记录!请添加数据后再作修改");??
  157. }??};??
  158. ??//删除一个表的一条数据的事件响应??
  159. ??OnClickListener?deleteClick=new?OnClickListener()?{??
  160. ??@Override??
  161. public?void?onClick(View?v)?{??//?TODO?Auto-generated?method?stub??
  162. Cursor?c=dao.getAllData(mDb,?"mytable");??if(c.moveToLast()){??
  163. int?last=Integer.valueOf(c.getString(0));????
  164. //默认删除最后一条记录??boolean?b=dao.delete(mDb,?"mytable",?last);??
  165. if(b)??show.setText("成功删除id为:\n"+last+"的记录!");??
  166. }??else??
  167. show.setText("没有要删除的记录!");??}??
  168. };????
  169. ??//退出时关闭数据库??
  170. @Override??public?void?finish()?{??
  171. //?TODO?Auto-generated?method?stub??super.finish();??
  172. mDb.close();??}??
  173. ????
  174. ????
  175. ??/*******************?
  176. *?*?
  177. *?*?对Sqlite数据库进行操作的类?
  178. *?*?
  179. *?*?****************/??
  180. ??class?SQLiteDatabaseDao?{??
  181. ??public?SQLiteDatabaseDao(){??
  182. mDb=openOrCreateDatabase("users.db",??SQLiteDatabase.CREATE_IF_NECESSARY,?null);??
  183. }????
  184. /************?对数据库的操作?***********************/????
  185. //?获取所有数据库的名称??public?String[]?getDatabasesList()?{??
  186. ??return?databaseList();??
  187. }????
  188. //?创建一个数据库??public?void?createDatabase(String?db)?{??
  189. ??openOrCreateDatabase(db,?SQLiteDatabase.CREATE_IF_NECESSARY,?null);??
  190. }????
  191. //?删除一个数据库??public?void?dropDatabase(String?db)?{??
  192. ??try?{??
  193. deleteDatabase(db);????
  194. }?catch?(SQLException?e)?{??Toast.makeText(getApplicationContext(),?"删除数据库失败",??
  195. Toast.LENGTH_LONG).show();????
  196. }??}??
  197. ??/************?对数据库的表的属性添加修改操作?***********************/??
  198. ??//?获取某个数据库的表的名称??
  199. public?String?getTablesList(SQLiteDatabase?mDb)?{????
  200. Cursor?c?=?mDb??.rawQuery(??
  201. "select?name?from?sqlite_master?where?type='table'?order?by?name",??null);??
  202. String?str="";??while?(c.moveToNext())?{??
  203. str+=c.getString(0)+"\n";????
  204. }??return?"表的名称为:\n"+str;??
  205. }????
  206. //?创建一个表,默认创建一个username?info字段的表,可以在后面的代码中添加相应的列??public?void?createTable(SQLiteDatabase?mDb,?String?table)?{??
  207. try?{??mDb.execSQL("create?table?if?not?exists?"+table+??
  208. "?(id?integer?primary?key?autoincrement,?"??+?"username?text?not?null,?info?text?not?null);");??
  209. }?catch?(SQLException?e)?{??Toast.makeText(getApplicationContext(),?"数据表创建失败",??
  210. Toast.LENGTH_LONG).show();??}??
  211. }????
  212. //?删除一个表??public?void?dropTable(SQLiteDatabase?mDb,?String?table)?{??
  213. ??try?{??
  214. mDb.execSQL("drop?table?if?exists?"?+?table);????
  215. }?catch?(SQLException?e)?{??Toast.makeText(getApplicationContext(),?"数据表删除失败",??
  216. Toast.LENGTH_LONG).show();??}??
  217. ??}??
  218. ??//?修改表--重命名表名??
  219. public?boolean?alterTableRenameTable(SQLiteDatabase?mDb,?String?oldTable,??String?newTableName)?{??
  220. try?{??mDb.execSQL("alter?table?"?+?oldTable?+?"?rename?to??"??
  221. +?newTableName+";");????
  222. }?catch?(SQLException?e)?{??Toast.makeText(getApplicationContext(),?"数据表重命名失败",??
  223. Toast.LENGTH_LONG).show();??return?false;??
  224. }????
  225. return?true;??}??
  226. ??//?修改表--添加一列??
  227. //?@table?需要修改的table名??//?@column?添加的列的名称??
  228. //?@type?列的类型,如text,varchar等??public?boolean?alterTableAddColumn(SQLiteDatabase?mDb,?String?table,??
  229. String?column,?String?type)?{??try?{??
  230. mDb.execSQL("alter?table??"?+?table?+?"?add?column?"?+?column??+?type?+?"?;");??
  231. ??}?catch?(SQLException?e)?{??
  232. Toast.makeText(getApplicationContext(),?"数据表添加失败",??Toast.LENGTH_LONG).show();??
  233. return?false;??}??
  234. ??return?true;??
  235. }????
  236. //?获取表的列的名称??public?String?getTableColumns(SQLiteDatabase?mDb)?{??
  237. ??Cursor?c=dao.getAllData(mDb,?"mytable");;??
  238. String?[]columns=c.getColumnNames();??String?str="";??
  239. for?(String?s?:?columns)?{????
  240. str+=s+"\n";????
  241. }????
  242. return?str;??}??
  243. ??/************?对数据库的表数据增删改查操作?***********************/??
  244. //?添加一条数据,默认只向username和info字段添加数据????
  245. public?long?insert(SQLiteDatabase?mDb,String?table,User?user)?{????
  246. ContentValues?values?=?new?ContentValues();??values.put("username",?user.getUsername());??
  247. values.put("info",?user.getInfo());??return?mDb.insert(table,?null,?values);??
  248. }????
  249. /*?*?
  250. *?删除一条数据?*/??
  251. public?boolean?delete(SQLiteDatabase?mDb,String?table,int?id)?{????
  252. String?whereClause?=??"id=?";??String[]?whereArgs?=?new?String[]?{String.valueOf(id)};??
  253. try{??mDb.delete(table,?whereClause,?whereArgs);??
  254. }catch?(SQLException?e)?{??Toast.makeText(getApplicationContext(),?"删除数据库失败",??
  255. Toast.LENGTH_LONG).show();??return?false;??
  256. }??return?true;??
  257. }????
  258. /*?*?
  259. *?修改一条数据?*/??
  260. public?void?update(SQLiteDatabase?mDb,String?table,int?id,String?username,String?info)???{??
  261. ??ContentValues?values?=?new?ContentValues();??
  262. values.put("username",?username);??values.put("info",?info);??
  263. String?whereClause?=?"id=?";??String[]?whereArgs?=?new?String[]?{?String.valueOf(id)?};??
  264. mDb.update(table,?values,?whereClause,?whereArgs);??}??
  265. ??public?Cursor?queryById(SQLiteDatabase?mDb,String?table,int?id)?{??
  266. ??//?第一个参数String:表名??
  267. //?第二个参数String[]:要查询的列名??//?第三个参数String:查询条件??
  268. //?第四个参数String[]:查询条件的参数??//?第五个参数String:对查询的结果进行分组??
  269. //?第六个参数String:对分组的结果进行限制??//?第七个参数String:对查询的结果进行排序??
  270. String[]?columns?=?new?String[]?{?"id",?"username",?"info"?};??String?selection?=?"id=?";??
  271. String[]?selectionArgs?=?{?String.valueOf(id)?};??String?groupBy?=?null;??
  272. String?having?=?null;??String?orderBy?=?null;??
  273. return?mDb.query(table,?columns,?selection,??selectionArgs,?groupBy,?having,?orderBy);??
  274. }????
  275. public?Cursor?getAllData(SQLiteDatabase?mDb,String?table)?{????
  276. //遍历表所有数据??return?mDb.rawQuery("select?*?from?"+table,?null);??
  277. ????
  278. /**?如果需要返回指定的列,则执行以下语句?String[]?columns?=?new?String[]?{?"id","username",?"info"?};?
  279. //?调用SQLiteDatabase类的query函数查询记录?return?mDb.query(table,?columns,?null,?null,?null,?null,?
  280. null);??
  281. */????
  282. }????
  283. }????
  284. } ?

读书人网 >其他数据库

热点推荐