数据库的查询——增删改查以及数据库的事务

 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

原文地址:https://www.cnblogs.com/arxk/p/5565377.html