日期:2014-05-18  浏览次数:20865 次

必须声明变量 '@P1',表名是?号
sql的代码:,问题,我想把表名也写写成?,但报这个异常,已经set
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]必须声明变量 '@P1'。执行execute什么意思public void insertInfo(LoginBean login,String sqltable) throws Exception
{

try
{
System.out.println("用户名:" + login.username);
System.out.println("真名:" + login.truename);
System.out.println("用户名:" + login.pwd);
System.out.println("用户名:" + login.pwd1);
System.out.println("用户名:" + login.city);
System.out.println("用户名:" + login.cardno);
System.out.println("用户名:" + login.tel);
System.out.println("用户名:" + login.email);
// 以上的用户名能够输出

System.out.println(dc.getConnection());// 这里输出 为null

// dc对象中包含了class.forname,和getConnection,getConnectio中返回con
String sql = "insert into ?(username,truename,pwd,pwd1,city,address,cardno,tel,email,cardtype) values(?,?,?,?,?,?,?,?,?,?)";
PreparedStatement pstmt = dc.getConnection().prepareStatement(sql);

System.out.println("sql执行");// 这里没有执行
pstmt.setString(1,sqltable);
pstmt.setString(2, login.username);
pstmt.setString(3, login.truename);
pstmt.setString(4, login.pwd);
pstmt.setString(5, login.pwd1);
pstmt.setString(6, login.city);
pstmt.setString(7, login.address);
pstmt.setString(8, login.cardno);
pstmt.setString(9, login.tel);
pstmt.setString(10, login.email);
pstmt.setString(11, login.cardtype);

System.out.println("已经set");// 这也没有执行,
pstmt.execute();

} catch (Exception ex)
{
System.out.print(ex);
}
System.out.println("执行execute");// 执行了,

}


------解决方案--------------------
要用普通的statment才行吧,表名无法作为绑定变量吧。
------解决方案--------------------
没这么用过 表名不能用? 代替吧?

用Statement 吧