• SQLite的基本用法


    SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用。

    接下来讲一下怎么创建数据库、通过adb查看数据表和数据、增删查改。

    一、创建数据库

    Android封装了SQLiteOpenHelper给我们操作数据库,我们要继承它,然后实现自己的操作。

    public class MyDatabaseHelper extends SQLiteOpenHelper {
    
        public String CREATE_BOOK = "CREATE TABLE BOOK (" +
                "name char(20) NOT NULL," +
                "price char(10) NOT NULL" +
                ")";
    
        //构造函数
        public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
    
        //如果传入的数据库不存在的话,才会调用该函数
        @Override
        public void onCreate(SQLiteDatabase db) {
    
            db.execSQL(CREATE_BOOK);
    
        }
    
        //输入版本号比当前版本号高的时候,才会调用该函数
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }
    

    当然在控制台自己创建也可以(这个可以忽略)

    在MainActivity创建数据库

    public class MainActivity extends AppCompatActivity {
    
        Button create;
    
        MyDatabaseHelper helper;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //打开数据库 第一个参数是上下文 第二个是数据库的名字,如果没有则会创建,第三个一般为null,第四个版本号
            helper = new MyDatabaseHelper(this,"Book.db",null,1);
    
            create = (Button)findViewById(R.id.create);
    
            create.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例,如果没有该数据库,会调用MyDatabaseHelper里面的Create方法
                    helper.getWritableDatabase();
    
                }
            });
    
        }
    }
    

    二、通过adb查看数据库

    adb在sdk文件夹下的platform-tools中,我们需要把路径配置到环境变量的path变量中。

    然后在cmd输入adb,就能进入手机或者模拟器的控制台了。

    进入data/data,再输入ls命令,可以看到自己的项目:

    进入自己的项目,能看到自己的数据库文件夹

    进入文件夹,能看到我们创建的数据库表:

    然后输入sqlite3 Book.db,打开数据库,再输入.table,就能看到我们创建的表了

    可以证明我们第一步创建数据库成功了。

    三、插入数据

    只需要获得一个数据库实例,然后通过ContentValues组装数据,然后再插入即可。

    MainActivity代码,新增了insert按钮,点击添加数据:

    insert.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //用于组装插入的数据
                    ContentValues values = new ContentValues();
    
                    values.put("name","计算机组成原理");
                    values.put("price","100");
    
                    //插入,第一个参数为表名,第二个一般为null,第三个是我们的数据
                    db.insert("BOOK",null,values);
    
                    //清空
                    values.clear();
    
                    //插入第二条数据
                    values.put("name","数据库原理");
                    values.put("price","50");
    
                    db.insert("BOOK",null,values);
    
    
                }
            });
    

    在adb通过sql语句查看结果:

     

    四:更新数据

    原理和插入差不多:

    update.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //用于组装更新的数据
                    ContentValues values = new ContentValues();
    
                    values.put("price","888");
    
                    //第一个参数是表名,第二个参数是数据,第三个是约束条件,对应SQL的where子句,第四个参数是占位符'?'的具体实现 相当于name = “计算机组成原理”
                    db.update("BOOK",values,"name = ?",new String[]{"计算机组成原理"});
    
                }
            });
    

    通过adb可见,第一本书的价格已经更新到888元了

    五:查询数据

    query.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //调用查找方法 第一个参数为表名 第二个为列名 第三个为约束条件where 第四个为约束条件占位符的具体值
                    //第五个为排序的列 第六个对应having 第七个对应orderby
                    //以下默认查询所有列,结果的集合返回到游标
                    Cursor cursor = db.query("BOOK",null,null,null,null,null,null,null);
    
                    String temp = "";
    
                    //遍历
                    while(cursor.moveToNext()){
    
                        String name = cursor.getString(cursor.getColumnIndex("name"));
    
                        String price = cursor.getString(cursor.getColumnIndex("price"));
    
                        temp+= name+"  "+price+"
    ";
    
    
    
                    }
    
                    //关闭游标
                    cursor.close();
    
                    result.setText(temp);
    
    
    
                }
            });
    

    运行效果:

    六:删除数据

    delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //表名 约束条件
                    db.delete("BOOK","price = ?",new String[]{"888"});
    
    
    
                }
            });
    

    先点击删除,再点击查询:

    完整的MainActivity代码:

    public class MainActivity extends AppCompatActivity {
    
        Button create;
        Button insert;
        Button update;
        Button query;
        Button delete;
    
    
        TextView result;
    
        MyDatabaseHelper helper;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //打开数据库 第一个参数是上下文 第二个是数据库的名字,如果没有则会创建,第三个一般为null,第四个版本号
            helper = new MyDatabaseHelper(this,"Book.db",null,1);
    
            result = (TextView)findViewById(R.id.result);
            create = (Button)findViewById(R.id.create);
            insert = (Button)findViewById(R.id.insert);
            update = (Button)findViewById(R.id.update);
            query = (Button)findViewById(R.id.query);
            delete = (Button)findViewById(R.id.delete);
    
            create.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例,如果没有该数据库,会调用MyDatabaseHelper里面的Create方法
                    helper.getWritableDatabase();
    
                }
            });
    
            insert.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //用于组装插入的数据
                    ContentValues values = new ContentValues();
    
                    values.put("name","计算机组成原理");
                    values.put("price","100");
    
                    //插入,第一个参数为表名,第二个一般为null,第三个是我们的数据
                    db.insert("BOOK",null,values);
    
                    //清空
                    values.clear();
    
                    //插入第二条数据
                    values.put("name","数据库原理");
                    values.put("price","50");
    
                    db.insert("BOOK",null,values);
    
    
                }
            });
    
            update.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //用于组装更新的数据
                    ContentValues values = new ContentValues();
    
                    values.put("price","888");
    
                    //第一个参数是表名,第二个参数是数据,第三个是约束条件,对应SQL的where子句,第四个参数是占位符'?'的具体实现 相当于name = “计算机组成原理”
                    db.update("BOOK",values,"name = ?",new String[]{"计算机组成原理"});
    
                }
            });
    
            query.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //调用查找方法 第一个参数为表名 第二个为列名 第三个为约束条件where 第四个为约束条件占位符的具体值
                    //第五个为排序的列 第六个对应having 第七个对应orderby
                    //以下默认查询所有列,结果的集合返回到游标
                    Cursor cursor = db.query("BOOK",null,null,null,null,null,null,null);
    
                    String temp = "";
    
                    //遍历
                    while(cursor.moveToNext()){
    
                        String name = cursor.getString(cursor.getColumnIndex("name"));
    
                        String price = cursor.getString(cursor.getColumnIndex("price"));
    
                        temp+= name+"  "+price+"
    ";
    
    
    
                    }
    
                    //关闭游标
                    cursor.close();
    
                    result.setText(temp);
    
    
    
                }
            });
    
            delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    
                    //获取一个可写的数据库实例
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    //表名 约束条件
                    db.delete("BOOK","price = ?",new String[]{"888"});
    
    
    
                }
            });
    
        }
    }
    

    布局代码:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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.example.administrator.databasetest.MainActivity">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="查询结果"
            android:id="@+id/result"
            android:textSize="30dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginBottom="122dp" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/create"
            android:text="创建"
    
            />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/insert"
            android:text="添加"
            android:layout_below="@+id/create"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="更新"
            android:id="@+id/update"
            android:layout_below="@+id/insert"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/query"
            android:text="查找"
            android:layout_below="@+id/update"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="删除"
            android:id="@+id/delete"
            android:layout_below="@+id/query"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    
    
    
    </RelativeLayout>
    

    SQLite基本都用法就那么多,想深入了解的可以看看官方的API,谢谢各位阅读。

  • 相关阅读:
    初识js中的闭包
    ES5新增数组方法every()、some()、filter()、map()
    arguments对象的callee属性和caller属性
    js中的全局变量
    js中switch/case分支的值可以是变量或表达式
    js中的arguments对象
    CSSの変数を使う
    我应该使用预处理器吗
    JS导出网页数据到EXCEL
    冰与火之歌:浏览器前缀
  • 原文地址:https://www.cnblogs.com/wzben/p/6070462.html
Copyright © 2020-2023  润新知