当前位置: 代码迷 >> Java Web开发 >> 无法绑定由多个部分组成的标识符解决方案
  详细解决方案

无法绑定由多个部分组成的标识符解决方案

热度:9084   发布时间:2013-02-25 21:20:04.0
无法绑定由多个部分组成的标识符
package cn.com.jobedu.my_case;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

public class CaseServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String method = request.getParameter("method");
if (method.equals("checkCaseInfo")) {
checkCaseInfo(request, response);
}else if(method.equals("list")){
list(request,response);
}else if(method.equals("delete")){
delete(request,response);
}else if(method.equals("edit")){
preEdit(request,response);
}else if(method.equals("postEditCaseInfo")){
postEditCaseInfo(request,response);
}

}

public void checkCaseInfo(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {


String Coname = request.getParameter("Coname");
String Tname = request.getParameter("Tname");
DataSource ds = null;

try {
// 通过在context.xml文件,设定的数据源对象的名字,获取数据源对象
Context context = new InitialContext();
ds = (DataSource) context.lookup("java:comp/env/jdbc/case");
} catch (Exception e) {
System.out.println("获取数据源时出错");
}
  List list=null;
try {

String sql = "select Co.Coid,Co.Coname,Te.Tname,Cl.Clname,Ca.Catoge,Ca.Catime from CourseInfo Co,TeacherInfo Te,ClassInfo Cl,CaseInfo Ca where Ca.Clid=Cl.Clid and Ca.Coid=Co.Coid and Ca.Tid=Te.Tid and Co.Coname=? and Te.Tname=?";
  String params[]={Coname,Tname};
QueryRunner qr = new QueryRunner(ds);
list = (List) qr.query(sql,params,new BeanListHandler(CaseInfo.class));



} catch (SQLException e) {

e.printStackTrace();
}
request.setAttribute("list", list);
request.getRequestDispatcher("/checkCaseInfoResult.jsp").forward(request,
response);

}


运行出错,
java.sql.SQLException: com.microsoft.sqlserver.jdbc.SQLServerException: 无法绑定由多个部分组成的标识符 "Ca.Clid"。 Query: select Co.Coid,Co.Coname,Te.Tname,Cl.Clname,Ca.Catoge,Ca.Catime from CourseInfo Co,TeacherInfo Te,ClassInfo Cl,CaseInfo Ca where Ca.Clid=Cl.Clid and Ca.Coid=Co.Coid and Ca.Tid=Te.Tid and Co.Coname=? and TeacherInfo.Tname=? Parameters: [1, 1]
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:320)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:349)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:268)
at cn.com.jobedu.my_case.CaseServlet.checkCaseInfo(CaseServlet.java:68)
at cn.com.jobedu.my_case.CaseServlet.doPost(CaseServlet.java:34)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
  相关解决方案