zoukankan      html  css  js  c++  java
  • 数据库的查询——增删改查以及数据库的事务

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     android:paddingBottom="@dimen/activity_vertical_margin"
     7     android:paddingLeft="@dimen/activity_horizontal_margin"
     8     android:paddingRight="@dimen/activity_horizontal_margin"
     9     android:paddingTop="@dimen/activity_vertical_margin"
    10     tools:context="com.hanqi.testapp3.TestActivity2"
    11     android:orientation="vertical">
    12 
    13     <Button
    14         android:layout_width="match_parent"
    15         android:layout_height="wrap_content"
    16         android:text="初始化数据库"
    17         android:onClick="bt1_OnClick"/>
    18 
    19     <Button
    20         android:layout_width="match_parent"
    21         android:layout_height="wrap_content"
    22         android:text="升级数据库"
    23         android:onClick="bt2_OnClick"/>
    24 
    25     <LinearLayout
    26         android:layout_width="match_parent"
    27         android:layout_height="wrap_content">
    28         <EditText
    29             android:layout_width="0dp"
    30             android:layout_height="wrap_content"
    31             android:layout_weight="1"
    32             android:id="@+id/et_id"
    33             android:hint="id"/>
    34         <EditText
    35             android:layout_width="0dp"
    36             android:layout_height="wrap_content"
    37             android:layout_weight="1"
    38             android:id="@+id/et_name"
    39             android:hint="名称"/>
    40     </LinearLayout>
    41     <LinearLayout
    42         android:layout_width="match_parent"
    43         android:layout_height="wrap_content">
    44         <EditText
    45             android:layout_width="0dp"
    46             android:layout_height="wrap_content"
    47             android:layout_weight="1"
    48             android:id="@+id/et_sex"
    49             android:hint="性别"/>
    50         <EditText
    51             android:layout_width="0dp"
    52             android:layout_height="wrap_content"
    53             android:layout_weight="1"
    54             android:id="@+id/et_age"
    55             android:hint="年龄"/>
    56     </LinearLayout>
    57     <Button
    58         android:layout_width="match_parent"
    59         android:layout_height="wrap_content"
    60         android:text="新增数据"
    61         android:onClick="bt3_OnClick"/>
    62 
    63     <Button
    64         android:layout_width="match_parent"
    65         android:layout_height="wrap_content"
    66         android:text="查询全部数据"
    67         android:onClick="bt4_OnClick"/>
    68 
    69     <Button
    70         android:layout_width="match_parent"
    71         android:layout_height="wrap_content"
    72         android:text="带条件查询数据"
    73         android:onClick="bt5_OnClick"/>
    74 
    75     <Button
    76         android:layout_width="match_parent"
    77         android:layout_height="wrap_content"
    78         android:text="修改数据"
    79         android:onClick="bt6_OnClick"/>
    80 
    81     <Button
    82         android:layout_width="match_parent"
    83         android:layout_height="wrap_content"
    84         android:text="删除数据"
    85         android:onClick="bt7_OnClick"/>
    86 
    87     <Button
    88         android:layout_width="match_parent"
    89         android:layout_height="wrap_content"
    90         android:text="数据库事务"
    91         android:onClick="bt8_OnClick"/>
    92 </LinearLayout>
    .xml
      1 package com.hanqi.testapp3;
      2 
      3 import android.content.ContentValues;
      4 import android.database.Cursor;
      5 import android.database.sqlite.SQLiteDatabase;
      6 import android.database.sqlite.SQLiteOpenHelper;
      7 import android.support.v7.app.AppCompatActivity;
      8 import android.os.Bundle;
      9 import android.util.Log;
     10 import android.view.View;
     11 import android.widget.EditText;
     12 import android.widget.Toast;
     13 
     14 public class TestActivity2 extends AppCompatActivity {
     15 
     16        EditText et_id,et_name,et_sex,et_age;
     17 
     18     @Override
     19     protected void onCreate(Bundle savedInstanceState) {
     20         super.onCreate(savedInstanceState);
     21         setContentView(R.layout.activity_test2);
     22 
     23         et_id=(EditText)findViewById(R.id.et_id);
     24         et_name=(EditText)findViewById(R.id.et_name);
     25         et_sex=(EditText)findViewById(R.id.et_sex);
     26         et_age=(EditText)findViewById(R.id.et_age);
     27 
     28     }
     29 
     30     //初始化数据库
     31     public void bt1_OnClick(View v)
     32     {
     33         //使用工具类得到数据库对象
     34         MyDBHelper myDBHelper=new MyDBHelper("test.db",2);
     35 
     36         //得到连接
     37         SQLiteDatabase sd=myDBHelper.getReadableDatabase();
     38 
     39         Toast.makeText(TestActivity2.this, "连接数据库成功", Toast.LENGTH_SHORT).show();
     40 
     41         //关闭连接
     42         sd.close();
     43     }
     44 
     45     //升级数据库
     46     public void bt2_OnClick(View v)
     47     {
     48         //使用工具类得到数据库对象
     49         MyDBHelper myDBHelper=new MyDBHelper("test.db",2);
     50 
     51         //得到连接
     52         SQLiteDatabase sd=myDBHelper.getWritableDatabase();
     53 
     54         Toast.makeText(TestActivity2.this, "连接数据库成功", Toast.LENGTH_SHORT).show();
     55 
     56         //关闭连接
     57         sd.close();
     58     }
     59 
     60     //插入新数据
     61     public void bt3_OnClick(View v)
     62     {
     63         //1.连接数据库,得到数据库连接对象
     64 
     65         //得到连接
     66         SQLiteDatabase sd=new MyDBHelper("test.db",2).getReadableDatabase();
     67 
     68         //2.准备数据
     69         ContentValues cv=new ContentValues();
     70         cv.put("name",et_name.getText().toString());
     71         cv.put("sex",et_sex.getText().toString());
     72         //cv.put("age",et_age.getText().toString());
     73 
     74         //3.调用insert(),插入数据
     75         long l=sd.insert("t_user", null, cv);
     76 
     77         Toast.makeText(TestActivity2.this, "插入数据的主键="+l, Toast.LENGTH_SHORT).show();
     78         //4.关闭连接
     79         sd.close();
     80     }
     81 
     82     //数据查询
     83     public  void bt4_OnClick(View v)
     84     {
     85         //1.连接数据库,得到数据库连接对象
     86 
     87         //得到连接
     88         SQLiteDatabase sd=new MyDBHelper("test.db",2).getReadableDatabase();
     89 
     90         //2.全表全字段查询
     91         Cursor c=sd.query("t_user", null, null, null, null, null, null);
     92 
     93         //3.遍历结果集
     94         while(c.moveToNext())
     95         {
     96             //读取数据
     97             String str="_id="+c.getString(0)+"  name="
     98                     +c.getString(1)+"  sex="+c.getString(2)+"  age="+c.getString(c.getColumnIndex("age"));
     99 
    100             Log.e("TAG",str);
    101         }
    102 
    103         Toast.makeText(TestActivity2.this, "结果集的记录条数"+c.getCount(), Toast.LENGTH_SHORT).show();
    104 
    105         c.close();
    106 
    107         //4.关闭连接
    108         sd.close();
    109     }
    110 
    111     //带条件数据查询
    112     public  void bt5_OnClick(View v)
    113     {
    114         //1.连接数据库,得到数据库连接对象
    115 
    116         //得到连接
    117         SQLiteDatabase sd=new MyDBHelper("test.db",2).getReadableDatabase();
    118 
    119         String strWhere="1=1";
    120 
    121         //select *from t_user  where 1=1 and _id=1  and  name  like '%张%' and  sex=''
    122 
    123         //得到条件
    124         if(et_id.getText().length()>0)
    125         {
    126             strWhere+=" and _id="+et_id.getText().toString();
    127         }
    128 
    129         if(et_name.getText().length()>0)
    130         {
    131             strWhere+=" name like '%"+et_name.getText().toString()+"%'";
    132         }
    133 
    134         if(et_sex.getText().length()>0)
    135         {
    136             strWhere+=" and sex ='"+et_sex.getText().toString()+"'";
    137         }
    138 
    139         if(et_age.getText().length()>0)
    140         {
    141             strWhere+=" and age="+et_age.getText().toString()+"";
    142         }
    143 
    144         //2.查询
    145         Cursor c=sd.query("t_user", null, strWhere, null, null, null, null);
    146 
    147         //3.遍历结果集
    148         while(c.moveToNext())
    149         {
    150             //读取数据
    151             String str="_id="+c.getString(0)+"  name="
    152                     +c.getString(1)+"  sex="+c.getString(2)+"  age="+c.getString(c.getColumnIndex("age"));
    153 
    154             Log.e("TAG",str);
    155         }
    156 
    157         Toast.makeText(TestActivity2.this, "结果集的记录条数"+c.getCount(), Toast.LENGTH_SHORT).show();
    158 
    159         c.close();
    160 
    161         //4.关闭连接
    162         sd.close();
    163     }
    164 
    165     //修改数据
    166     public  void bt6_OnClick(View v)
    167     {
    168         //1.连接数据库,得到数据库连接对象
    169 
    170         //得到连接
    171         SQLiteDatabase sd=new MyDBHelper("test.db",2).getReadableDatabase();
    172 
    173         //2.修改
    174         ContentValues cv=new ContentValues();
    175         cv.put("name",et_name.getText().toString());
    176         cv.put("sex",et_sex.getText().toString());
    177         cv.put("age", et_age.getText().toString());
    178 
    179 
    180         int i=sd.update("t_user",cv,"_id=?",new String[] {et_id.getText().toString()});
    181 
    182 
    183         Toast.makeText(TestActivity2.this, "修改的记录条数="+i, Toast.LENGTH_SHORT).show();
    184 
    185 
    186         //4.关闭连接
    187         sd.close();
    188     }
    189 
    190     //删除数据
    191     public  void bt7_OnClick(View v)
    192     {
    193         //1.连接数据库,得到数据库连接对象
    194 
    195         //得到连接
    196         SQLiteDatabase sd=new MyDBHelper("test.db",2).getReadableDatabase();
    197 
    198         //2.删除
    199         int i=sd.delete("t_user", "_id=?", new String[]{et_id.getText().toString()});
    200 
    201 
    202 
    203         Toast.makeText(TestActivity2.this, "修改的记录条数="+i, Toast.LENGTH_SHORT).show();
    204 
    205 
    206         //4.关闭连接
    207         sd.close();
    208     }
    209 
    210 
    211     //数据库事务
    212     public  void bt8_OnClick(View v)
    213     {
    214         //1.连接数据库,得到数据库连接对象
    215 
    216         //得到连接
    217         SQLiteDatabase sd = new MyDBHelper("test.db", 2).getReadableDatabase();
    218         
    219         try {
    220             
    221             //启动事务
    222             sd.beginTransaction();
    223 
    224             //2.修改
    225             ContentValues cv = new ContentValues();
    226             cv.put("age", "42");
    227 
    228             //修改1
    229             int i = sd.update("t_user", cv, "_id=1", null);
    230 
    231             //抛出异常
    232             if (i>0) {
    233             throw new RuntimeException("模拟事务异常");
    234             }
    235 
    236             ContentValues cv2 = new ContentValues();
    237             cv2.put("age", "52");
    238 
    239             //修改2
    240             int k = sd.update("t_user", cv2, "_id=2", null);
    241 
    242             //设置事务是成功完成的
    243             sd.setTransactionSuccessful();
    244 
    245 
    246             Toast.makeText(TestActivity2.this, "修改的记录条数=" + (i + k), Toast.LENGTH_SHORT).show();
    247 
    248 
    249         }
    250         catch (Exception e)
    251         {
    252             e.printStackTrace();
    253 
    254             Toast.makeText(TestActivity2.this, "修改出错", Toast.LENGTH_SHORT).show();
    255         }
    256         finally {
    257 
    258             //结束事务
    259             //1.没有异常,提交事务
    260             //2.发生异常,回滚事务
    261             sd.endTransaction();
    262 
    263 
    264             //4.关闭连接
    265             sd.close();
    266         }
    267     }
    268 
    269     //实现SQLiteOpenHelper的内部类
    270     class MyDBHelper extends SQLiteOpenHelper
    271     {
    272         //构造方法
    273         public MyDBHelper(String dbname,int ver)
    274         {
    275             //显示调用父类的构造方法
    276             //必须在第一行
    277             super(TestActivity2.this,dbname,null,ver);
    278 
    279         }
    280 
    281         //创建和初始化数据库
    282         @Override
    283         public void onCreate(SQLiteDatabase db) {
    284 
    285             //1.执行创建数据库的语句
    286             String sql="CREATE TABLE t_user" +
    287                     "(_id  INTEGER PRIMARY KEY " +
    288                     "AUTOINCREMENT NOT NULL," +
    289                     "name  VARCHAR(20) NOT NULL," +
    290                     "sex CHAR(1),age  INTEGER)";
    291             db.execSQL(sql);
    292 
    293             Log.e("TAG","表创建成功");
    294             //2.执行初始化数据的语句,insert语句
    295             ContentValues cv=new ContentValues();
    296 
    297             cv.put("name","张三");
    298             cv.put("sex","男");
    299             cv.put("age","20");
    300 
    301             //执行插入,返回主键
    302             long l=db.insert("t_user",null,cv);
    303 
    304             Log.e("TAG","初始化数据="+l);
    305         }
    306 
    307         //升级数据库
    308         //触发条件:当版本号增大
    309         @Override
    310         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    311 
    312             //修改数据
    313             if(newVersion==2)
    314             {
    315                 ContentValues cv=new ContentValues();
    316                 cv.put("name","李四");
    317 
    318                 String sql="update t_user set name='李四' where  _id=1 ";
    319 
    320                 String[] str={"1","18"};
    321                 //调用db的更新方法
    322                 int i=db.update("t_user", cv, "_id=? and age>?",str);
    323 
    324                 Log.e("TAG","升级数据 数据条数="+i);
    325             }
    326 
    327         }
    328     }
    329 }
    .java

  • 相关阅读:
    Scrapy中的POST请求发送和递归爬取
    爬虫之Scrapy框架
    linux下的python3,virtualenv,Mysql,nginx,redis安装配置
    Linu之linux系统基础优化和基本命令
    Linux之linux基础命令2
    Linux之linux基础命令
    Linux之linux入门
    Linux之服务器介绍
    Django之content_type
    Vue.js之路由系统
  • 原文地址:https://www.cnblogs.com/arxk/p/5565377.html
Copyright © 2011-2022 走看看