加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite数据库的增删改查

发布时间:2020-12-12 23:54:45 所属栏目:百科 来源:网络整理
导读:文章转载自:http://www.cnblogs.com/Codenewbie/archive/2013/03/21/2973252.html android平台下数据库的一些概念 Sqlite是android平台的一款轻量级的、嵌入式的、关系型数据库产品,以下是一些主要概念。 1.Sqlite通过文件保存数据库,创建的数据库文件默认

文章转载自:http://www.cnblogs.com/Codenewbie/archive/2013/03/21/2973252.html


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图-2 创建的数据库截图

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

(1.)创建一个数据库

view plain copy to clipboard print ?
  1. //在文件夹/data/data/<package>/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. Filef=getDatabasePath("data.db");
  3. FilerenameFile=getDatabasePath("renamedata.db");
  4. f.renameTo(renameFile);

2.对表的操作

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

view plain copy to clipboard print ?
  1. mDb.execSQL("createtableifnotexists"+table+
  2. "(idintegerprimarykeyautoincrement,"
  3. +"usernametextnotnull,infotextnotnull);");

(2.)删除一个表

view plain copy to clipboard print ?
  1. mDb.execSQL("droptableifexists"+table);

(3.)修改表

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

个字段及其属性

1.)重命名表

view plain copy to clipboard print ?
  1. mDb.execSQL("altertable"+oldTable+"renameto"+newTableName+";");

2.)添加一列

view plain copy to clipboard print ?
  1. mDb.execSQL("altertable"+table+"addcolumn"+column+type+";");

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

view plain copy to clipboard print ?
  1. mDb.rawQuery("selectnamefromsqlite_masterwheretype='table'orderbyname",null);

3.对数据库记录的操作

(1.)添加一条记录

view plain copy to clipboard print ?
  1. ContentValuesvalues=newContentValues();
  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. StringwhereClause="id=?";
  2. String[]whereArgs=newString[]{String.valueOf(id)};
  3. mDb.delete(table,whereClause,whereArgs);

(3.)修改一条记录

  • values.put("info",info);
  • StringwhereClause="id=?";
  • String[]whereArgs=newString[]{String.valueOf(id)};
  • mDb.update(table,values,whereArgs);
  • (4.)查询一条数据

    view plain copy to clipboard print ?
    1. String[]columns=newString[]{"id","username","info"};
    2. Stringselection="id=?";
    3. String[]selectionArgs={String.valueOf(id)};
    4. StringgroupBy=null;
    5. Stringhaving=null;
    6. StringorderBy=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. packagecom.sqlite.main;
    2. importjava.io.File;
    3. importandroid.app.Activity;
    4. importandroid.content.ContentValues;
    5. importandroid.database.Cursor;
    6. importandroid.database.SQLException;
    7. importandroid.database.sqlite.SQLiteDatabase;
    8. importandroid.os.Bundle;
    9. importandroid.text.Html;
    10. importandroid.view.View;
    11. importandroid.view.View.OnClickListener;
    12. importandroid.widget.Button;
    13. importandroid.widget.TextView;
    14. importandroid.widget.Toast;
    15. publicclassSqliteActivityextendsActivity{
    16. /**Calledwhentheactivityisfirstcreated.*/
    17. //SQLiteDatabase引用
    18. SQLiteDatabasemDb;
    19. SQLiteDatabaseDaodao;
    20. //显示结果
    21. TextViewshow;
    22. @Override
    23. publicvoidonCreate(BundlesavedInstanceState){
    24. super.onCreate(savedInstanceState);
    25. setContentView(R.layout.main);
    26. //默认创建一个users.db的数据库
    27. dao=newSQLiteDatabaseDao();
    28. //创建一个数据库
    29. ButtoncreateDatabase=(Button)findViewById(R.id.createdatabase);
    30. createDatabase.setOnClickListener(createDatabaseClick);
    31. //获取所有数据库
    32. ButtongetDatabasesList=(Button)findViewById(R.id.getdatabaseslist);
    33. getDatabasesList.setOnClickListener(getDatabaseListClick);
    34. //重命名数据库
    35. ButtonrenameDatabase=(Button)findViewById(R.id.renamedatabase);
    36. renameDatabase.setOnClickListener(renameDatabaseClick);
    37. //删除一个数据库
    38. ButtonremoveDatabase=(Button)findViewById(R.id.removedatabase);
    39. removeDatabase.setOnClickListener(removeDatabaseClick);
    40. //创建一个表
    41. ButtoncreateTable=(Button)findViewById(R.id.createtable);
    42. createTable.setOnClickListener(createTableClick);
    43. //获取所有的表
    44. ButtongetTablesList=(Button)findViewById(R.id.gettableslist);
    45. getTablesList.setOnClickListener(getTablesListClick);
    46. //重命名一个表
    47. ButtonrenameTable=(Button)findViewById(R.id.renametable);
    48. renameTable.setOnClickListener(renameTableClick);
    49. //删除一个表
    50. ButtondropTable=(Button)findViewById(R.id.droptable);
    51. dropTable.setOnClickListener(dropTableClick);
    52. //为表添加一个字段
    53. ButtonaddTableColumn=(Button)findViewById(R.id.addtablecolumn);
    54. addTableColumn.setOnClickListener(addTableColumnClick);
    55. //获取表的所有列
    56. ButtongetTableColumnsList=(Button)findViewById(R.id.gettablecolumnslist);
    57. getTableColumnsList.setOnClickListener(getTableColumnsListClick);
    58. //插入一条数据
    59. ButtoninsertTable=(Button)findViewById(R.id.inserttable);
    60. insertTable.setOnClickListener(insertTableClick);
    61. //查询一条数据
    62. ButtonqueryTable=(Button)findViewById(R.id.querytable);
    63. queryTable.setOnClickListener(queryTableClick);
    64. //更新一条数据
    65. ButtonupdateTable=(Button)findViewById(R.id.updatetable);
    66. updateTable.setOnClickListener(updateTableClick);
    67. //删除一条数据
    68. Buttondelete=(Button)findViewById(R.id.delete);
    69. delete.setOnClickListener(deleteClick);
    70. //显示结果
    71. show=(TextView)findViewById(R.id.showresult);
    72. }
    73. /************对按钮事件进行操作的事件响应****************/
    74. //创建一个数据库
    75. OnClickListenercreateDatabaseClick=newOnClickListener(){
    76. @Override
    77. publicvoidonClick(Viewv){
    78. //TODOAuto-generatedmethodstub
    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. OnClickListenergetDatabaseListClick=newOnClickListener(){
    88. @Override
    89. publicvoidonClick(Viewv){
    90. //TODOAuto-generatedmethodstub
    91. String[]dblist=dao.getDatabasesList();
    92. Stringrs="";
    93. for(Strings:dblist){
    94. rs+=s+"n";
    95. }
    96. show.setText("数据库名称为:n"+rs);
    97. }
    98. };
    99. //重命名一个数据库的事件响应
    100. OnClickListenerrenameDatabaseClick=newOnClickListener(){
    101. @Override
    102. publicvoidonClick(Viewv){
    103. //TODOAuto-generatedmethodstub
    104. //创建一个data.db的数据库,并命名为renamedata.db数据库
    105. openOrCreateDatabase("data.db",
    106. SQLiteDatabase.CREATE_IF_NECESSARY,null);
    107. Filef=getDatabasePath("data.db");
    108. FilerenameFile=getDatabasePath("renamedata.db");
    109. booleanb=f.renameTo(renameFile);
    110. if(b)
    111. show.setText("data.db已经重命名为renamedata.db");
    112. else
    113. show.setText("无法重命名");
    114. }
    115. };
    116. //删除一个数据库的事件响应
    117. OnClickListenerremoveDatabaseClick=newOnClickListener(){
    118. @Override
    119. publicvoidonClick(Viewv){
    120. //TODOAuto-generatedmethodstub
    121. //删除students.db数据库
    122. dao.dropDatabase("students.db");
    123. //重新获取数据库名称
    124. String[]dblist=dao.getDatabasesList();
    125. Stringrs="";
    126. for(Strings:dblist){
    127. rs+=s+"n";
    128. }
    129. show.setText("数据库students.db已经删除n现在数据库的名称为:n"+rs);
    130. }
    131. };
    132. //创建一个表的事件响应
    133. OnClickListenercreateTableClick=newOnClickListener(){
    134. @Override
    135. publicvoidonClick(Viewv){
    136. //TODOAuto-generatedmethodstub
    137. //在user.db数据库中插入mytable表,并添加相应的字段
    138. dao.createTable(mDb,"mytable");
    139. show.setText("数据库students.db已经创建mytable表n");
    140. }
    141. };
    142. //获取一个数据库的所有表个数(list)的事件响应
    143. OnClickListenergetTablesListClick=newOnClickListener(){
    144. @Override
    145. publicvoidonClick(Viewv){
    146. //TODOAuto-generatedmethodstub
    147. //显示所有的表的数据
    148. StringtableNames=dao.getTablesList(mDb);
    149. show.setText(tableNames);
    150. }
    151. };
    152. //重命名一个表的事件响应
    153. OnClickListenerrenameTableClick=newOnClickListener(){
    154. @Override
    155. publicvoidonClick(Viewv){
    156. //TODOAuto-generatedmethodstub
    157. //创建一个testtable的表
    158. dao.createTable(mDb,"testtable");
    159. //将testtable重命名为newtable
    160. booleanb=dao.alterTableRenameTable(mDb,"testtable","newtable");
    161. if(b)show.setText("testtable已经重命名为nnewtable表n");
    162. elseshow.setText("newtable已经存在n请删除(droptable)后重试");
    163. }
    164. };
    165. //删除一个表的事件响应
    166. OnClickListenerdropTableClick=newOnClickListener(){
    167. @Override
    168. publicvoidonClick(Viewv){
    169. //TODOAuto-generatedmethodstub
    170. //删除newtable表
    171. dao.dropTable(mDb,"newtable");
    172. //显示所有的表的数据
    173. StringtableNames=dao.getTablesList(mDb);
    174. show.setText("newtable已经删除n现在表名称为:n"+tableNames);
    175. }
    176. };
    177. //修改一个表(给表添加一个字段)的事件响应
    178. OnClickListeneraddTableColumnClick=newOnClickListener(){
    179. @Override
    180. publicvoidonClick(Viewv){
    181. //TODOAuto-generatedmethodstub
    182. //默认添加一个password字段,类型为varchar,长度为30
    183. booleanb=dao.alterTableAddColumn(mDb,"mytable","password","varchar(30)");
    184. if(b)show.setText("已经添加password字段n字符类型为:varcharn长度为:30");
    185. elseshow.setText("mytable表中password字段已经存在");
    186. }
    187. };
    188. //获取一个表的所有列的名称事件响应
    189. OnClickListenergetTableColumnsListClick=newOnClickListener(){
    190. @Override
    191. publicvoidonClick(Viewv){
    192. //TODOAuto-generatedmethodstub
    193. Stringstr=dao.getTableColumns(mDb);
    194. show.setText("mytable表的列名:n"+str);
    195. }
    196. };
    197. //对一个表添加一个数据的事件响应
    198. OnClickListenerinsertTableClick=newOnClickListener(){
    199. @Override
    200. publicvoidonClick(Viewv){
    201. //TODOAuto-generatedmethodstub
    202. Useruser=newUser();
    203. user.setUsername("Mr.Young");
    204. user.setInfo("好学生");
    205. dao.insert(mDb,"mytable",user);
    206. Cursorc=dao.getAllData(mDb,"mytable");
    207. if(c.moveToLast()){
    208. Stringid=c.getString(0);
    209. Stringusername=c.getString(1);
    210. Stringinfo=c.getString(2);
    211. show.setText("最新添加的一条数据:n"+"id:"+id+"nusername:"+username+"ninfo:"+info);
    212. }
    213. }
    214. };
    215. //查询一个表的所有数据记录的事件响应
    216. OnClickListenerqueryTableClick=newOnClickListener(){
    217. @Override
    218. publicvoidonClick(Viewv){
    219. //TODOAuto-generatedmethodstub
    220. //默认查询mytable所有数据
    221. Cursorc=dao.getAllData(mDb,"mytable");
    222. Strings="";
    223. intcolumnsSize=c.getColumnCount();
    224. String[]columns=c.getColumnNames();
    225. StringcolumnsName="";
    226. //获取表头
    227. for(Stringcol:columns){
    228. columnsName+=col+"u0020u0020";
    229. }
    230. //获取表的内容
    231. while(c.moveToNext()){
    232. for(inti=0;i<columnsSize;i++){
    233. s+=c.getString(i)+"u0020u0020";
    234. }
    235. s+="<br>";
    236. }
    237. show.setText(Html.fromHtml("<h5>"+columnsName+"</h5>"+s));
    238. }
    239. };
    240. //更新一个表的数据的事件响应
    241. OnClickListenerupdateTableClick=newOnClickListener(){
    242. @Override
    243. publicvoidonClick(Viewv){
    244. //TODOAuto-generatedmethodstub
    245. Cursorc=dao.getAllData(mDb,"mytable");
    246. if(c.moveToFirst()){
    247. intfirst=Integer.valueOf(c.getString(0));
    248. //默认修改第一条记录
    249. dao.update(mDb,first,"YongMing","学习成绩优异");
    250. Cursoru=dao.queryById(mDb,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. OnClickListenerdeleteClick=newOnClickListener(){
    259. @Override
    260. publicvoidonClick(Viewv){
    261. //TODOAuto-generatedmethodstub
    262. Cursorc=dao.getAllData(mDb,"mytable");
    263. if(c.moveToLast()){
    264. intlast=Integer.valueOf(c.getString(0));
    265. //默认删除最后一条记录
    266. booleanb=dao.delete(mDb,last);
    267. if(b)
    268. show.setText("成功删除id为:n"+last+"的记录!");
    269. }
    270. else
    271. show.setText("没有要删除的记录!");
    272. }
    273. };
    274. //退出时关闭数据库
    275. @Override
    276. publicvoidfinish(){
    277. //TODOAuto-generatedmethodstub
    278. super.finish();
    279. mDb.close();
    280. }
    281. /*******************
    282. *
    283. *
    284. *
    285. *对Sqlite数据库进行操作的类
    286. *
    287. *
    288. *
    289. *****************/
    290. classSQLiteDatabaseDao{
    291. publicSQLiteDatabaseDao(){
    292. mDb=openOrCreateDatabase("users.db",null);
    293. }
    294. /************对数据库的操作***********************/
    295. //获取所有数据库的名称
    296. publicString[]getDatabasesList(){
    297. returndatabaseList();
    298. }
    299. //创建一个数据库
    300. publicvoidcreateDatabase(Stringdb){
    301. openOrCreateDatabase(db,null);
    302. }
    303. //删除一个数据库
    304. publicvoiddropDatabase(Stringdb){
    305. try{
    306. deleteDatabase(db);
    307. }catch(SQLExceptione){
    308. Toast.makeText(getApplicationContext(),"删除数据库失败",
    309. Toast.LENGTH_LONG).show();
    310. }
    311. }
    312. /************对数据库的表的属性添加修改操作***********************/
    313. //获取某个数据库的表的名称
    314. publicStringgetTablesList(SQLiteDatabasemDb){
    315. Cursorc=mDb
    316. .rawQuery(
    317. "selectnamefromsqlite_masterwheretype='table'orderbyname",
    318. null);
    319. Stringstr="";
    320. while(c.moveToNext()){
    321. str+=c.getString(0)+"n";
    322. }
    323. return"表的名称为:n"+str;
    324. }
    325. //创建一个表,默认创建一个usernameinfo字段的表,可以在后面的代码中添加相应的列
    326. publicvoidcreateTable(SQLiteDatabasemDb,Stringtable){
    327. try{
    328. mDb.execSQL("createtableifnotexists"+table+
    329. "(idintegerprimarykeyautoincrement,infotextnotnull);");
    330. }catch(SQLExceptione){
    331. Toast.makeText(getApplicationContext(),"数据表创建失败",
    332. Toast.LENGTH_LONG).show();
    333. }
    334. }
    335. //删除一个表
    336. publicvoiddropTable(SQLiteDatabasemDb,Stringtable){
    337. try{
    338. mDb.execSQL("droptableifexists"+table);
    339. }catch(SQLExceptione){
    340. Toast.makeText(getApplicationContext(),"数据表删除失败",
    341. Toast.LENGTH_LONG).show();
    342. }
    343. }
    344. //修改表--重命名表名
    345. publicbooleanalterTableRenameTable(SQLiteDatabasemDb,StringoldTable,
    346. StringnewTableName){
    347. try{
    348. mDb.execSQL("altertable"+oldTable+"renameto"
    349. +newTableName+";");
    350. }catch(SQLExceptione){
    351. Toast.makeText(getApplicationContext(),"数据表重命名失败",
    352. Toast.LENGTH_LONG).show();
    353. returnfalse;
    354. }
    355. returntrue;
    356. }
    357. //修改表--添加一列
    358. //@table需要修改的table名
    359. //@column添加的列的名称
    360. //@type列的类型,如text,varchar等
    361. publicbooleanalterTableAddColumn(SQLiteDatabasemDb,Stringtable,
    362. Stringcolumn,Stringtype){
    363. try{
    364. mDb.execSQL("altertable"+table+"addcolumn"+column
    365. +type+";");
    366. }catch(SQLExceptione){
    367. Toast.makeText(getApplicationContext(),"数据表添加失败",
    368. Toast.LENGTH_LONG).show();
    369. returnfalse;
    370. }
    371. returntrue;
    372. }
    373. //获取表的列的名称
    374. publicStringgetTableColumns(SQLiteDatabasemDb){
    375. Cursorc=dao.getAllData(mDb,"mytable");;
    376. String[]columns=c.getColumnNames();
    377. Stringstr="";
    378. for(Strings:columns){
    379. str+=s+"n";
    380. }
    381. returnstr;
    382. }
    383. /************对数据库的表数据增删改查操作***********************/
    384. //添加一条数据,默认只向username和info字段添加数据
    385. publiclonginsert(SQLiteDatabasemDb,Useruser){
    386. ContentValuesvalues=newContentValues();
    387. values.put("username",user.getUsername());
    388. values.put("info",user.getInfo());
    389. returnmDb.insert(table,null,values);
    390. }
    391. /*
    392. *
    393. *删除一条数据
    394. */
    395. publicbooleandelete(SQLiteDatabasemDb,intid){
    396. StringwhereClause="id=?";
    397. String[]whereArgs=newString[]{String.valueOf(id)};
    398. try{
    399. mDb.delete(table,whereArgs);
    400. }catch(SQLExceptione){
    401. Toast.makeText(getApplicationContext(),
    402. Toast.LENGTH_LONG).show();
    403. returnfalse;
    404. }
    405. returntrue;
    406. }
    407. /*
    408. *
    409. *修改一条数据
    410. */
    411. publicvoidupdate(SQLiteDatabasemDb,intid,Stringusername,Stringinfo)
    412. {
    413. ContentValuesvalues=newContentValues();
    414. values.put("username",whereArgs);
    415. }
    416. publicCursorqueryById(SQLiteDatabasemDb,intid){
    417. //第一个参数String:表名
    418. //第二个参数String[]:要查询的列名
    419. //第三个参数String:查询条件
    420. //第四个参数String[]:查询条件的参数
    421. //第五个参数String:对查询的结果进行分组
    422. //第六个参数String:对分组的结果进行限制
    423. //第七个参数String:对查询的结果进行排序
    424. String[]columns=newString[]{"id","info"};
    425. Stringselection="id=?";
    426. String[]selectionArgs={String.valueOf(id)};
    427. StringgroupBy=null;
    428. Stringhaving=null;
    429. StringorderBy=null;
    430. returnmDb.query(table,
    431. selectionArgs,orderBy);
    432. }
    433. publicCursorgetAllData(SQLiteDatabasemDb,Stringtable){
    434. //遍历表所有数据
    435. returnmDb.rawQuery("select*from"+table,null);
    436. /**如果需要返回指定的列,则执行以下语句
    437. String[]columns=newString[]{"id","username","info"};
    438. //调用SQLiteDatabase类的query函数查询记录
    439. returnmDb.query(table,null,
    440. null);
    441. */
    442. }
    443. }
    444. }

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读