安卓SQLite数据库操作(下)

在安卓开发中,数据库的操作无非就是增删改查。那么,这里我们通过例子来学习这四个操作。

我们先看代码吧。具体讲解后面说。

布局文件 activity_main.xml

复制代码
<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:orientation="vertical"
    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.db.MainActivity" >

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="Create_Datebase"
        android:text="Create Datebase" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="Add_Data"
        android:text="Add Data" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="Update_Data"
        android:text="Update Date" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="Delete_Data"
        android:text="Delete Data" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="Query_Data"
        android:text="Query Data" />

</LinearLayout>
复制代码

 

java文件 

mySQLite.java

复制代码
package com.example.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

//创建SQLLite需要继承SQLiteOpenHelper类抽象类
public class mySQLite extends SQLiteOpenHelper{
    
    public static final String CREATE_GIRL = "create table Girl(_id integer primary key autoincrement,Name char(20),Age integer,Phone char(20))" ;
    private Context mContext;

    /*
     * 构造方法参数说明
     * 第一个:传入上下文对象
     * 第二个:要创建的数据库名字
     * 第三个:油标工厂,传入油标对象,其实就是一个指针的功能。和ResultSet功能差不多,这个参数一般传入null
     * 第四个:数据库版本号,用于升级的时候调用。版本号必须大于1
     * 构造方法四个参数传入其实是给父类调用的。
     * */
    public mySQLite(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
        mContext = context;
    }

    //数据库被创建的时候会调用这个方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        /*db.execSQL(CREATE_BOOK);
        Toast.makeText(mContext,"Create Successded",0).show();*/
        db.execSQL(CREATE_GIRL);
        Toast.makeText(mContext,"Create Successded",0).show();
    }
    //数据库升级的时候调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

        
    }

}
复制代码

 

 MainActivity.java

复制代码
package com.example.db;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends Activity {
    
    private mySQLite myDatebaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        myDatebaseHelper = new mySQLite(this, "people.db", null, 1);
     
    }
    //创建数据库
    public void Create_Datebase(View v){

        /*
         * 如果数据库没有被创建,就创建并获取一个可写(其实也可以读)的数据库 如果数据库被创建,就直接获取一个可写(其实也可以读)的数据库
         * 路径data/data/database/people.db
         */
        myDatebaseHelper.getWritableDatabase();
        
    }
    //使用api添加数据
    public void Add_Data(View v){
        //拿到数据库对象
        SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
        /*
         * 将要添加的数据封装在ContentValues对象中
         * */
        ContentValues values = new ContentValues();
        values.put("Name", "JoyceChu");
        values.put("Age", 18);
        values.put("Phone", "1380013");
        /*
         * 第一个参数,表名
         * 第二个参数,一般传入null
         * 第三个参数,ContentValues对象
         * 注意,db.insert("Gril", null, values);这条语句有返回值,如果返回-1表示插入数据失败
         * 所以,我们可以通过返回值判断是否插入成功
         * */
        db.insert("Girl", null, values);
        values.clear();
        values.put("Name", "四叶草");
        values.put("Age", 19);
        values.put("Phone", "1380013");
        db.insert("Girl", null, values);
        values.clear();
        values.put("Name", "朱主爱");
        values.put("Age", 19);
        values.put("Phone", "1380013");
        db.insert("Girl", null, values);
        values.clear();
        values.put("Name", "新垣结衣");
        values.put("Age", 19);
        values.put("Phone", "1380013");
        db.insert("Girl", null, values);
        values.clear();
        values.put("Name", "刘诗诗");
        values.put("Age", 19);
        values.put("Phone", "1380013");
        db.insert("Girl", null, values);
        values.clear();
        values.put("Name", "金莎");
        values.put("Age", 25);
        values.put("Phone", "1380013");
        db.insert("Girl", null, values);
        values.clear();
        values.put("Name", "林志玲");
        values.put("Age", 25);
        values.put("Phone", "1380013");
        db.insert("Girl", null, values);
        Toast.makeText(MainActivity.this, "Add Successded", 0).show();
        
    }

    //更新数据
    public void Update_Data(View v){
        
        SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        //将年龄改为25
        values.put("age", 25);
        /*
         * 第一个参数:表名
         * 第二个参数:ContentValues对象
         * 第三,第四个参数:约束条件,如果传入null,表示更新所有行。
         * 本例子表示将 Name = 刘诗诗 ,的age 修改为 25 ,如果没有约束,就所有age都变成25
         * update也是有返回值的,返回int型,表示影响的行数
         * */
        db.update("Girl", values, "Name = ?", new String[]{"刘诗诗"});
        Toast.makeText(MainActivity.this, "Update Successded", 0).show();
    }
    
    //删除数据
    public void Delete_Data(View v){
        SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
         /*
         * 第一个参数:表名
         * 第二个参数:ContentValues对象
         * 第三,第四个参数:约束条件,如果传入null,表示更新所有行。
         * 本例子表示将 age > 19的行都删除 
         * */
        db.delete("Girl", "Name = ?", new String[]{"刘诗诗"});
        Toast.makeText(MainActivity.this, "Delete Successded", 0).show();
    }
    //查询数据
    public void Query_Data(View v){
        SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
        /*
         * 查询的参数非常多。这里我们选择七个参数的重载
         * 第一个参数:表名
         * 第二个参数:指定查询那几列,没指定默认查所有列
         * 第三,四个参数:约束查询,没指定默认查所有列
         * 第五个参数:指定要去group by的列,没指定的话,就不对查询结果group by
         * 第六个参数:group by之后的过滤,没指定不过滤
         * 第七个参数:查询结果排序方式,没指定使用默认排序
         * 本例子传入null表示查询所有列
         * 查询方法返回一个Cursor对象
         * */
    
        Cursor cursor =  db.query("Girl", null, null, null, null, null, null);
        //如果没有下一行,就表示数据检索完毕了
        while(cursor.moveToNext()){
            
            String name = cursor.getString(cursor.getColumnIndex("Name"));
            int age = cursor.getInt(cursor.getColumnIndex("Age"));
            String phone = cursor.getString(cursor.getColumnIndex("Phone"));
            Toast.makeText(MainActivity.this, name+","+age+","+phone, 0).show();
        
        }
    }

}
复制代码

 

然后看运行截图

 

那么接下来就是讲解了。运行程序后,我们按照UI的按钮顺序,依次点击,并查看其数据库。注意,这里是简单的效果图讲解,具体原理我们要结合代码去看。代码有注释,很详细。

首先是Create Database按钮。点击按钮后,系统将创建一个数据库。people.db,数据库下有一个我们创建的表Girl。表里面并没有数据,注意,数据只会创建一次,创建之后再次点击不会重新创建多一次数据库,也不会增加多一个表的。如图所示。

接下来我们点击Add Data的按钮,也就是添加数据。注意,每一次点击,都会添加数据。这里我们点击一次,效果如图所示。点击一次后,我们添加了七条数据。如果在次点击。这七条数据会在添加一次,也就是说说,每一次点击都会增加七条数据。这里,我们不再点击了。

接下来是更新数据的按钮,也就Upate Data,从上图中,我们可以看到,刘诗诗的Age是19,那么明显不是的,所以我们要更新刘诗诗的Age。点击一次Update Data按钮更新数据。如图所示。更新按钮每一次点击都是会更新一次数据的。但在这个例子中,点击后,在怎么点击都一样是25,因为我们改变的数据25已经写死了。所以,每一次都是改成25,因此我们看起来就没有差别了。

然后是查询按钮,点击后,我们会将上面七条数据查询出来,为了方便,这里我们用Toast来显示。

OK。四个操作都有了。

posted @   _Vincent  阅读(737)  评论(3编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示