servlets thread: Wrong Oracle Data Output by Calling From a Servlet (Urgen, Pls Help!!!)
Please help !!!!!!!
I wrote a servlet (tomcat 4.1 --> oracle 9i) to connect Oracle 9i by JDBC,
but the result set contained a wrong data something like
0x35
0x6368616E20746169206D616E35
0x686F6E67206B6F6E67.
However, it worked fine if I put the same code into a simple java
application-
public class SQLDataExample2
{
public static void main(String args []) throws Exception
{ .....I copied the same code to here.....}
}
And the correct result is:
5
chan tai man5
hong kong
my servlet is:
import java.sql.*;
import java.io.*;
import oracle.jdbc.*;
import oracle.sql.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;
public class MyTest1jdbc extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Begin");
out.println("1");
SQLDataExample3 aSQLDataExample3 = new
SQLDataExample3();
try
{
callSP2();
}
catch (Exception e)
{
System.out.println(e);
}
}
public String callSP() throws SQLException {
DriverManager.registerDriver(new
oracle.jdbc.OracleDriver());
Connection conn =
DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1520:XmlTest", "system", "password");
conn.setAutoCommit (false);
//fill into clob
String query2 = "{call XMLDemo.getXML(?) }";
OracleCallableStatement stmt2 =
(OracleCallableStatement)conn.prepareCall(query2);
//stmt2.registerOutParameter
(1,oracle.jdbc.driver.OracleTypes.CLOB);
stmt2.registerOutParameter
(1,oracle.jdbc.driver.OracleTypes.VARCHAR);
stmt2.executeQuery();
System.out.println("xxx" + stmt2.getString(1));
stmt2.close();
return stmt2.getString(1);
}
public StudInfo callSP2() throws SQLException {
DriverManager.registerDriver(new
oracle.jdbc.OracleDriver());
Connection conn =
DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1520:XmlTest", "system", "password");
conn.setAutoCommit (false);
Dictionary map = (Dictionary)conn.getTypeMap();
try
{
map.put ("SYSTEM.STUDINFO",Class.forName
("StudInfo"));
}
catch(ClassNotFoundException e)
{
System.out.println(e);
}
String query2 = "begin XMLDemo.getStudDetail(?); End;";
System.out.println("3");
OracleCallableStatement stmt2 =
(OracleCallableStatement)conn.prepareCall(query2);
System.out.println("4");
//stmt2.registerOutParameter
(1,oracle.jdbc.driver.OracleTypes.CLOB);
stmt2.registerOutParameter
(1,OracleTypes.STRUCT,"SYSTEM.STUDINFO");
System.out.println("5");
stmt2.executeQuery();
System.out.println("6");
//STRUCT oStudInfo = (STRUCT) stmt2.getObject(1);
StudInfo oStudInfo = (StudInfo) stmt2.getObject(1);
System.out.println("7");
Object s = stmt2.getObject(1);
if (s != null)
{
if (s instanceof StudInfo)
{
System.out.println ("This is a StudInfo");
}
else
System.out.println ("Unknown type");
}
System.out.println(oStudInfo.getSstudid());
System.out.println(oStudInfo.getSstudname());
System.out.println(oStudInfo.getSstudaddr());
System.out.println("8");
stmt2.close();
return oStudInfo;
//return stmt2.getObject(1);
}
public void callSP3() throws SQLException {
// Connect
DriverManager.registerDriver(new
oracle.jdbc.OracleDriver ());
OracleConnection conn = (OracleConnection)
DriverManager.getConnection("jdbc:oracle:oci8:@",
"system", "password");
Dictionary map = (Dictionary)conn.getTypeMap();
try
{
map.put ("SYSTEM.STUDINFO",Class.forName
("StudInfo"));
}
catch(ClassNotFoundException e)
{
System.out.println(e);
}
System.out.println ("3");
Statement s = conn.createStatement();
System.out.println ("4");
OracleResultSet rs = (OracleResultSet)
s.executeQuery("select stud* from stud_tbl");
System.out.println ("5");
while(rs.next())
{
StudInfo oStudInfo = (StudInfo) rs.getObject(1);
System.out.println("StudId: " + oStudInfo.getSstudid
() + " StudName: " + oStudInfo.getSstudname());
}
rs.close();
s.close();
}
}