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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

0回答

2466閲覧

Android テーブルの結合

退会済みユーザー

退会済みユーザー

総合スコア0

SQLite

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

1クリップ

投稿2014/10/27 03:27

AndroidでContentProviderを扱っており、テーブルの結合をしたいのですが、結合されていません。
現在「test」と「category」というテーブルを作っており、

test category
id,text,text,text id,text

というようなテーブルになっています。
ここでお互いのid同士をContentProvider内のonUpgradeメソッドで"select * from test inner join category on test.id = category.id"で結合させて、MainActivityのreadDBで値を取得しようとするのですが、
「while compiling: SELECT image, word, yen, category FROM test」
というエラーが出てしまいます。
どこを直せばいいか分かりません。SQLが間違っているのでしょうか?それともテーブルが作られてないのでしょうか?もしテーブルが作られてないとすれば、テーブルを確認する方法はありますか?
行き詰ってしまいまして、是非お力添えをいただきたいです。
よろしくお願いします。

public class MyActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); writeTestDB("A.png", "ABC", "¥280", "category1"); writeCateDB("カテゴリー1"); readDB(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.my, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } private void writeTestDB(String image, String word, String yen, String category){ Uri uri=Uri.parse("content://com.example.appdev.mycontentprovider/test"); ContentValues values=new ContentValues(); values.put("image",image); values.put("word",word); values.put("yen",yen); getContentResolver().insert(uri,values); } private void writeCateDB(String cate){ Uri uri=Uri.parse("content://com.example.appdev.mycontentprovider/category"); ContentValues values=new ContentValues(); values.put("category",cate); getContentResolver().insert(uri,values); } private void readDB(){ Uri uri=Uri.parse("content://com.example.appdev.mycontentprovider/test"); Cursor c=this.getContentResolver().query(uri,new String[]{"image","word","yen","category"},null,null,null); c.moveToFirst(); String fileName=c.getString(0); String word=c.getString(1); String yen=c.getString(2); String category=c.getString(3); setUI(fileName,word,yen,category); } public Bitmap loadImage(String fileName, Context context) { final AssetManager assetManager = context.getAssets(); InputStream is = null; Bitmap image=null; try { is = assetManager.open(fileName); image=BitmapFactory.decodeStream(is); } catch (Exception e) { e.printStackTrace(); }finally { try{ is.close(); }catch (Exception e){ e.printStackTrace(); } } return image; } public void setUI(String fileName,String word,String yen,String category){ TextView categoryText=(TextView)findViewById(R.id.category); categoryText.setText(category); Bitmap image=loadImage(fileName,this); ImageView imageView=(ImageView)findViewById(R.id.image); imageView.setImageBitmap(image); TextView wordText=(TextView)findViewById(R.id.word); wordText.setText(word); TextView yenText=(TextView)findViewById(R.id.yen); yenText.setText(yen); }

}


public class DBProvider extends ContentProvider {
private final static String DB_NAME="test.db";
private final static String DB_TABLE="test";
private static int DB_VERSION;
private final static String CATEGORY_DB_TABLE="category";

private SQLiteDatabase db; @Override public boolean onCreate() { PackageManager packageManager=getContext().getPackageManager(); try{ PackageInfo packageInfo=packageManager.getPackageInfo(getContext().getPackageName(), PackageManager.GET_ACTIVITIES); DB_VERSION=packageInfo.versionCode; }catch (PackageManager.NameNotFoundException e){ e.printStackTrace(); } DBHelper dbHelper=new DBHelper(getContext()); db=dbHelper.getWritableDatabase(); return (db!=null); } @Override public Cursor query(Uri uri,String[] columns,String selection, String[] selectionArgs,String sortOrder) { return db.query(DB_TABLE,columns,selection, selectionArgs,null,null,null); } @Override public int update(Uri uri,ContentValues values, String selection,String[] selectionArgs) { return db.update(DB_TABLE,values,null,null); } @Override public Uri insert(Uri uri,ContentValues values) { db.insert(DB_TABLE,"",values); return uri; } @Override public int delete(Uri uri,String selection, String[] selectionArgs) { return 0; } @Override public String getType(Uri uri) { return null; } private static class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context,DB_NAME,null,DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists "+DB_TABLE+"(id integer primary key autoincrement,image text,word text, yen text)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) { db.execSQL("create table if not exists "+CATEGORY_DB_TABLE+"(id integer primary key autoincrement, category text)"); db.execSQL("select * from test inner join category on test.id = category.id",null); } @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists "+DB_TABLE); db.execSQL("drop table if exists "+CATEGORY_DB_TABLE); onCreate(db); } }

}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問