2011-01-09 40 views
0

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

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。*;

+0

您好,我刚才编辑我的问题 – sutoL 2011-01-09 09:46:00

回答

1

它很简单,您正在使用java.sql包中的Statement和Resultset类。所以你必须在JSP中导入java.sql包。

如果你在你的自定义类中做所有的db工作,并在JSP中调用它的一个方法,它不需要任何这些类,那么只有这样你才能省略在Jsp页面中导入java.sql。

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

希望你明白我的观点。

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