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

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

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

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

Java

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

Android

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

Q&A

解決済

1回答

4137閲覧

実行時エラー Android SQLiteDBからデータを読んでListViewに表示しようとしてますが

phone0125

総合スコア40

SQLite

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

Java

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

Android

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

0グッド

0クリップ

投稿2015/03/01 14:57

編集2015/03/01 15:22

Androidアプリ開発初心者です
DBからデータを読んで自作アダプターを用いたListViewに表示しようとしていますが,実行時エラーで当該アクティビティに遷移した途端に落ちます.
コメントアウトする位置を変えたりして原因を探っていますが,いまいちよくわかりません.

以下LogCatです

lang

1E/AndroidRuntime(19527): 2 FATAL EXCEPTION: main 3 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.apphogehoge/com.example.apphogehoge.HogeActivity}: android.database.sqlite.SQLiteException: not an error (code 0) 4 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351) 5 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403) 6 at android.app.ActivityThread.access$600(ActivityThread.java:165) 7 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373) 8 at android.os.Handler.dispatchMessage(Handler.java:107) 9 at android.os.Looper.loop(Looper.java:194) 10 at android.app.ActivityThread.main(ActivityThread.java:5370) 11 at java.lang.reflect.Method.invokeNative(Native Method) 12 at java.lang.reflect.Method.invoke(Method.java:525) 13 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 14 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 15 at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:112) 16 at dalvik.system.NativeStart.main(Native Method) 17 Caused by: android.database.sqlite.SQLiteException: not an error (code 0) 18 at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method) 19 at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:731) 20 at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754) 21 at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64) 22 at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1665) 23 at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594) 24 at com.example.apphogehoge.DataBaseHelper.execSql(DataBaseHelper.java:73) 25 at com.example.apphogehoge.DataBaseHelper.onCreate(DataBaseHelper.java:35) 26 at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 27 at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188) 28 at com.example.apphogehoge.HogeActivity.onCreate(HogeActivity.java:32) 29 at android.app.Activity.performCreate(Activity.java:5122) 30 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146) 31 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2315) 32 ... 12 more

このときのHogeActivityのonCreateは次の通りです

lang

1 private DataBaseHelper helper = null; 2 private String hoge1 = "1001"; 3 private String hoge2 = "101"; 4 private String[] hoge4s; 5 private String[] hoge3s; 6 private String[] hoge5s; 7 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.hoge_activity); 12 13 helper = new DataBaseHelper(this); 14 15 SQLiteDatabase db = helper.getReadableDatabase(); 16 String[] cols = {"id", "hoge1", "hoge2", "hoge3", "hoge4", "hoge5", "hoge6"}; 17 String[] params = {hoge1, hoge2}; 18 /* 19 Cursor cs = db.query("tablehoge", cols, "hoge1 = ? and hoge2 = ?", params, null, null, "id desc", null); 20 if (cs.moveToFirst()) { 21 int i = 0; 22 do { 23 hoge4s[i] = cs.getString(4); 24 hoge3s[i] = cs.getString(3); 25 hoge5s[i] = cs.getString(5); 26 i++; 27 }while(cs.moveToNext()); 28 } 29 30 // 配列の内容をListItemに詰め替え 31 ArrayList<HogeListItem> data = new ArrayList<HogeListItem>(); 32 for (int i = 0; i < hoge4s.length; i++){ 33 HogeListItem item = new HogeListItem(); 34 item.setId_usrmsg((new Random()).nextLong()); 35 item.setUsrmsg(hoge4s[i]); 36 item.setDate(hoge3s[i]); 37 item.setGoodnum(hoge5s[i]); 38 data.add(item); 39 } 40 41 // ListItem配列とレイアウトとを関連付け 42 ListAdapterUsrMsg adapter = new ListAdapterHoge(this, data, R.layout.hoge_listitem); 43 ListView list = (ListView)findViewById(R.id.lv_hoge); 44 list.setAdapter(adapter); 45 */

エラー文中のHogeActivity.java:32SQLiteDatabase db = helper.getReadableDatabase();を指しています.

なにが問題なのでしょうか?
よろしくお願いいたします

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

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

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

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

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

guest

回答1

0

ベストアンサー

com.example.apphogehoge.DataBaseHelper.execSqlではどんなSQLを実行しているのでしょうか。

投稿2015/03/01 15:37

argius

総合スコア9388

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

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

phone0125

2015/03/01 16:34

ありがとうございます `com.example.apphogehoge.DataBaseHelper.execSql`はSQL文を記述した外部ファイル(assets/sql/create/*.sql)を読んで実行しています. Webで見つけたものを拝借しましたが,コードは以下になります ```lang-<Java> static final private String DBNAME = "apphogehoge.sqlite"; static final private int VERSION = 1; private Context mContext; public DataBaseHelper(Context context) { super(context, DBNAME, null, VERSION); mContext = context; } 中略 private void execSql(SQLiteDatabase db,String assetsDir) throws IOException { AssetManager as = mContext.getResources().getAssets(); try { String files[] = as.list(assetsDir); for (int i = 0; i < files.length; i++) { String str = readFile(as.open(assetsDir + "/" + files[i])); for (String sql: str.split("/")){ db.execSQL(sql); } } } catch (IOException e) { e.printStackTrace(); } } private String readFile(InputStream is) throws IOException{ BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(is,"SJIS")); StringBuilder sb = new StringBuilder(); String str; while((str = br.readLine()) != null){ sb.append(str +"\n"); } return sb.toString(); } finally { if (br != null) br.close(); } } ``` SQL文の区切りは`/`です. よろしくお願いいたします.
argius

2015/03/01 16:40

SQL文そのものに問題がある可能性があるので、/で分割された後のどのSQLで発生したのかまでは特定していただかないとちょっと分かりませんね。
phone0125

2015/03/02 09:13

ありがとうございます SQL文自体やSQLファイルを正しく処理できていないことなど,いろんな可能性を疑って試行錯誤した結果,HogeActivityのString配列 colsがDB上のカラム名と異なっていたことが原因でした.ケアレスミスでした. しかし,DB→配列→ListViewへの表示はまだできてません.もうすこし試行錯誤してみてから別スレを立てるかもしれませんので,その際はよろしくお願いいたします. ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問