是自定义类导入的API包含在.class文件中吗?

时间:2011-01-09 09:40:45

标签: java jsp

我有一个问题,我有一个导入java.sql的自定义类。;我正在创建一个jsp页面,在jsp页面中,我做了自定义类的页面导入,但是当我试图调用我的自定义类数据库方法时,它无法工作。只有当我执行了java.sql的页面导入。才有效。自定义类导入的API也包含在.class文件中吗?

An error occurred at line: 6 in the jsp file: /resetpw.jsp
Statement cannot be resolved to a type
3: 
4: <%
5: db.connect();
6: Statement stmt = db.getConnection().createStatement();
7: ResultSet rs = stmt.executeQuery("SELECT * FROM created_accounts");
8: 
9: 


An error occurred at line: 7 in the jsp file: /resetpw.jsp
ResultSet cannot be resolved to a type
4: <%
5: db.connect();
6: Statement stmt = db.getConnection().createStatement();
7: ResultSet rs = stmt.executeQuery("SELECT * FROM created_accounts");
8: 
9: 
10: 


Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:319)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:565)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:309)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.31 logs.

编辑。如果我没有对java.sql进行页面导入,那么会添加什么错误。*;

2 个答案:

答案 0 :(得分:1)

很简单,您使用的是java.sql包中的Statement和Resultset类。因此,您必须在JSP中导入java.sql包。

如果您在自定义类中执行所有数据库工作并在JSP中调用它的方法,而不需要任何此类,那么您只能在Jsp页面中省略java.sql的导入。

在一个类中导入的API不能用于调用第一个类的另一个类或页面。它们不包含在.class文件中。

希望你明白我的意思。

答案 1 :(得分:1)

Harry Joy是对的,你需要导入声明。这是JSP页面的一些框架:

<%@ page language ="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>

...some stuff...

<%
String paramT1=request.getParameter("t1");
String paramT2=request.getParameter("t2");
%>

...some stuff..

<%
try{
 Class.forName("your_jdbc_drier_class");
 Connection con=DriverManager.getConnection("connection_url","username","password");

 PreparedStatement st; 
 st = con.prepareStatement("Insert into ch values (1,2)");
 st.setString(1,fname);
 st.setString(2,lname);
 st.executeUpdate();
}
catch(Exception e1)
{
out.println("cannot display the records");
}
%>
... some stuff ...

这应该可行,但我强烈建议在容器和JSTL SQL中使用JNDI。以下是一些可能有用的教程:

  1. JSTL SQL tutorial from IBM
  2. JSTL SQL without JNDI from JAVA2S
  3. JNDI in Tomcat