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="
" +
284 "CREATE TABLE t_user" +
285 " (_id INTEGER NOT NULL," +
286 "name VARCHAR(20) NOT NULL," +
287 "sex CHAR(1),
" +
288 "age INTEGER,
" +
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 }