zoukankan      html  css  js  c++  java
  • 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,谢谢各位阅读。

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/wzben/p/6070462.html
Copyright © 2011-2022 走看看