Oracle.sql.STRUCT and returns from procedures
I need to know how to retrieve information out of a stored procedure. I have a stored procedure that has a IN/OUT parameter that is used to return an array of an oracle TYPE that is set up in the database (it consists of two numbers and a varchar2. So I am returning an array of these types). I need to call this stored procedure from JDBC and retrieve the data out of it. I can setup the outParameter of the statement and also get the Object out of the statement once the procedure is called. But what is returned to me? An array of oracle.sql.STRUCT objects? A single oracle.sql.STRUCT object? A multi-dimensional array of java objects? Or something else?
Thanks
null
as far as I know, the STRUCT is the returned geometry. so you can declare a SDO_GEOMETRY variable and assing the STRUCT directly to this variable.
For example you have a variable 'geo_variable' and assign it the result of a function like this:
geo_variable := SDO_GEOM.SDO_DIFFERENCE(geom1, geom2, tol );
what you see written like this "oracle.sql.STRUCT@6c08b2.." I believe is the stuct @ the memory address 6c08b2..
Similar Messages
-
Oracle.sql.BLOB and oracle.sql.STRUCT
I'm development a application in Java with oracle, to manage media files. When I try to insert into oracle , I have this problem "oracle.sql.BLOB cannot be cast to oracle.sql.STRUCT" , and I don't know what that can be ..
This is my code , please help with that.. If you have a smaple code of java and oracle to insert media , that will be a great help ..
public void loadDataFromStream(OracleConnection con)
try {
Statement s = con.createStatement();
OracleResultSet rs = (OracleResultSet)
s.executeQuery("select * from blobs where id='video2.avi' for update ");
String index = "";
while(rs.next())
index = rs.getString(1);
index+="1";
System.out.println("llego hasta aki");
// el error esta en esta linea de abajo ...
OrdVideo vidObj = (OrdVideo) rs.getCustomDatum(2, OrdVideo.getFactory());
//rs.getBfile(3);///
FileInputStream fStream = new FileInputStream("/home/jova/movie.avi");
vidObj.loadDataFromInputStream(fStream);
vidObj.getDataInFile("/home/jova/movie.avi");
fStream.close();
System.out.println(" getContentLength output : " +
vidObj.getContentLength());
OraclePreparedStatement stmt1 =
(OraclePreparedStatement) con.prepareCall("update blob_col set image = ? where id = " + index);
stmt1.setCustomDatum(1,vidObj);
stmt1.execute();
stmt1.close() ;
index+="1";
System.out.println("OK");
catch(Exception e) {
System.out.println("exception raised " + e);
System.out.println("load data from stream unsuccessful");
}I'm development a application in Java with oracle, to manage media files. When I try to insert into oracle , I have this problem "oracle.sql.BLOB cannot be cast to oracle.sql.STRUCT" , and I don't know what that can be ..
This is my code , please help with that.. If you have a smaple code of java and oracle to insert media , that will be a great help ..
public void loadDataFromStream(OracleConnection con)
try {
Statement s = con.createStatement();
OracleResultSet rs = (OracleResultSet)
s.executeQuery("select * from blobs where id='video2.avi' for update ");
String index = "";
while(rs.next())
index = rs.getString(1);
index+="1";
System.out.println("llego hasta aki");
// el error esta en esta linea de abajo ...
OrdVideo vidObj = (OrdVideo) rs.getCustomDatum(2, OrdVideo.getFactory());
//rs.getBfile(3);///
FileInputStream fStream = new FileInputStream("/home/jova/movie.avi");
vidObj.loadDataFromInputStream(fStream);
vidObj.getDataInFile("/home/jova/movie.avi");
fStream.close();
System.out.println(" getContentLength output : " +
vidObj.getContentLength());
OraclePreparedStatement stmt1 =
(OraclePreparedStatement) con.prepareCall("update blob_col set image = ? where id = " + index);
stmt1.setCustomDatum(1,vidObj);
stmt1.execute();
stmt1.close() ;
index+="1";
System.out.println("OK");
catch(Exception e) {
System.out.println("exception raised " + e);
System.out.println("load data from stream unsuccessful");
} -
Obtaining an oracle.sql.STRUCT through a pooled JDBC connection
Hello,
I am using WebLogic Server 10 and and Oracle 10 and I am trying to obtain a vendor-specific oracle.sql.STRUCT from a ResultSet using a pooled connection defined in Weblogic. I need the vendor-specific object, rather than simply the java.sql.Struct implementation, because a third party library requires it.
What gets returned in the ResultSet is a non-exposed WebLogic wrapper object which implements java.sql.Struct, but which cannot be cast to an oracle.sql.STRUCT. I can use reflection on this object to find and call the getVendorObj() method to obtain the oracle.sql.STRUCT, but this solution is not acceptable because this is not a published API and is not guaranteed not to change in future versions.
How can I reliably obtain a vendor-specific implementation of java.sql.Struct through a WebLogic connection pool in WebLogic Server 10?
Thanks for any advice,
-Dan Schwemleindan schwemlein wrote:
Joe,
Thanks again. With your guidance, I have arrived at the following approach, which I'll post for the benefit of others, and which I'd be thankful if you would validate:
1) Import the jar com.bea.core.datasource-1.0.0.0.jar from %BEA_HOME%\modules, which is the only location of the class WLConnection, which is the only class with the getVendorConnection() method you refer to.
2) Get the logical connection from the pooled data source, cast it to a WLConnection, call getVendorConnection() to obtain an OracleConnection (from the ojdbc jar), and use this connection to obtain the required oracle.sql.STRUCT from an OracleResultSet.
3) Be aware of the limitations and follow the guidelines in the document http://e-docs.bea.com/wls/docs81/jdbc/thirdparty.html#1043646 regarding security, error handling, releasing resources (close only the logical connection), etc.
Does this sound like the approach you had in mind?
Thanks again,
-Danyes.
Joe
>
Re: Obtaining an oracle.sql.STRUCT through a pooled JDBC connection
Posted: Jul 16, 2007 3:21 PM
dan schwemlein wrote:
Thanks for the quick response!I was working today...
Thank you for the information about the connection being closed.
I will look into using this configuration setting.
You say that you can describe a way to get a handle on an unwrapped
pool object using some documented WLS-specific code. Are you referring
here to the getVendorConnection() method?yes.
This method does not help me
get the oracle.sql.STRUCT object, because even the connection returned
by getVendorConnection() returns a wrapped WL java.sql.Struct object
from a call to getObject().I don't believe it. If you are running in WLS, with a local pool,
the getVendorConnection() will give you the Oracle connection,
which will give you an Oracle statement, etc, down to an oracle
STRUCT object. Once you have a direct reference to the oracle connection,
we're not in the picture when it returns something to you.
It would be great if getVendorObj() were
documented and could be counted on in future versions. To use this
method, one would still have to access it via Java reflection, because
the wrapper class and its getVendorObj() method would be exposed in an
API, correct? Could this method be exposed in the API, so that reflection
doesn't need to be used, or it is exposed somewhere that isn't documented?getVendorObj() is not yet exposed or therefore supported for the general
wrapped object, so you would have to start from the connection and
derive all subobjects from it.
Thanks again,
-Dan Schwemlein
Hello,
I am using WebLogic Server 10 and and Oracle 10 and I am trying to obtain a
vendor-specific oracle.sql.STRUCT from a ResultSet using a pooled connection
defined in Weblogic. I need the vendor-specific object, rather than simply
the java.sql.Struct implementation, because a third party library requires it.
What gets returned in the ResultSet is a non-exposed WebLogic wrapper object
which implements java.sql.Struct, but which cannot be cast to an oracle.sql.STRUCT.
I can use reflection on this object to find and call the getVendorObj() method to
obtain the oracle.sql.STRUCT, but this solution is not acceptable because this is
not a published API and is not guaranteed not to change in future versions.Understood. We all benefit from sticking to the J2EE standards,
but we could also wish Oracle had done so with it's driver objects.
I will assume your code is running in the WebLogic server, because
an external JVM can never access the real driver object, which will
always really be in the WLS JVM. No active JDBC object is serializable.
How can I reliably obtain a vendor-specific implementation of java.sql.Struct
through a WebLogic connection pool in WebLogic Server 10?There is no way to get a handle on an unwrapped pool object without using some
WLS-specific code, though I can describe a way with documented methods,
and/or I can get our documentation altered to say we'll support the
getVendorObj() method. We introspect every vendor object, and for those
implementations that have done the wise thing, projecting any non-standard
methods as an Interface, we are able to also project that Interface so
the vndor example code should work. However, in some poorly-done
cases, such as for some Oracle stuff, there is either no Interface,
or the Oracle code has extensions that take java.sql objects as input,
(at least that's the signature of the method) but two lines into the
method, the Oracle code assumes and casts the java.sql object to a concrete
Oracle object. In these use cases you need the direct unwrapped object.
We provide and document Connection.getVendorConnection(), and intend
getVendorObj() to serve the same for subobjects, but note the dangers
and responsibilities: We rely on our wrappers to implement the security
and thread-safety of our pooling system. Because user code can get
unrestricted access to the actual connection from most JDBC objects,
we can never trust that we have complete control once a vendor object
is exposed. Therefore, by default we will close and replace every JDBC
connection so exposed, as soon as the current thread is finished with
the pool connection. This hurts performance. We also document a pool
config setting that will tell us that you take responsibility for any such
problems, and not to close connections just because they've been exposed.
HTH,
Joe
Thanks for any advice,
-Dan Schwemlein -
Hi all. I have a simple program running in JDeveloper using JDBC for retrieving SDO_Geometry values from various spatial tables. The program works fine but when I run the following SQL statement to retrieve the geometry column from a table states it is returning the sdo_geometry values in the following format:
spatialQuery = "select a.geom from states a";oracle.sql.STRUCT@e2dae9,
oracle.sql.STRUCT@19209ea,
oracle.sql.STRUCT@c8f6f8,
oracle.sql.STRUCT@1ce2dd4,
oracle.sql.STRUCT@122cdb6,
I know the program works but can anyone tell me how to interpret these results or even how to translate them into a more useful format. Cheers JoeI assume you are getting back a List (Vector) with the Struct inside it. Try ((List)query.getSingleResult()).get(0).
In JPA you should get the Struct back directly if the result size was 1, otherwise an Object[], this was a bug in EclipseLink 1.0 that was fixed in EclipseLink 1.1.
You should probably upgrade to EclipseLink 1.1.
James : http://www.eclipselink.org -
Oracle.sql.STRUCT
Hi,
when I use functions that returns a geometry (for example SDO_GOEM.SDO_BUFFER, SDO_GEOM.SDO_DIFFERENCE) I have in return oracle.sql.STRUCT@6c08b2..
What can I do!?
thanksas far as I know, the STRUCT is the returned geometry. so you can declare a SDO_GEOMETRY variable and assing the STRUCT directly to this variable.
For example you have a variable 'geo_variable' and assign it the result of a function like this:
geo_variable := SDO_GEOM.SDO_DIFFERENCE(geom1, geom2, tol );
what you see written like this "oracle.sql.STRUCT@6c08b2.." I believe is the stuct @ the memory address 6c08b2.. -
We have recently upgraded all of our servers from:
Java 1.6.31 to 1.6.32
and
Glassfish 3.1.1 to 3.1.2
We upgraded our development server from Oracle 10g to 11g.
Our live servers are working fine. Our development server now is spewing out a java.lang.NoClassDefFoundError: oracle/sql/STRUCT error whenever it encounters a servlet or page which uses this class.
ojdbc14.jar and sdopai.jar were included within the WAR file, and I have tried with them excluded from the WAR file to no avail. We have tried reverting the version of ojdbc.jar on the server to the earlier version, this has made no different.
Any ideas? The full stack trace is below:
[#|2012-05-28T16:15:34.950+0100|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=80;_ThreadName=Thread-2;|StandardWrapperValve[EnterDataSS]: PWC1406: Servlet.service() for servlet EnterDataSS threw exception
java.lang.NoClassDefFoundError: oracle/sql/STRUCT
at oracle.spatial.geometry.JGeometry.load(JGeometry.java:3097)
at Bto.Location.LocatorUtils.JavaScriptifySDO(LocatorUtils.java:97)
at Bto.Chats.Controllers.EnterDataModuleMain.<init>(EnterDataModuleMain.java:136)
at Bto.Chats.SessionBean.initialiseEdm2(SessionBean.java:348)
at Bto.Chats.Servlets.Enter.EnterDataSS.processRequest(EnterDataSS.java:36)
at Bto.Chats.Servlets.ChatsServlet.doGet(ChatsServlet.java:90)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
at com.sun.grizzly.http.ajp.AjpProcessorTask.invokeAdapter(AjpProcessorTask.java:135)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: oracle.sql.STRUCT
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 33 more
|#]>
Our live servers are working fine. Our development server now is spewing out a java.lang.NoClassDefFoundError: oracle/sql/STRUCT error whenever it encounters a servlet or page which uses this class.
ojdbc14.jar and sdopai.jar were included within the WAR file, and I have tried with them excluded from the WAR file to no avail. We have tried reverting the version of ojdbc.jar on the server to the earlier version, this has made no different.
>
If your code can't find the class then you have the classic NoClassDefFoundError problem you get when any other referenced class can't be located.
The oracle/sql/STRUCT class is in the ojdbc14.jar, ojdbc5.jar and ojdbc6.jar so if it can't be found then that class is missing from the jar you are using (which you can tell by examining the jar contents) or the jar is missing from the classpath being used.
As already mentioned you need the Oracle 11 JDBC files to support Java 1.6
Here is the official Oracle JDBC page that shows the Oracle DB versions supported for each of the JDBC drivers available and also describes the JDBC jars and what JDK versions they support.
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#02_01
>
Which JDBC drivers support which versions of Javasoft's JDK?
pre-8i OCI and THIN Drivers - JDK 1.0.x and JDK 1.1.x
8.1.5 OCI and THIN Drivers - JDK 1.0.x and JDK 1.1.x
8.1.6SDK THIN Driver - JDK 1.1.x and JDK 1.2.x (aka Java2)
8.1.6SDK OCI Driver - Only JDK 1.1.x
8.1.6 OCI and THIN Driver - JDK 1.1.x and JDK 1.2.x
8.1.7 OCI and THIN Driver - JDK 1.1.x and JDK 1.2.x
9.0.1 OCI and THIN Driver - JDK 1.1.x, JDK 1.2.x and JDK 1.3.x
9.2.0 OCI and THIN Driver - JDK 1.1.x, JDK 1.2.x, JDK 1.3.x, and JDK 1.4.x
10.1.0 OCI and THIN Driver - JDK 1.2.x, JDK 1.3.x, and JDK 1.4.x
10.2.0 OCI and THIN Driver - JDK 1.2.x, JDK 1.3.x, JDK 1.4.x, and JDK 5.0.x
11.1.0 OCI and THIN Driver - JDK 1.5.x and JDK 1.6.x
11.2.0 OCI and THIN Driver - JDK 1.5.x and JDK 1.6.x
Please note that JDK 1.4 is not supported by the 11 drivers. -
Using oracle.sql.STRUCT to pass in a COMPLEX OBJECT
I need to pass in a complex object (object with nested array of objects) into a oracle stored procedure.
We are using JDBC 9.2.0.1 drivers...
Note i am able to retrieve a complex object successfully using an oracle struct however i am not able to pass in the struct.
I do not want to use JPublisher as we are not using SQLJ.
I have looked through the documentation on using default structs and am getting an error when i try and create the struct...
I have created an array of objects with a sub array
and i create a struct descriptor however when i create the actual oracle struct
like
oracle.sql.Struct = new oracle.sql.Struct( structDesc,conn,complexobject)
I get a "java.sql.SQLException: Internal Error: Unable to resolve name"
Do i have to create STRUCTS for the nested object first ?
And then nest that STRUCT within the PARENT STRUCT to pass in complex objects ???
Any help would be much appreciated...
Gurinder
email [email protected]Thanks Konstantin Goryachev!
I'm using Oracle JDBC 9.2.0.3 drivers using a SQLData implementation.
Unfortunately i have something very similar to your code and i still get the following error
EXC: testPolicyRate(): java.sql.SQLException: Internal Error: Inconsistent catalog view
java.sql.SQLException: Internal Error: Inconsistent catalog view
void oracle.jdbc.dbaccess.DBError.throwSqlException(java.lang.String, java.lang.String, int)
DBError.java:187
void oracle.jdbc.dbaccess.DBError.throwSqlException(int, java.lang.Object)
DBError.java:229
void oracle.sql.StructDescriptor.initMetaData1_9_0()
StructDescriptor.java:897
void oracle.sql.StructDescriptor.initMetaData1()
StructDescriptor.java:864
boolean oracle.sql.StructDescriptor.isInstantiable()
StructDescriptor.java:508
void oracle.sql.STRUCT.<init>(oracle.sql.StructDescriptor, java.sql.Connection, java.lang.Object[])
STRUCT.java:107
oracle.sql.STRUCT oracle.sql.OracleSQLOutput.getSTRUCT()
OracleSQLOutput.java:96
oracle.sql.STRUCT oracle.sql.STRUCT.toSTRUCT(java.lang.Object, oracle.jdbc.OracleConnection)
STRUCT.java:408
oracle.sql.Datum oracle.jdbc.oracore.OracleTypeADT.toDatum(java.lang.Object, oracle.jdbc.driver.OracleConnection)
OracleTypeADT.java:284
oracle.sql.Datum[] oracle.jdbc.oracore.OracleTypeADT.toDatumArray(java.lang.Object, oracle.jdbc.driver.OracleConnection, long, int)
OracleTypeADT.java:327
oracle.sql.Datum[] oracle.jdbc.oracore.OracleTypeUPT.toDatumArray(java.lang.Object, oracle.jdbc.driver.OracleConnection, long, int)
OracleTypeUPT.java:143
oracle.sql.Datum[] oracle.sql.ArrayDescriptor.toOracleArray(java.lang.Object, long, int)
ArrayDescriptor.java:771
void oracle.sql.ARRAY.<init>(oracle.sql.ArrayDescriptor, java.sql.Connection, java.lang.Object)
ARRAY.java:118
void com.tu.lib.busobject.PolicyRate.main(java.lang.String[])
PolicyRate.java:198
Process exited with exit code 0.
Here's my code
* Main Method
public static void main(String[] args)
throws SQLException, IOException
Connection conn = null;
OracleCallableStatement cstmt = null;
try {
/* Setup connection */
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection("jdbc:oracle:thin:@neptune:1521:tu_test", "OPS$WWW", "welcome1");
conn.setAutoCommit(false);
System.out.println("conn is open = " + !conn.isClosed());
/* Setup map */
System.out.println("Creating type maps...");
java.util.Map typeMap = conn.getTypeMap();
typeMap.put(_SQL_NAME,PolicyRate.class);
typeMap.put(CoverageRate._SQL_NAME, CoverageRate.class);
typeMap.put(CoverageRate._SQL_ARRAY_NAME,CoverageRate[].class);
conn.setTypeMap(typeMap);
/* Create a coverage rate object to be inserted into array of policy rate object */
CoverageRate covrObj = new CoverageRate(1,
"HMS",
30,
5,
new BigDecimal(0),
null,
null,
new BigDecimal(0),
new BigDecimal(0),
0,
0);
/* Create an array */
System.out.println("Creating descriptor...");
ArrayDescriptor adesc = new ArrayDescriptor(CoverageRate._SQL_ARRAY_NAME,conn);
System.out.println("Created descriptor!");
Object [] covrArray = new Object[1];
covrArray[0] = covrObj;
System.out.println("Creating oracle array..");
ARRAY arr = new ARRAY(adesc,conn,covrArray);
System.out.println("Created array!!");
/* Create policy rate object */
PolicyRate prate = new PolicyRate ("TESTTRA",
"TRS",
TUDate.convertToSql("2003","08","27"),
TUDate.convertToSql("2004","06","25"),
TUDate.convertToSql("2004","06","29"),
"NEW",
1,
new BigDecimal(0),
new BigDecimal(0),
null);
/* Add coverage rate object to array -- assume array only has one element for timebeing */
System.out.println("Setting arr in policyrate...");
prate.setRates(arr);
System.out.println("Creating array.sql.ARRAY for covrObj..");
prate.setRates(new oracle.sql.ARRAY(adesc,conn,covrObj));
System.out.println("Created array.sql.ARRAY for covrObj..");
/* Setup statemenet object */
cstmt = (OracleCallableStatement) conn.prepareCall("{call dbpckg_rate_obj.p_rate_obj_calc_rate(?)}");
/* Bind variables to statement */
System.out.println("Setting policyrate object...");
cstmt.setObject(1,prate,OracleTypes.STRUCT);
System.out.println("Registering out object...");
cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.STRUCT,PolicyRate._SQL_NAME);
cstmt.execute();
/* Retrieve the object back */
System.out.println("Getting policy rate object back...");
prate = (PolicyRate) cstmt.getObject(1);
System.out.println("Object Retrieved " + prate.getProductcode() + " " + prate.getAgentcode());
/* Close database connection */
conn.close();
catch (Exception exc) {
System.out.println("EXC: testPolicyRate(): " + exc);
exc.printStackTrace();
if (conn != null)
conn.close();
finally {
if (conn != null)
conn.close();
I've opened up a tar through metalink hopefully they can help get past this error...:)
Gurinder -
Conversion of java Array to oracle SQL Array while calling Stored Procedure
How java Array can be converted to oracle SQL array while calling Stored procedure with callable statement.
i.e java Array ---> Sql Array in Oracle while setting the datatypes to callable statement arguments.Look at:
http://forum.java.sun.com/thread.jsp?forum=48&thread=376735&tstart=0&trange=15
Paul -
Oracle SQL*Net and TNS Protocol
I need to get technical documents on Oracle SQL*Net and TNS Proticol, down to the bit-level definition. I have talked to serveral people in Oracle Documentation, Sales and Tech Support, but no one could give me any clue so far. Any one can help me on this?
SQL*Net is installed by default with SQL*Plus and any of the clients (OEM uses the JDBC OCI driver and some native connectivity).
It is likely that the version of the client you have installed is not one that TOAD can work with or it can't find the client (is the Oracle home/bin directory in the path?) -
Oracle.sql.STRUCT cannot be cast to oracle.sql.STRUCT
I met a problem,I use oracle spatial to store geometry,then get it like this:
STRUCT dbObject = (oracle.sql.STRUCT)rs.getObject("shape");
JGeometry geom = JGeometry.load(dbObject);
tomcat 6 told me java.lang.ClassCastException: oracle.sql.STRUCT cannot be cast to oracle.sql.STRUCT
does everyone knows this problem?thanks
Edited by: 811014 on 2010-11-13 下午9:28
Edited by: 811014 on 2010-11-13 下午9:28Hi, this is a known problem for most Spatial 10g Java APIs with WLS.
WLS is only certified with 11g DB.
Instead of using Weblogic JNDI Lookup for Datasource, try the following snippet to create your connection/datasource (with Oracle JDBC thin driver):
String databaseUrl = jdbc:oracle:thin:@1.2.3.4:1521:yourdbname
String databaseUser = dbusername
String databasePassword = dbpassword
DriverManager.registerDriver(new OracleDriver());
Connection aConnection = DriverManager.getConnection(databaseUrl, databaseUser, databasePassword);
For more information, see the following:
Classcast Exception while using Oracle ARRAYs
regards,
jack -
I am using oracle as database and weblogic 4.5. I have copied the classes12.zip file in lib directory of weblogic. I am getting the error that oracle.sql.* and oracle.jdbc.driver.* not found when i am importing these packages in a jsp file. what i need to do to import oracle driver packages?I put it in the classpath also.
Please Advice!
Thanks in advance
AnuPamaHi Anupama,
First of all I would be surprised if you would not like to use the connection pooling feature of weblogic (in which case you might not be needing the import the classes directly), and would like to open direct connections to your database. Anyways for doing that I would recommend you to check out the readme doc that ships
along with the jdbc oracle (classes12.zip etc). I am giving an excerpt over here:
These are a few simple things that you should do in your JDBC program:
1. Import the necessary JDBC classes in your programs that use JDBC.
For example:
import java.sql.*;
import java.math.*;
2. Register the Oracle driver before before calling other JDBC APIs.
(This is not needed if you are using the JDBC Server-side Internal
Driver because registration is done automatically in the server.)
To register the Oracle driver, make sure the following statement
is executed at least once in your Java session:
DriverManager.registerDriver(
new oracle.jdbc.driver.OracleDriver());
3. Open a connection to the database with the getConnection call.
Different connection URLs should be used for different JDBC
drivers. The following examples demonstrate the different URLs.
For the JDBC OCI8 Driver:
Connection conn = DriverManager.getConnection(
"jdbc:oracle:oci8:@<database>",
"scott", "tiger");
where <database> is either an entry in tnsnames.ora or a SQL*net
name-value pair.
For the JDBC Thin Driver, or Server-side Thin Driver:
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@<database>",
"scott", "tiger");
where <database> is either a string of the form
<host>:<port>:<sid> or a SQL*net name-value pair.
For the JDBC Server-side Internal Driver:
Connection conn = DriverManager.getConnection(
"jdbc:oracle:kprb:");
Note that the trailing ':' character is necessary. When you use
the Server-side Internal Driver, you always connect to the
database you are executing in. You can also do this:
Connection conn
= new oracle.jdbc.driver.OracleDriver().defaultConnection();
Hope this helps,
Thanks,
Anupama wrote:
I am using oracle as database and weblogic 4.5. I have copied the classes12.zip file in lib directory of weblogic. I am getting the error that oracle.sql.* and oracle.jdbc.driver.* not found when i am importing these packages in a jsp file. what i need to do to import oracle driver packages?I put it in the classpath also.
Please Advice!
Thanks in advance
AnuPama--
Apurb Kumar -
Issue with Oracle.sql.NUMBER in Java Stored Procedure
When we try to make a call to the Oracle.sql.NUMBER(String) inside a java stored procedure and pass values from '01' to '09', it throws java.lang.StringIndexOutOfBoundsException: String index out of range: 3
We use Oracle 9.2.0.6 - JServer Release 9.2.0.6.0.
It works fine for other values. Please find below the code used for simulating the issue outside the application. Thanks.
create or replace and compile java source named testNumber as
import oracle.sql.NUMBER;
import java.sql.SQLException;
public class TestNumber
public static String convertNumber(String parm) {
NUMBER nTest;
try {
nTest = new NUMBER(parm);
return "TRUE";
}catch (SQLException sqle) {
return "FALSE";
create or replace function test_number (p_str in varchar2) return varchar2 as
language Java name 'TestNumber.convertNumber(java.lang.String) return
java.lang.String';
select test_number('05') from dual; - Throws exception ORA-29532: Java call terminated by uncaught Java exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 3
select test_number('5') from dual; - Works fine
select test_number('010') from dual; - Works fineSiva,
I'm only guessing, but it could be an Oracle bug, in which case I suggest checking with Oracle Support.
(You do have a support contract, don't you? ;-)
Did you try compiling and running your java class "TestNumber" outside the database?
Class "oracle.sql.NUMBER" should be in Oracle's JDBC driver, I believe.
Good Luck,
Avi. -
[ask] about oracle sql injection and escalation
Hello,i'm student , i'm studying oracle,now i want to research about oracle sql injection,i had read some tuttorial such as *'Hacking Oracle From Web,Advanced SQL Injection In Oracle Databases,Oracle Hacker HandBook ...'* but when i try to demo on localserver (11.0.1.6) but not run,and this is my demo
-- first,i created table users
create table users (name nvarchar2(50),pass nvarchar2(50))
-- then i created procedure with system user
create or replace procedure system.adduser(u nvarchar2,p nvarchar2)
as
begin
insert into users values(u,p);
end;
-- grant execute privilege to oc user
grant execute on adduser to oc
-- login with user oc and create a procedure
create or replace procedure sqli
as
begin
execute immediate 'grant dba to oc';
end;
-- and then,i run system's procedure
declare
begin
system.adduser('admin','admin'' ; execute immediate ''declare begin sqli() end;');
end;
i hope oracle master help me to i can understand and improving my knowledge
ThanksThe best forum for this is probably Forum Home » Java » SQLJ/JDBC
Presumably you are refering to oracle.sql.TIMESTAMP. While this is intended to (and does) correspond to java.sql.Timestamp it can't be a subclass because it needs to be a subclass of oracle.sql.Datum. -
Oracle sql developer and access db
Hi All,
I have connection to oracle and Access dbs’ on my oracle sql developer.
When i try to create a database link from oracle db to access db i have to add Host Name.
Connection details to access looks like this :
@jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\ list.mdb;DriverID=22;READONLY=false}
I tried different variants, but it doesn’t work.
Is this possible to create database link to access db, and if yes, what i have to add for a host name and what is the syntaxes for cross table ?
Thank youGood documentation here... http://www.orafaq.com/node/60
TimS -
Oracle SQL Developper and SQL Server Connection
Hello
I try to connect to a SQL Server 2005 Database under Oracle SQl Developper but I always obtain this error :
oracle.jdeveloper.cm.CMException: Unable to find driver: net.sourceforge.jtds.jdbc.Driver
at oracle.dbtools.raptor.conntypes.RaptorConnectionWrapper.createConnection(RaptorConnectionWrapper.java:164)
at oracle.dbtools.raptor.conntypes.RaptorConnectionWrapper.getJdbcConnection(RaptorConnectionWrapper.java:191)
at oracle.dbtools.raptor.conntypes.RaptorConnectionWrapper.getPresentation(RaptorConnectionWrapper.java:66)
at oracle.dbtools.raptor.utils.Connections$ConnectionInfo.createConnection(Connections.java:781)
at oracle.dbtools.raptor.utils.Connections$ConnectionInfo$ConnectRunnable.doWork(Connections.java:654)
at oracle.ide.dialogs.ProgressRunnable.run(ProgressRunnable.java:159)
at oracle.ide.dialogs.ProgressBar.run(ProgressBar.java:553)
at java.lang.Thread.run(Thread.java:595)
I download the jtds driver. Where should I extract it on SQL Developper Folder.
Thanks a lot
Best regards
StéphaneHello!
Download jTDS - SQL Server and Sybase JDBC driver from http://sourceforge.net/project/showfiles.php?group_id=33291
In Oracle SQL Developer open Tools -> Preferences
Database -> Third Party JDBC Drivers
Add Entry
Browse the unzipped driver and add the jtds-1.2.jar file
emeriqus
Maybe you are looking for
-
Hi My printer HP Laserjet P1006 had been working fine until today. It shows the message : "You need to install software to use this printer. To install the software, choose Software Update from the Apple menu. If the software for your printer isn't a
-
That's all I know. I've followed the directions for restoring them and nothing works.
-
Adobe elements 10 and Mac OS x 10
So...I got the Photoshop Elements 10 discs for my Mac. I put it in to install it, and it says I have to pick the application for it to open in. I can't find instructions ANYWHERE, and so I'm stuck. Is there a step-by-step instructional to tell me
-
Where is mini TOC and Resource drop-down?
This is really silly, but I can't figure out why I don't see the Resource links I've defined in my AIR Single Source Layout when I view the output. Even worse, I don't see where you specify a mini TOC in the Single Source Layout properties. Help. (
-
Class Compilation Error in Upgrade
Hello, I have upgraded classes written in 4.6c to ECC 6.0 and receive a compilation error saying: 'INCLUDE report "Z_CLASS_ NAME========CL" not found' Here the name of the public class is "Z_CLASS_NAME". Any clues as to how to resolve this error? Tha