25

我正在使用 Oracle 11g 数据库。当我尝试从 db 访问数据时,它显示错误 java.sql.SQLException: ORA-03115: unsupported network datatype or representation。我不明白这个错误是什么意思..

我的代码是:

 String uname,pass;
    ResultSet rs = null;
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
  try
  {
    uname=request.getParameter("uname");
    pass=request.getParameter("pass");
    Connection con=prepareConnection();
    String Query="select uname from passmanager where pass=?";
    PreparedStatement ps=con.prepareStatement(Query);
    ps.setString(1,pass);
    rs=ps.executeQuery(Query);
    if (rs.next() && uname.equalsIgnoreCase(rs.getString("uname")) || uname.equalsIgnoreCase(rs.getString("email"))) {
    HttpSession session = request.getSession(true);
    session.setAttribute("uname", rs.getString(1));

    ServletContext context = getServletContext();
    RequestDispatcher dispatcher = context
                    .getRequestDispatcher("/profile");
    dispatcher.forward(request, response);
  }

任何人都帮我解决这个问题..

4

3 回答 3

86

代替:

rs = ps.executeQuery(Query);

你应该执行:

rs = ps.executeQuery();

否则,您将取消准备语句并丢失所有参数,因为您为其分配了一个新的 SQL 语句(即使它是相同的)。

于 2013-01-13T11:16:05.390 回答
0

添加电子邮件栏

select uname, email from passmanager where pass=?
于 2013-01-13T10:39:39.370 回答
0

当您尝试按名称(在您的情况下为 rs.getString("uname") )获取不在结果集中的字段时,会出现此错误。

就像 igr 所说,您正在尝试获取电子邮件字段(使用 rs.getString("email") )并且它不在查询中,所以这是您的错误。

我找到了这个对话,因为当我试图在字符串末尾获取一个带有空格的字段时,我在应用程序中遇到了同样的错误( rs.getString("uname ") 而不是 rs.getString("uname" ) .

我只是使用从查询中获得的字段的正确名称来修复它。

我希望它有用!;)

于 2013-09-20T11:43:55.543 回答