程序如下:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class LobServlet extends HttpServlet {
private String dbUserName="yujq";
private String dbPassword="yujq";
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
ServletOutputStream out=response.getOutputStream();
String dataType=request.getParameter("type");
int memberID=Integer.parseInt(request.getParameter("id"));
if(dataType.equalsIgnoreCase("blob")){
response.setContentType("image/jpeg");
out.write(getBlob(memberID));
}//else if(dataType.equalsIgnoreCase("clob")){
//response.setContentType("text/html");
//out.write(getClob(memberID));
//}
out.flush();
out.close();
}
public byte[] getBlob(int memberID){
String query="SELECT Image FROM Photos WHERE MemberID=?";
Blob blob=null;
byte[] bytes=null;
try{
// Load the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
// Connect to the database
// You must put a database name after the @ sign in the connection URL.
// You can use either the fully specified SQL*net syntax or a short cut
// syntax as <host>:<port>:<sid>. The example uses the short cut syntax.
String url = "jdbc:oracle:thin:@yjq:1521:YJQDB";
String userName = "yujq";
String password = "yujq";
Connection con =DriverManager.getConnection (url, userName, password);
//Class.forName("oracle.jdbc.driver.OracleDriver");
//oracle.jdbc.pool.OracleDataSource tds=new oracle.jdbc.pool.OracleDataSource();
//tds.setServerName("YJQDB");
//tds.setDatabaseName("TESTBLOB");
//tds.setUser(dbUserName);
//tds.setPassword(dbPassword);
//DataSource ds=tds;
//Connection con=ds.getConnection(dbUserName,dbPassword);
PreparedStatement pstmt =con.prepareStatement(query);
pstmt.setInt(1,memberID);
ResultSet rs=pstmt.executeQuery();
ResultSetMetaData md=rs.getMetaData();
while(rs.next()){
blob=rs.getBlob(1);
}
bytes=blob.getBytes(1,(int)(blob.length()));
con.close();
}
//catch(ClassNotFoundException e){
// e.printStackTrace();
//}
catch(SQLException e){
e.printStackTrace();
}
return bytes;
}
}
我在浏览器中输入以下URL:
http://localhost:808/examples/servlet/LobServlet?type=blob&id=1;
会出现以下异常:
java.lang.NoClassDefFoundError: oracle/jdbc/OracleDriver
at LobServlet.getBlob(LobServlet.java:43)
at LobServlet.doGet(LobServlet.java:28)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at filters.ExampleFilter.doFilter(ExampleFilter.java:149)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
at java.lang.Thread.run(Thread.java:536)
难道oracle驱动器有问题?去了classpath加入oracle的classes12.jar之外,还有什么配置?谢谢
web-inf/lib/classes12.jar
oracle.jdbc.OracleDriver是一个interface,不能new oracle.jdbc.OracleDriver()