定义了一个oracle类:import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class oracle {

private static oracle O=null;
String Url="jdbc:oracle:thin:@192.168.1.106:1521:orcl";
String User="scott";
String password="tiger";
Connection conn=null;
Statement sta=null;
PreparedStatement ppsta;
ResultSet rs=null;
oracle()throws SQLException
{
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
conn=DriverManager.getConnection(Url, User, password);
sta=conn.createStatement();

} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("not found!");
}
}
public static oracle getInstance()
{
if(O==null)
try
{
O=new oracle();
}catch(SQLException e)
{
e.printStackTrace();
}

return O;
}
public void search(String sql)throws SQLException
{

try
{
rs=sta.executeQuery(sql);
}catch(SQLException e)
{
e.printStackTrace();
}

}

}写了一个servlet:
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**
 * Servlet implementation class Search
 */
public class Search extends HttpServlet {
private static final long serialVersionUID = 1L; /**
 * @see HttpServlet#HttpServlet()
 */
public Search() {
super();
// TODO Auto-generated constructor stub
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();


try {
oracle O = oracle.getInstance(); String sql = "select * from dept where LOC='DALLAS'";
O.search(sql);
while (O.rs.next())
out.println("<HTML><BODY>" + O.rs.getString(1)
+ O.rs.getString(2) + O.rs.getString(3)
+ "</BODY></HTML>");
} catch (SQLException e) { // TODO Auto-generated catch block
out.println("<HTML><BODY>" + "<H1 ALIGN=CENTER>" + "无法找到"
+ "</H1>\n" + "</BODY></HTML>");
}

}}写了一个jsp:
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
输入框:<br>
<form name="form1" action="Search" method="post">
<input type="text" name="name" size=20 ></input>
<input type="submit" value="ok"></input>"
</form>
</br>
</body>
</html>点击ok按钮,报错:
         java.lang.NullPointerException
oracle.search(oracle.java:56)
Search.doPost(Search.java:53)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)=========================
空指针异常,好像没发现啊

解决方案 »

  1.   

    你的String Url="jdbc:oracle:thin:@192.168.1.106:1521:orcl"中的ip是不是本机的么?如果不是本机的,测试服务器上的oracle监听器及服务开启没有。
    如果是本机的话,换成localhost或127.0.0.1即可运行出结果。
      

  2.   

    我用你的代码在本机上测试通过,然后只是将你代码中的ip改成我的。其他的没有改变。PS:你写的jsp貌似用不到。因为jsp中的参数并没有在servlet中进行获得处理。
      

  3.   

    sta没取到。
    楼主代码很不合理。一般st,rs都是用的时候再打开,用完马上关闭。否则会出现意想不到的问题。
    不信楼主可做一for循环1000次,在for外面定义st/rs/sql = select ***, for里面 rs st.execute(sql),看看会不会抛异常。