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

 

  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>
原文地址:https://www.cnblogs.com/androidsj/p/5173470.html