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("创建的数据库路径为
"
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+"
";
110 }
111 show.setText("数据库名称为:
"+ 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+"
";
150 }
151 show.setText("数据库students.db已经删除
现在数据库的名称为:
"+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表
");
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已经重命名为
newtable表
");
188 else show.setText("newtable已经存在
请删除(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已经删除
现在表名称为:
"+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字段
字符类型为:varchar
长度为: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表的列名:
"+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("最新添加的一条数据:
"+"id:"+id+"
username:"+username+"
info:"+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+"的记录已经修改:
id:"+first+"
username:"+u.getString(1)+"
info:"+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为:
"+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)+"
";
384
385 }
386 return "表的名称为:
"+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+"
";
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>