2012-02-10 17 views
0

文字列値を連結した後にシーケンスの次の値をテーブルに挿入します。例:case12。ここでは 'case'が文字列になり、 '12'が次のシーケンス値になります。 私のJSPページでこのコードを試しています。concat sequence次の値を文字列で返します。

String name=request.getParameter("name").toString(); 
String pwd=request.getParameter("pass").toString(); 
out.print(name+" and "+pwd); 
String add="case"; 
PreparedStatement ps = connect.prepareStatement("insert into test(caseid,userid,pass) values('CONCAT('"+add+"',test_seq.nextval)',?,?)"); 
      ps.setString(1,name); 
      ps.setString(2,pwd); 
      ps.executeUpdate(); 
      connect.commit(); 
      connect.close(); 

が、誰も私に上記の問題の解決策を伝えることができ、私はこのエラーにjava.sql.SQLException: ORA-00917: missing comma

を取得しています。どんな助けもありがたいです!

答えて

2

可能な限り、SQL文を動的にアセンブルするためにパラメータを渡すことをお勧めします。したがって、 "大文字小文字"をハードコードされた定数にしたくない場合は、バインド変数にする必要があります。

さらに、CONCATコールの回りに一重引用符を使用したくない場合。このようなものはうまくいくはずです。

String name=request.getParameter("name").toString(); 
String pwd=request.getParameter("pass").toString(); 
out.print(name+" and "+pwd); 
String add="case"; 
String sqlStmt = "insert into test(caseid,userid,pass) values(CONCAT(?,test_seq.nextval),?,?)"; 
PreparedStatement ps = connect.prepareStatement(sqlStmt); 
ps.setString(1,add); 
ps.setString(2,name); 
ps.setString(3,pwd); 
ps.executeUpdate(); 
connect.commit(); 
connect.close(); 
+0

ありがとう!それは働く... :) しかし、それはps.setString(1、add)でなければなりません。 not ps.setString(1、case); しかし、それは大きな問題ではありません。あなたの助けをありがとう –

+0

@sql_query - うん、それについて申し訳ありません。適切な変数名を使用するように変更しました。 –

関連する問題