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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

9483閲覧

SQLiteException: unrecognized token: "4月19日"

edoooooo

総合スコア476

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

0クリップ

投稿2017/04/19 09:10

"4月19日"のはいった data1を.toString()して、String data2に代入してSELECTの条件に指定しているのですが、認識されない(unrecognized)となります。
どのようにすれば数字を使用できるのでしょうか?
どうぞよろしくお願いします。

java

1 2 String title1= mList.get(pos).get("title"); 3 String content1=mList.get(pos).get("content"); 4 String data1=mList.get(pos).get("data"); 5 String data2=data1.toString(); 6 7 String table2=UserContract.Users.TABLE_NAME; 8 9 10 String sql="SELECT * FROM " +table2 + 11 " WHERE TITLE= " +title1 + 12 " AND CONTENT ="+ content1 + 13 " AND DATA =" + data2 ; 14 15 Cursor c =db.rawQuery(sql,null); 16

java

1 android.database.sqlite.SQLiteException: unrecognized token: "4月19日" (code 1): , while compiling: SELECT * FROM w WHERE TITLE= なやらゆ AND CONTENT =よ、ぬ AND DATA =419
recode👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

あなたのSQLの書き方はSQLインジェクションという脆弱性を招きます。PreparedStatementを使う書き方に直すべきです。

とりあえず前述の問題は置いておくとして、あなたのSQLには文字列をクォートで囲むことが足りていません。エラーメッセージに書かれたクエリを見てください。

SELECT * FROM w WHERE TITLE= なやらゆ AND CONTENT =よ、ぬ AND DATA =4月19日

単純にsqlに対してtitle1などの「文字列として扱わねばいけないもの」を連結したので、そこがエラーになっています。
こうなるように調整してください。

SELECT * FROM w WHERE TITLE= 'なやらゆ' AND CONTENT ='よ、ぬ' AND DATA ='4月19日'

投稿2017/04/19 09:21

masaya_ohashi

総合スコア9206

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

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

edoooooo

2017/04/19 09:27

'なやらゆ'のように囲わなくては行けなかったのですね。ありがとうございました。
guest

0

解決するための回答ではありません。

あなたのバグへの対応方法が根本的におかしいと考えられます。
どのように考え、なに調べたか(検索キーワード等)を具体的に書いてください。

投稿2017/04/19 09:21

yona

総合スコア18155

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

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

edoooooo

2017/04/19 09:26

なぜ"4月19"にエラーが出るのかと、考え、数字が含まれているからと考えました。 そこで、"4月19日"という文字をすでにString型の変数に入れていたのになぜだろうと疑問に思いながら、 toString()をすることで、解決しようとしました。しかしエラーが変わらず、どうすれば良いのだろうと思い質問させていただきました。 検索キーワードとしましては、 数字 WHERE句 や、unrecognized token などです。
yona

2017/04/19 09:45

検索した結果なにをしましたか? これらのキーワードで検索をするとSQLの書き方が出てきているはずですが、自分のSQLと見比べましたか?
edoooooo

2017/04/19 10:15 編集

数字を文字列に変換するための、情報しか調べていませんでした。 そして、.toStringやString型への型変換をかくにんしました。
yona

2017/04/19 12:33

最初に「数字 WHERE句」「unrecognized token」を調べて、結果をよく見ずに「数字を文字列に変換する方法」を調べたと言うことですねを
edoooooo

2017/04/19 12:35

そうでした。unrecognized=認識されません ということから 数字が行け無いのだと決めつけていました。すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問