package com.hanqi.testapp3; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class TestActivity2 extends AppCompatActivity { EditText et_id, et_name,et_sex,et_age; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test2); et_id=(EditText)findViewById(R.id.et_id); et_name=(EditText)findViewById(R.id.et_name); et_sex=(EditText)findViewById(R.id.et_sex); et_age=(EditText)findViewById(R.id.et_age); } //初始化数据库 public void bt1_OnClick(View v) { //使用工具类得到数据库连接对象 MYDBHelper mydbHelper=new MYDBHelper("test.db",1); //得到连接 SQLiteDatabase sd= mydbHelper.getWritableDatabase(); Toast.makeText(TestActivity2.this, "连接数据库成功", Toast.LENGTH_SHORT).show(); //关闭连接 sd.close(); } public void bt2_OnClick(View v) { //使用工具类得到数据库连接对象 MYDBHelper mydbHelper=new MYDBHelper("test.db",3); //得到连接 SQLiteDatabase sd= mydbHelper.getWritableDatabase(); Toast.makeText(TestActivity2.this, "升级成功", Toast.LENGTH_SHORT).show(); //关闭连接 sd.close(); } //插入新数据 public void bt3_OnClick(View v) { //1.连接数据库,得到数据库连接对象 SQLiteDatabase sd= new MYDBHelper("test.db",2).getWritableDatabase(); //2.准备数据 ContentValues cv=new ContentValues(); cv.put("name",et_name.getText().toString()); cv.put("sex",et_sex.getText().toString()); cv.put("age",et_age.getText().toString()); //3.调用insert() long l=sd.insert("t_user", null, cv); Toast.makeText(TestActivity2.this, "插入数据的主键="+l, Toast.LENGTH_SHORT).show(); //4.关闭连接 sd.close(); } //数据查询 public void bt4_OnClick(View v) { //1.连接数据库,得到数据库连接对象 SQLiteDatabase sd= new MYDBHelper("test.db",2).getWritableDatabase(); //2.全表全字段查询 Cursor c=sd.query("t_user", null, null, null, null, null, null); //3.遍历结果集 while (c.moveToNext()) { //读取数据 String str="_id="+c.getString(0)+"name=" +c.getString(1)+"sex"+c.getString(2)+ "age"+c.getString(c.getColumnIndex("age")); Log.e("TAG",str); } Toast.makeText(TestActivity2.this, "查询结果集的记录条数"+c.getCount(), Toast.LENGTH_SHORT).show(); c.close(); //4.关闭连接 sd.close(); } //带条件数据查询 public void bt5_OnClick(View v) { //1.连接数据库,得到数据库连接对象 SQLiteDatabase sd= new MYDBHelper("test.db",2).getWritableDatabase(); String strWhere=" 1=1 ";//添加一个永远为真的条件再查询 // select * from t_user where 1=1 and _id=1 and name like '%张%' and sex='' //得到条件 if (et_id.getText().length()>0) { strWhere+=" and _id= "+et_id.getText().toString(); } if (et_name.getText().length()>0) { strWhere+=" and name like '%"+et_name.getText().toString()+"%'"; } if (et_sex.getText().length()>0) { strWhere+=" and sex = '%"+et_sex.getText().toString()+"%'"; } if (et_age.getText().length()>0) { strWhere+=" and age ="+et_age.getText().toString()+""; } //2.查询 Cursor c=sd.query("t_user", null, strWhere, null, null, null, null); //3.遍历结果集 while (c.moveToNext()) { //读取数据 String str="_id="+c.getString(0)+"name=" +c.getString(1)+"sex"+c.getString(2)+ "age"+c.getString(c.getColumnIndex("age")); Log.e("TAG",str); } Toast.makeText(TestActivity2.this, "查询结果集的记录条数"+c.getCount(), Toast.LENGTH_SHORT).show(); c.close(); //4.关闭连接 sd.close(); } //修改数据 public void bt6_OnClick(View v) { //1.连接数据库,得到数据库连接对象 SQLiteDatabase sd= new MYDBHelper("test.db",2).getWritableDatabase(); //2.修改 ContentValues cv=new ContentValues(); cv.put("name",et_name.getText().toString()); cv.put("sex", et_sex.getText().toString()); cv.put("age", et_age.getText().toString()); int i=sd.update("t_user", cv, " _id = ? ", new String[]{et_id.getText().toString()}); Toast.makeText(TestActivity2.this, "修改的记录条数="+i, Toast.LENGTH_SHORT).show(); //4.关闭连接 sd.close(); } //删除数据 public void bt7_OnClick(View v) { //1.连接数据库,得到数据库连接对象 SQLiteDatabase sd= new MYDBHelper("test.db",2).getWritableDatabase(); //2.删除 int i=sd.delete("t_user", "_id=?", new String[]{et_id.getText().toString()}); Toast.makeText(TestActivity2.this, "修改的记录条数="+i, Toast.LENGTH_SHORT).show(); //3.关闭连接 sd.close(); } //修改数据 public void bt8_OnClick(View v) { SQLiteDatabase sd = new MYDBHelper("test.db", 2).getWritableDatabase(); try { //1.连接数据库,得到数据库连接对象 //启动事务 sd.beginTransaction(); //2.修改 ContentValues cv1 = new ContentValues(); cv1.put("age", 41); //修改1 int i = sd.update("t_user", cv1, "_id=1", null); //抛出异常 // if (i > 0) { // throw new RuntimeException("模拟事务异常"); // } ContentValues cv2 = new ContentValues(); cv2.put("age", 51); //修改2 int k = sd.update("t_user", cv2, "_id=2", null); //设置事务是成功完成的 sd.setTransactionSuccessful(); Toast.makeText(TestActivity2.this, "修改的记录条数=" + (i + k), Toast.LENGTH_SHORT).show(); }catch (Exception e) { Toast.makeText(TestActivity2.this, "修改出错", Toast.LENGTH_SHORT).show(); }finally { //一定会被执行的代码 //结束事务 //1.没有异常,提交事务 //2.发生异常,回滚事务 sd.endTransaction(); sd.close(); } } //内部类 class MYDBHelper extends SQLiteOpenHelper { //构造方法 public MYDBHelper(String dbname,int ver) { //显示调用继承父类的构造方法 //必须在第一行 super(TestActivity2.this,dbname,null,1); } //创建和初始化数据库 @Override public void onCreate(SQLiteDatabase db) { // 1.执行创建数据库的语句 String sql="CREATE TABLE t_user(_id INTEGER PRIMARY KEY AUTOINCREMENT " + "NOT NULL,name VARCHAR NOT NULL,sex CHAR,age INTEGER);"; db.execSQL(sql); Log.e("TAG","表创建成功"); //2.执行初始化数据的语句,insert语句 ContentValues cv=new ContentValues(); cv.put("name","张三"); cv.put("sex","男"); cv.put("age", 20); //执行插入,返回主键 long l=db.insert("t_user",null,cv); Log.e("TAG","初始化数据="+l); } //升级数据库 //触发条件:当版本号增大 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //修改数据 if (newVersion==3) { ContentValues cv=new ContentValues(); cv.put("name","李五"); String sql="update t_user set name='李四' where _id=1"; String[] str={"1","18"}; //调用db的更新方法 int i=db.update("t_user", cv, "_id = ? and age > ?" ,str); Log.e("TAG","升级数据 数据条数="+i); } } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.hanqi.testapp3.TestActivity2" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="初始化数据库" android:onClick="bt1_OnClick" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="升级数据库" android:onClick="bt2_OnClick" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_id" android:hint="id"/> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_name" android:hint="名称"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_sex" android:hint="性别"/> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_age" android:hint="年龄"/> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="新增数据" android:onClick="bt3_OnClick" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="查询全部数据" android:onClick="bt4_OnClick" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="带条件查询数据" android:onClick="bt5_OnClick" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="修改数据" android:onClick="bt6_OnClick" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="删除数据" android:onClick="bt7_OnClick" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="数据库" android:onClick="bt7_OnClick" /> </LinearLayout>