4.15日报

完成移动应用开发实验四:

实验四:SQLite和SQLiteDatabase应用

一、实验目的

1、本次实验的目的是让大家熟悉Android中对数据库进行操作的相关的接口、类等。SQLiteDatabase这个是在android中数据库操作使用最频繁的一个类。通过它可以实现数据库的创建或打开、创建表、插入数据、删除数据、查询数据、修改数据等操作。

2、实现添加用户名,爱好小例程。

二、实验要求

1、完成Android开发平台的搭建及相关配置

2、创建项目并熟悉文件目录结构

3、实现例程添加用户名,爱好实验步骤

三、实验步骤

3. 实现例程添加用户名和爱好的实验步骤

我们将创建一个简单的应用,包含以下功能:

  1. 用户输入用户名和爱好
  2. 将数据保存到SQLite数据库
  3. 查询并显示所有用户数据

3.1 创建数据库帮助类(DBHelper.java

创建一个DBHelper类,继承自SQLiteOpenHelper,用于创建和管理数据库。

package com.example.sqliteexample;

 

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

 

public class DBHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "user.db";

    private static final int DB_VERSION = 1;

 

    public DBHelper(Context context) {

        super(context, DB_NAME, null, DB_VERSION);

    }

 

    @Override

    public void onCreate(SQLiteDatabase db) {

        // 创建用户表

        String createUserTable = "CREATE TABLE users (" +

                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +

                "username TEXT, " +

                "hobby TEXT)";

        db.execSQL(createUserTable);

    }

 

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // 删除旧表并重新创建

        db.execSQL("DROP TABLE IF EXISTS users");

        onCreate(db);

    }

}

3.2 创建MainActivity布局文件

在res/layout/activity_main.xml中编写布局代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:padding="16dp"

    android:gravity="center_horizontal">

 

    <EditText

        android:id="@+id/et_username"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="用户名"

        android:inputType="text"

        android:layout_marginBottom="16dp" />

 

    <EditText

        android:id="@+id/et_hobby"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="爱好"

        android:inputType="text"

        android:layout_marginBottom="16dp" />

 

    <Button

        android:id="@+id/btn_save"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="保存"

        android:layout_marginBottom="16dp" />

 

    <Button

        android:id="@+id/btn_view"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="查看所有用户"

        android:layout_marginBottom="16dp" />

</LinearLayout>

 

3.3 编写MainActivity逻辑代码

在MainActivity.java中编写逻辑代码:

package com.example.sqliteexample;

 

import android.content.ContentValues;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

 

import androidx.appcompat.app.AppCompatActivity;

 

public class MainActivity extends AppCompatActivity {

 

    private EditText etUsername;

    private EditText etHobby;

    private Button btnSave;

    private Button btnView;

    private DBHelper dbHelper;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        etUsername = findViewById(R.id.et_username);

        etHobby = findViewById(R.id.et_hobby);

        btnSave = findViewById(R.id.btn_save);

        btnView = findViewById(R.id.btn_view);

 

        dbHelper = new DBHelper(this);

 

        btnSave.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                saveUser();

            }

        });

 

        btnView.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                viewUsers();

            }

        });

    }

 

    private void saveUser() {

        String username = etUsername.getText().toString();

        String hobby = etHobby.getText().toString();

 

        if ("".equals(username) || "".equals(hobby)) {

            Toast.makeText(MainActivity.this, "用户名和爱好不能为空", Toast.LENGTH_SHORT).show();

            return;

        }

 

        SQLiteDatabase db = dbHelper.getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put("username", username);

        values.put("hobby", hobby);

 

        db.insert("users", null, values);

        db.close();

 

        Toast.makeText(MainActivity.this, "用户保存成功", Toast.LENGTH_SHORT).show();

    }

 

    private void viewUsers() {

        SQLiteDatabase db = dbHelper.getReadableDatabase();

        Cursor cursor = db.query("users", new String[]{"id", "username", "hobby"}, null, null, null, null, null);

 

        StringBuilder sb = new StringBuilder();

        while (cursor.moveToNext()) {

            int id = cursor.getInt(cursor.getColumnIndex("id"));

            String username = cursor.getString(cursor.getColumnIndex("username"));

            String hobby = cursor.getString(cursor.getColumnIndex("hobby"));

            sb.append("ID: ").append(id).append(", 用户名: ").append(username).append(", 爱好: ").append(hobby).append("\n");

        }

        cursor.close();

        db.close();

 

        if (sb.toString().isEmpty()) {

            Toast.makeText(MainActivity.this, "没有用户数据", Toast.LENGTH_SHORT).show();

        } else {

            Intent intent = new Intent(MainActivity.this, ViewUsersActivity.class);

            intent.putExtra("users", sb.toString());

            startActivity(intent);

        }

    }

}

3.4 创建ViewUsersActivity

  1. 创建布局文件: 在res/layout/activity_view_users.xml中编写布局代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:padding="16dp"

    android:gravity="center_horizontal">

 

    <TextView

        android:id="@+id/tv_users"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="用户数据"

        android:textSize="18sp"

        android:layout_marginBottom="16dp" />

</LinearLayout>

编写逻辑代码: 在ViewUsersActivity.java中编写逻辑代码:

package com.example.sqliteexample;

 

import android.os.Bundle;

import android.widget.TextView;

 

import androidx.appcompat.app.AppCompatActivity;

 

public class ViewUsersActivity extends AppCompatActivity {

 

    private TextView tvUsers;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_view_users);

 

        tvUsers = findViewById(R.id.tv_users);

 

        String users = getIntent().getStringExtra("users");

        if (users != null) {

            tvUsers.setText(users);

        } else {

            tvUsers.setText("没有用户数据");

        }

    }

}

3.5 配置AndroidManifest.xml

确保在AndroidManifest.xml中注册了两个Activity:

<application

    android:allowBackup="true"

    android:icon="@mipmap/ic_launcher"

    android:label="@string/app_name"

    android:roundIcon="@mipmap/ic_launcher_round"

    android:supportsRtl="true"

    android:theme="@style/Theme.SQLiteExample">

    <activity android:name=".MainActivity">

        <intent-filter>

            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />

        </intent-filter>

    </activity>

    <activity android:name=".ViewUsersActivity" />

</application>

posted @ 2025-05-21 11:06  Code13  阅读(6)  评论(0)    收藏  举报