2013-10-04 65 views
0

在我的項目我有prepareStatement問題
的問題是,我想根據用戶的IE類型查詢表,如果用戶是普通然後訪問userlist表,如果用戶是然後,管理員訪問admin
我已經試過這樣:
問題與prepareStatement變量表名

String userid=request.getParameter("userid"); 
String pwd=request.getParameter("pwd"); 
String check = request.getParameter("radio"); 
String table; 
String status=""; 
if(check.equals("General")) 
table="userlist"; 
else 
table="Administrator"; 
try{ 
String sql = "Select status from"+table+"where userid=? and pwd=?"; 
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/Quiz?","root","password"); 
PreparedStatement ps=conn.prepareStatement(sql); 
ps.setString(1,userid); 
ps.setString(2,pwd); 
ResultSet rs=ps.executeQuery(); 

我得到以下異常:

Errorcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 在您的SQL語法中有錯誤;檢查對應於 你的MySQL服務器版本正確的語法以線附近 「用戶id =」 nawed13593' 和pwd =‘你好’」使用1

我不想使用createStatement,因爲這將手冊讓我的項目容易出​​現sql注入
任何人都可以請幫我解決這個問題,以及上述異常被拋出的原因嗎? 預先感謝您

回答

3

您的表名稱前後沒有空格。你會風與此,在「管理」案例:

Select status fromAdministratorwhere userid=? and pwd=? 

插入空格到SQL語句字符串:

//        v   v 
String sql = "Select status from "+table+" where userid=? and pwd=?";