0

我的prepareStatement项目
有问题问题是我想根据用户类型查询表,即如果用户是一般用户则访问userlist表,如果用户是管理员则访问admin
我尝试过:

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 服务器版本相对应的手册,以在第 1 行的 'userid='nawed13593' 和 pwd='hello'' 附近使用正确的语法

我不想使用createStatement,因为这会使我的项目容易发生 sql 注入
谁能帮我解决这个问题以及引发上述异常的原因? 先感谢您

4

1 回答 1

3

您的表名之前或之后没有任何空格。在“管理员”案例中,您将得到以下结果:

Select status fromAdministratorwhere userid=? and pwd=?

在 SQL 语句字符串中插入空格:

//                              v         v
String sql = "Select status from "+table+" where userid=? and pwd=?";
于 2013-10-04T16:08:04.850 回答