2016-03-24 24 views
-2

以下のコードはjava.sql.SQLExceptionを示しています。誰もがこのjava.sql.SQLException:ORA-00911:無効な文字

Class.forName("oracle.jdbc.driver.OracleDriver"); 

String lname=request.getParameter("lastname"); 
String uname=request.getParameter("username"); 
String fname=request.getParameter("firstname"); 
String cemail=request.getParameter("email"); 
String pswd=request.getParameter("password"); 
String cpswd=request.getParameter("conformpassword"); 
String sex=request.getParameter("gender"); 
long phon=Long.parseLong(request.getParameter("mobile")); 

Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "admin"); 
Statement st = con.createStatement(); 
ResultSet rs = st.executeQuery("insert into users values('" + uname + "','" + fname + "','" + lname + "','" + cpswd + "',"+ phon + ",'" + cemail + "','" + sex + "');"); 
+0

渡される変数の値は何ですか? – Ocracoke

+2

例外が何であるかを推測する必要がありますか?また、コードはSQLインジェクションで脆弱です。 –

+0

ORA-00911は、ステートメントの末尾にあるセミコロンからのものであり、存在してはいけません。しかし、準備されたステートメントとバインド変数を使用する必要があります。 –

答えて

0

代わりの固定に私を助けることができる:

Statement st = con.createStatement(); 
ResultSet rs = st.executeQuery("insert into users values('" + uname + "','" + fname + "','" + lname + "','" + cpswd + "',"+ phon + ",'" + cemail + "','" + sex + "')"); 

を私は次のことをやってお勧めしたい:

PreparedStatement st = con.prepareeStatement("insert into users values(?,?,?,?,?,?,?);"); 
st.setString(1, uname); 
st.setString(2, fname); 
st.setString(3, lname); 
st.setString(4, cpswd); 
st.setLong(5, phon); 
st.setString(6, cemail); 
st.setString(7, sex); 
ResultSet rs = st.executeQuery(); 

あなたの問題は、あなたの質問で明らかではありませんが、使用して私が持っているPreparedStatementはあなたが遭遇する将来の問題を防ぐでしょう。私はそれが助けて欲しい

+0

SQLステートメントの最後にセミコロンを取り除く必要があります。 –