質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

817閲覧

Android Studioのデータベースの仕様が解らなくて困っています

gemfighter

総合スコア38

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2022/07/20 05:00

実現したいこと

Android Studio で一つのデータベースで二つのテーブルを作ることはできないのですか?

できれば正規化とかできるようにしたい

該当のソースコード

Java

1package com.example.task_project; 2 3import android.content.Context; 4import android.database.sqlite.SQLiteDatabase; 5import android.database.sqlite.SQLiteOpenHelper; 6import static com.example.task_project.Parent_class.DBEntry; 7import static com.example.task_project.Child_class.DBEntry_2; 8 9public class DatabaseHelper extends SQLiteOpenHelper { 10 static final private int VERSION = 2; 11 12 static final private String DBNAME = "Task.db"; 13 14 public DatabaseHelper(Context context) { 15 super(context, DBNAME, null, VERSION); 16 } 17 18 public void onCreate(SQLiteDatabase db) { 19 20 // テーブルを作成 21 db.execSQL( 22 "CREATE TABLE "+ DBEntry.Table_Name + 23 " (" + 24 DBEntry._ID + 25 " INTEGER PRIMARY KEY, " + 26 DBEntry.Name + 27 " TEXT default 'カテゴリー名'" + 28 " ) " 29 ); 30 31//ここの部分のデータベースが生成されていません 32 db.execSQL( 33 "CREATE TABLE "+ DBEntry_2.Table_Name + " (" + 34 DBEntry_2._ID + " INTEGER PRIMARY KEY, " + 35 DBEntry_2.Name + " TEXT default 'タスク名', " + 36 DBEntry_2.flag + " INTEGER, " + 37 DBEntry_2.parent + " TEXT default 'カテゴリー名', " + 38 DBEntry_2.Date + " INTEGER DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')), " + 39 DBEntry_2.ranking + " INTEGER" + 40 " ) "); 41 42 db.execSQL( 43 "CREATE TRIGGER trigger_samp_tbl_update AFTER UPDATE ON " + DBEntry.Table_Name + 44 " BEGIN "+ 45 " UPDATE " + DBEntry.Table_Name + " SET up_date = DATETIME('now', 'localtime') WHERE rowid == NEW.rowid; "+ 46 " END;"); 47 } 48 // データベースをバージョンアップした時、テーブルを削除してから再作成 49 public void onUpgrade(SQLiteDatabase db, int i, int i1) { 50 51 db.execSQL("DROP TABLE IF EXISTS " + DBEntry.Table_Name); 52 onCreate(db); 53 } 54}

Java

1package com.example.task_project; 2 3import android.provider.BaseColumns; 4 5public class Child_class { 6 7 private Child_class(){} 8 9 public static class DBEntry_2 implements BaseColumns{ 10 public static final String Table_Name = "Child"; 11 public static final String Name = "Name"; 12 public static final boolean flag = true; 13 public static final String parent = "parent"; 14 public static final String Date = ""; 15 public static final String ranking = ""; 16 } 17 18}

Java

1package com.example.task_project; 2 3import android.provider.BaseColumns; 4 5public class Parent_class { 6 7 private Parent_class(){} 8 9 public static class DBEntry implements BaseColumns{ 10 public static final String Table_Name = "Parent"; 11 public static final String Name = "Name"; 12 } 13 14} 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/07/20 05:25

できると思いますが…。すでにデータベースが存在する場合は onCreate は呼ばれないので、アプリをいったん消してやり直してみては。
guest

回答1

0

ベストアンサー

DBEntry_2のクラスで列名Dateとrankingが空文字列になっているからでは。

投稿2022/07/20 05:27

usekay

総合スコア395

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gemfighter

2022/07/20 08:55

すみません、まさか空文字列だと動かない仕様だとは思っていませんでした。
usekay

2022/07/20 12:45

まあ普通テーブル名が0文字のテーブルは作れんだろ。紛らわしいから仕様上NGにする。百歩譲ってOKにしても仕様上テーブル上のカラム名はユニークになるようにする。被ってたらSQLの文法上カラムを特定できん。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問