zoukankan      html  css  js  c++  java
  • 旺仔:SQLite的创建和CRUD操作

    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>
  • 相关阅读:
    用户空间与内核空间,进程上下文与中断上下文[总结]【转】
    select、poll、epoll之间的区别总结[整理]【转】
    v4l2驱动文档之——streaming IO【转】
    Linux网络编程一步一步学【转】
    V4L2驱动的移植与应用(二+三)【转】
    【PHP面向对象(OOP)编程入门教程】20.PHP5接口技术(interface)
    【PHP面向对象(OOP)编程入门教程】19.抽象方法和抽象类(abstract)
    【PHP面向对象(OOP)编程入门教程】18.__call()处理调用错误
    【PHP面向对象(OOP)编程入门教程】17.克隆对象__clone()方法
    【PHP面向对象(OOP)编程入门教程】16.__toString()方法
  • 原文地址:https://www.cnblogs.com/jiang2538406936/p/5673880.html
Copyright © 2011-2022 走看看