android 对sqlite数据库的增删改查等各种操作

转载:http://blog.csdn.net/vrix/article/details/6717090

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

 

package com.sqlite.main; public class User { private int userId; private String username; private String info; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }

 

 1 <?xml version="1.0" encoding="utf-8"?>  2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  3  android:layout_width="fill_parent"  4  android:layout_height="fill_parent"  5  android:orientation="vertical" >  6  7 <TableRow  8 android:layout_width="fill_parent"  9  android:layout_height="wrap_content" >  10  11 <Button  12 android:id="@+id/createdatabase"  13  android:layout_width="fill_parent"  14  android:layout_height="wrap_content"  15  android:layout_weight="1"  16  android:text="create database" />  17  18 <Button  19 android:id="@+id/getdatabaseslist"  20  android:layout_width="fill_parent"  21  android:layout_height="wrap_content"  22  android:layout_weight="1"  23  android:text="get databases list" />  24 </TableRow>  25  26 <TableRow  27 android:layout_width="fill_parent"  28  android:layout_height="wrap_content" >  29  30 <Button  31 android:id="@+id/renamedatabase"  32  android:layout_width="fill_parent"  33  android:layout_height="wrap_content"  34  android:layout_weight="1"  35  android:text="rename database" />  36  37 <Button  38 android:id="@+id/removedatabase"  39  android:layout_width="fill_parent"  40  android:layout_height="wrap_content"  41  android:layout_weight="1"  42  android:text="remove database" />  43 </TableRow>  44  45 <TableRow  46 android:layout_width="fill_parent"  47  android:layout_height="wrap_content" >  48  49 <Button  50 android:id="@+id/createtable"  51  android:layout_width="fill_parent"  52  android:layout_height="wrap_content"  53  android:layout_weight="1"  54  android:text="create table" />  55  56 <Button  57 android:id="@+id/gettableslist"  58  android:layout_width="fill_parent"  59  android:layout_height="wrap_content"  60  android:layout_weight="1"  61  android:text="get tables list" />  62 </TableRow>  63  64 <TableRow  65 android:layout_width="fill_parent"  66  android:layout_height="wrap_content" >  67  68 <Button  69 android:id="@+id/renametable"  70  android:layout_width="fill_parent"  71  android:layout_height="wrap_content"  72  android:layout_weight="1"  73  android:text="rename table" />  74  75 <Button  76 android:id="@+id/droptable"  77  android:layout_width="fill_parent"  78  android:layout_height="wrap_content"  79  android:layout_weight="1"  80  android:text="drop table" />  81 </TableRow>  82  83 <TableRow  84 android:layout_width="fill_parent"  85  android:layout_height="wrap_content" >  86  87 <Button  88 android:id="@+id/addtablecolumn"  89  android:layout_width="fill_parent"  90  android:layout_height="wrap_content"  91  android:layout_weight="1"  92  android:text="add column" />  93  94 <Button  95 android:id="@+id/gettablecolumnslist"  96  android:layout_width="fill_parent"  97  android:layout_height="wrap_content"  98  android:layout_weight="1"  99  android:text="get columns list" /> 100 </TableRow> 101 102 <TableRow 103 android:layout_width="fill_parent" 104  android:layout_height="wrap_content" > 105 106 <Button 107 android:id="@+id/inserttable" 108  android:layout_width="fill_parent" 109  android:layout_height="wrap_content" 110  android:layout_weight="1" 111  android:text="insert" /> 112 113 <Button 114 android:id="@+id/querytable" 115  android:layout_width="fill_parent" 116  android:layout_height="wrap_content" 117  android:layout_weight="1" 118  android:text="query" /> 119 </TableRow> 120 121 <TableRow 122 android:layout_width="fill_parent" 123  android:layout_height="wrap_content" > 124 125 <Button 126 android:id="@+id/updatetable" 127  android:layout_width="fill_parent" 128  android:layout_height="wrap_content" 129  android:layout_weight="1" 130  android:text="update" /> 131 132 <Button 133 android:id="@+id/delete" 134  android:layout_width="fill_parent" 135  android:layout_height="wrap_content" 136  android:layout_weight="1" 137  android:text="delete" /> 138 </TableRow> 139 140 <ScrollView 141 android:layout_width="fill_parent" 142  android:layout_height="wrap_content" > 143 144 <TextView 145 android:id="@+id/showresult" 146  android:layout_width="fill_parent" 147  android:layout_height="wrap_content" /> 148 </ScrollView> 149 150 </LinearLayout>

 

你可能感兴趣的:(android 对sqlite数据库的增删改查等各种操作)