数据库事务课上代码

Posted 烟_雨_江_南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库事务课上代码相关的知识,希望对你有一定的参考价值。

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

 

以上是关于数据库事务课上代码的主要内容,如果未能解决你的问题,请参考以下文章

更新github上代码

JDBC操作数据库之查询数据

使用github上代码要注意啥版权问题

git回滚线上代码

git回滚线上代码

关于android中使用SQLite数据库的查询基本操作.贴上代码.