AndroidのSQLiteでNOT NULL制約を使用する方法を徹底解説
AndroidにおけるSQLiteデータベースとは
SQLiteは、データを端末内のテキストファイルとして保存するオープンソースのSQLデータベースです。Androidには標準でSQLiteの実装が組み込まれており、追加のセットアップなしですぐに利用できます。リレーショナルデータベースの基本的な機能を幅広くサポートしており、JDBCやODBCのように接続を確立する処理も不要なため、モバイルアプリ向けのローカルデータ保存先として非常に人気があります。
NOT NULL制約とは
NOT NULL制約が付いたカラムにはNULL値を挿入できません。氏名や金額といった必須項目の欠落によるデータ不整合を防ぎたい場合に有効な制約です。本記事では、名前と給与を登録する簡単なサンプルアプリを通じて、テーブル作成時にNOT NULL制約を定義する方法をステップごとに解説します。
手順1:新規プロジェクトを作成する
Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。
手順2:レイアウトファイル(res/layout/activity_main.xml)を編集する
以下のコードを activity_main.xml に記述します。
<?xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android" xmlns:tools = "https://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" android:orientation = "vertical"> <EditText android:id = "@+id/name" android:layout_width = "match_parent" android:hint = "名前を入力" android:layout_height = "wrap_content" /> <EditText android:id = "@+id/salary" android:layout_width = "match_parent" android:inputType = "numberDecimal" android:hint = "給与を入力" android:layout_height = "wrap_content" /> <Button android:id = "@+id/save" android:text = "保存" android:layout_width = "wrap_content" android:layout_height = "wrap_content" /> </LinearLayout>
上記のレイアウトでは、名前と給与を入力するためのEditTextを2つ配置しています。ユーザーが「保存」ボタンをタップすると、そのデータがSQLiteデータベースに登録される仕組みです。
手順3:MainActivity.java を実装する
次に、src/MainActivity.java に以下のコードを追加します。
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button save;
EditText name, salary;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final DatabaseHelper helper = new DatabaseHelper(this);
name = findViewById(R.id.name);
salary = findViewById(R.id.salary);
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!name.getText().toString().isEmpty() && !salary.getText().toString().isEmpty()) {
if (helper.insert(name.getText().toString(), salary.getText().toString())) {
Toast.makeText(MainActivity.this, "登録しました", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "登録できませんでした", Toast.LENGTH_LONG).show();
}
} else {
name.setError("名前を入力してください");
salary.setError("給与を入力してください");
}
}
});
}
}保存ボタンがクリックされると、まず入力欄が空でないかをチェックします。未入力の項目があればエラーメッセージを表示し、両方とも入力されていればヘルパークラス経由でINSERT文を実行し、結果をToastで通知します。
※補足:新しいプロジェクトでは、サポートライブラリではなく androidx.appcompat.app.AppCompatActivity の利用が推奨されています。import文を読み替えてください。
手順4:DatabaseHelper.java を実装する(NOT NULL制約の定義)
続いて、src/DatabaseHelper.java を新規作成し、以下のコードを追加します。
package com.example.andy.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName";
public static final String CONTACTS_TABLE_NAME = "SalaryDetails";
public DatabaseHelper(Context context) {
super(context,DATABASE_NAME,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
"create table "+ CONTACTS_TABLE_NAME +"(id integer primary key NOT NULL, name text NOT NULL,salary text NOT NULL)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+CONTACTS_TABLE_NAME);
onCreate(db);
}
public boolean insert(String s, String s1) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", s);
contentValues.put("salary", s1);
db.insert(CONTACTS_TABLE_NAME, null, contentValues);
return true;
}
}ここで注目すべきは、onCreate()メソッド内のCREATE TABLE文です。「id」「name」「salary」の各カラムにNOT NULLを指定することで、これらのカラムにNULL値が挿入されるのをデータベースレベルで防いでいます。また、onUpgrade()ではテーブル構造の変更時に既存テーブルを削除して再作成する処理を行っています。
アプリを実行して動作を確認する
それでは実際にアプリを動かしてみましょう。実機のAndroidスマートフォンをPCに接続し、Android Studioでアクティビティファイルを開いてツールバーの「Run」アイコンをクリックします。接続したデバイスを選択すると、端末に初期画面が表示されます。

次に、以下のように名前と給与の値を入力して「保存」ボタンをタップします。

登録結果は、Android Studioの画面(LogcatやDatabase Inspector)で以下のように確認できます。

-
Android SQLiteでMAX()関数を使う方法を徹底解説!実装サンプルコード付き
はじめに:AndroidにおけるSQLiteデータベースとは 具体的な例に入る前に、AndroidにおけるSQLiteデータベースについて簡単に確認しておきましょう。SQLiteは、デバイス上のテキストファイルにデータを保存するオープンソースのSQLデータベースです。Androidには標準でSQLiteデータベースの実装が組み込まれており、リレーショナルデータベースの機能をすべてサポートしています。 また、このデータベースにアクセスする際、JDBCやODBCのような接続設定は一切不要という点も大きな特徴です。 本記事では、Android SQLiteでMAX()関数を使用して最大値(最高給与)
-
AndroidのSQLiteでSUM()関数を使って合計値を取得する方法【サンプルコード付き】
SQLiteデータベースとは具体的な実装例に入る前に、AndroidにおけるSQLiteデータベースの基礎知識をおさらいしておきましょう。SQLiteはオープンソースのSQLデータベースエンジンで、デバイス内のテキストファイル形式でデータを保存します。Androidには標準でSQLiteの実装が組み込まれており、追加のライブラリなしですぐに利用できます。SQLiteはリレーショナルデータベースの主要な機能を一通りサポートしており、JDBCやODBCのような接続ドライバーを用意する必要がない点も大きな特徴です。アプリ内から直接アクセスできる手軽さが、Android開発で広く使われる理由です。本記