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

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

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

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

Java

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

Android Studio

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

Q&A

解決済

1回答

1193閲覧

DBの検索の仕方について

yamaiti3

総合スコア28

SQLite

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

Java

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

Android Studio

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

0グッド

1クリップ

投稿2018/01/16 02:42

アプリ開発初心者です。DBに登録したデータを検索するアプリを参考書とうりに作ったのですがボタンをクリックするとERRORになってしまいます。どこが間違っているのでしょうか?ご回答よろしくお願いします

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

private SQLiteDatabase dbObject; private String dbName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //データベース名と保存場所を登録 dbName = "data/data/" + getPackageName() + "/myDatabase1.db"; findViewById(R.id.button1).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { //データベースオブジェクトを作成 dbObject = SQLiteDatabase.openOrCreateDatabase(dbName, null); //古いテーブルを破壊するSQL文を登録 String dropTable = "DROP TABLE IF EXISTS namelist "; //3つのカラムを持つテーブルを作成するSQL文を登録 String createTable = "CREATE TABLE namelist " + "(id INTEGER PRIMARY KEY, name STRING, point INTEGER)"; //データベースを追加するSQL文を登録 String[] insertData = { "INSERT INTP namelist(name, point) VALUES ('山極一生', 1997)", "INSERT INTP namelist(name, point) VALUES ('山極二生', 1998)", "INSERT INTP namelist(name, point) VALUES ('山極三生', 1999)", "INSERT INTP namelist(name, point) VALUES ('山極四生', 2000)", "INSERT INTP namelist(name, point) VALUES ('山極五生', 2001)", "INSERT INTP namelist(name, point) VALUES ('山極六生', 2002)" }; //古いテーブルを破棄 dbObject.execSQL(dropTable); //テーブルを作成 dbObject.execSQL(createTable); //データを追加 for (int i=0; i < insertData.length; i++){ dbObject.execSQL(insertData[i]); } //データベースオブジェクトをクローズ dbObject.close(); } } ); findViewById(R.id.button2).setOnClickListener( new View.OnClickListener(){ ArrayAdapter<String> ad; @Override public void onClick(View v){ //データベースオブジェクトの作成 dbObject = SQLiteDatabase.openOrCreateDatabase(dbName, null); EditText ed = (EditText)findViewById(R.id.editText2); String num = ed.getText().toString(); //検索を行うSQL文を登録 String query = "SERECT * FROM namelist WHERE point >=" + num; try{ Cursor cursor = dbObject.rawQuery(query, null); //ArrayListのインスタンスを作成 ArrayAdapter<String> ad = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_list_item_1 ); while (cursor.moveToNext()){ //各カラムのidを取得 int idId = cursor.getColumnIndex("id"); int idName = cursor.getColumnIndex("name"); int idPoint = cursor.getColumnIndex("point"); int id = cursor.getInt(idId); int point = cursor.getInt(idPoint); String name = cursor.getString(idName); String row = id + ":" + name + ":" + point + "ポイント"; ad.add(row); } }catch (Exception e){ //データベースオブジェクトをクローズ dbObject.close(); showDialog( MainActivity.this, " ERROR ", " データの読み込みに失敗しました "); } ((ListView) findViewById(R.id.listView)).setAdapter(ad); //データベースをクローズ dbObject.close(); } }); } //ダイアログを表示するメソッドの定義 private static void showDialog( Context context, String title, String text ){ AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); alertDialog.setTitle(title); alertDialog.setMessage(text); alertDialog.setPositiveButton("OK",null); alertDialog.show(); }

}

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

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

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

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

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

yona

2018/01/16 03:53

ログキャットのエラーログを追記してください。
yamaiti3

2018/01/16 05:09

1-16 05:08:09.867 4487-4487/com.example.j15092.db_serach E/SQLiteLog: (1) near "INTP": syntax error 01-16 05:08:09.868 4487-4487/com.example.j15092.db_serach D/AndroidRuntime: Shutting down VM 01-16 05:08:09.869 4487-4487/com.example.j15092.db_serach E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.j15092.db_serach, PID: 4487 android.database.sqlite.SQLiteException: near "INTP": syntax error (code 1): , while compiling: INSERT INTP namelist(name, point) VALUES ('山極一生', 1997) at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677) at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608) at com.example.j15092.db_serach.MainActivity$1.onClick(MainActivity.java:58) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
yamaiti3

2018/01/16 05:10

本当に申し訳ないのですがログキャットのエラーはこれであっているでしょうか?
guest

回答1

0

ベストアンサー

エラーが出たらログキャットでエラーログを見ましょう。そこに大半の答えが書いてあります。
書籍にあるのはあくまでも正解の道筋だけで、一度道筋を外れてしまうと自力で戻るしかありません。

下記のメッセージを見たらどうすべきかわかりませんか?

android.database.sqlite.SQLiteException: near "INTP": syntax error (code 1): , while compiling: INSERT INTP namelist(name, point) VALUES ('山極一生', 1997)

投稿2018/01/16 05:25

yona

総合スコア18155

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

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

yamaiti3

2018/01/16 05:41

INTOがINTPになっていたんですね!こんなケアレスミスをしてしていたとは気できませんでした。 初心者の私にもわかるように丁寧にヒントを教えて下さり本当にありがとうございました。 よろしければまた躓いたときにそっとヒントを教えて下さると助かります!
yona

2018/01/16 05:43

はい。 質問のコードはコード用の記述方があるので、次回からは利用しましょう。
yamaiti3

2018/01/16 05:46

すいません。自分はこれからもっとアプリ開発を本格的に勉強していきたいのですがどのような勉強方法をしたらyonaさんのように自由にプログラムをかけるようになりますか?
yona

2018/01/16 05:59 編集

最初のうちは下記を注意するといいですね。 ・リファレンスを必ず読むこと。 ・エラーログを必ず読むこと。 ・コピペする前に必ず理解する努力をすること。 ・デバッグする力をつけること。
yamaiti3

2018/01/16 07:10

ご丁寧に教えてくださりありがとうございます。教えてくださったことを意識してこれかたアプリ開発をしていきたいと思います。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問