2011-01-09 46 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