質問: 1
回答: まずエラーの意味を確認してみましょう。 「ora-00904」でweb検索すると下記のページがヒットしました。 http://www.shift-the-oracle.com/oerrs/ora-00904.html このページの2番目の原因に該当するかと。 > string query = "select empno,password,ename from emp where enpno = " + userid + " and password = " + password; の部分ですが、仮にuseridに「11」、passwordに「test_pw」が入力されたとした場合、 「select empno,password,ename from emp where enpno = 11 and password = test_pw」 という文字列がqueryに設定され、それをsqlとして実行することになりますよね。 オラクルのsqlでは文字列型の値はシングルクウォート(')で囲まなければならないので、エラーが出ているのだと思います。 ですので、文字列型の値の部分をシングルクウォート(')で囲う様な文字列をjavaで生成すれば良いかと。 例) --------------------------------------------------------------- string query = "select empno,password,ename from emp where enpno = " + userid + " and password = '" + password + "'"; ちなみに objectbrowser で実行した場合は、 「select 個人コード,パスワード,名前 from manager where 個人コード = " + userid + " and パスワード = " + password」 という文字列をそのままsqlとして実行しているので、エラーになっているのだと思います。 「" + userid + "」と「" + password」は、javaのコードなので、objectbrowser で実行する場合にはその部分を人の手で置き換えてやる必要が有ります。 なので、「select 個人コード,パスワード,名前 from manager where 個人コード =1 and パスワード = 1」はうまくいったのです。 蛇足ですが、このケースはサンプルなので問題無いのですが、実際のプロダクトコードなどでは、入力値をそのままsqlの中に組み込むことはsqlインジェクションの危険性があり、大変危険です。プレースフォルダを使用する、適切なエスケープ処理を行うなどの対策が必要となります。