zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    网络数据处理
    进程间通信和网络
    附加的操作系统服务
    通用操作系统服务
    UIScrollView 子控件的自动布局经验
    UIImage 添加水印
    数据类型
    ios 获取手机的IP地址
    UILAbel 设置了attributedText 后省略号不显示
    swift
  • 原文地址:https://www.cnblogs.com/androidsj/p/5173470.html
Copyright © 2011-2022 走看看