转载: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>