数据库的查询——增删改查以及数据库的事务
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 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>
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 }
以上是关于数据库的查询——增删改查以及数据库的事务的主要内容,如果未能解决你的问题,请参考以下文章