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 }