Catching java.sql.SQLException:
ok this might be a stupid question
but say i had a dataTable populated by a resultSet,
when i update the dataTable how i can catch the java.sql.SQLException's being thrown
i.e the PK exception
i know i could catch it in the web.xml but was wondering if i can catch it in my bean?
Oh boy. You may want to go back and take Sun's exception tutorial. It's a fundamental concept. That having been said:
String sql = "some spiffy SQL goes here";
Connection conn = null; // initialize in a spiffy way
PreparedStatememt stmt = null;
try {
stmt = conn.prepareStatement(sql);
stmt.executeUpdate(); // assume an exception will be thrown
catch (SQLException e) {
e.printStackTrace(); // handle error processing
finally {
// ensure all resources are released regardless of success or failure
if (stmt != null) try { stmt.close(); } catch (SQLException ignore) { ignore.printStackTrace() }
if (conn != null) try { conn.close(); } catch (SQLException ignore) { ignore.printStackTrace() }
}- Saish
Similar Messages
-
Java.sql.SQLException: Fail to convert between UTF8 and UCS2: failUTF8Conv
Hi all,
I am writing a servlet that connects to Oracle 8.0.6 through jdbc for jdk1.2 on NT 4.0
English version and it works fine.
But when the servlet is deployed to a solaris with Oracle 8.0.5 (not a typo, the oracle on
NT is 8.0.6 and oracle on solaris is 8.0.5) and jdbc for jdk1.2 (of course, for Solaris),
the servlet failed with the Exception:
java.sql.SQLException: Fail to convert between UTF8 and UCS2: failUTF8Conv
(I am using JRun 3.0 as the application and web server for both NT and Solaris)
(The database in both the NT and solaris platform are using UTF8 charset)
My servlet looks like this: (dbConn is a Connection object proved to be connected to Oracle
in previous segment of the same method):
String strSQL = "SELECT * FROM test";
try { Statement stmt = dbConn.createStatement();
ResultSet rs = stmt.execute(strSQL);
while (rs.next()) {
out.println("id = " + rs.getInt("id"));
System.out.println("id written");
out.println("name = " + rs.getString("name")); // <-- this is the line the
exception is thrown
System.out.println("name written");
} catch (java.sql.SQLException e) {
System.out.println("SQL Exception");
System.out.println(e);
The definition of the "test" table is:
create table test(
id number(10,0),
name varchar2(30));
There are about 10 rows exists in the table "test", in which all rows contains ONLY chinese
characters in the "name" field.
And when I view the System log, the string "id written" is shown EXACTLY ONCE and then there
is:
SQL Exception
java.sql.SQLException: Fail to convert between UTF8 and UCS2: failUTF8Conv
That means the resultset is fetch back from the database correctly. The problem arise only
during the getString("name") method.
Again, this problem only happens when the servlet is run on the solaris platform.
At first I would expect there are some strange code shown on the web page rather than having
an exception. I know that I should use getBytes to convert between different encodings, but
that's another story.
One more piece of information: When all the rows contains ascii characters in their "name"
field, the servlet works perfectly even in solaris.
If anyone knows why and how to tackle the problem please let me know. You can feel free to
send email to me at [email protected]
Many thanks,
Ben
nullHi all,
For the problem I previously posted, I found that Oracle had had such bug filed before in Oracle 7.3.2 (something like that) and is classified to be NOT A BUG.
A further research leads me to the document of Oracle that the error message:
"java.sql.SQLException: Fail to convert between UTF8 and UCS2: failUTF8Conv"
is a JDBC driver error message of error number ORA-17037.
I'm still wondering why this behaviour will happen only in Solaris platform. The servlet on an NT machine I am using (which has an Oracle 8.0.6 and jdbc for jdk 1.2 running) is working just fine. I also suspect that this may be some sort of mistakes from jdbc driver.
Nevertheless, I have found a way to work around the problem that I cannot get non-English string from Oracle in Solaris and I would like to share it with you all here.
Before I go on, I found that there are many people out there on the web that encounter the same problem. (Some of which said s/he has been working on this problem for a month). As a result, if you find this way of working around the problem does help you, please tell those who have the same problem but don't know how to tackle. Thanks very much.
Here's the way I work it out. It's kinda simple, but it does work:
Instead of using:
String abc = rs.getString("SomeColumnContainsNonEnglishCharacters");
I used this:
String abc = new String(rs.getBytes("SomeColumnContainsNonEnglishCharacters"));
This will give you a string WITH YOUR DEFAULT CHARSET (or ENCODING) from your system.
If you want to convert the string read to some other encoding type, say Big5, you can do it like this:
String abc = new String(rs.getBytes("SomeColumneContainsNonEnglishCharacters"), "BIG5");
Again, it's simple, but it works.
Finally, if anyone knows why the fail to convert problem happens, please kindly let me know by leaving a word in [email protected]
Again, thanks to those of you who had tried to help me out.
Creambun
<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by creambun creambun ([email protected]):
Hi all,
I am writing a servlet that connects to Oracle 8.0.6 through jdbc for jdk1.2 on NT 4.0
English version and it works fine.
But when the servlet is deployed to a solaris with Oracle 8.0.5 (not a typo, the oracle on
NT is 8.0.6 and oracle on solaris is 8.0.5) and jdbc for jdk1.2 (of course, for Solaris),
the servlet failed with the Exception:
java.sql.SQLException: Fail to convert between UTF8 and UCS2: failUTF8Conv
(I am using JRun 3.0 as the application and web server for both NT and Solaris)
(The database in both the NT and solaris platform are using UTF8 charset)
My servlet looks like this: (dbConn is a Connection object proved to be connected to Oracle
in previous segment of the same method):
String strSQL = "SELECT * FROM test";
try { Statement stmt = dbConn.createStatement();
ResultSet rs = stmt.execute(strSQL);
while (rs.next()) {
out.println("id = " + rs.getInt("id"));
System.out.println("id written");
out.println("name = " + rs.getString("name")); // <-- this is the line the
exception is thrown
System.out.println("name written");
} catch (java.sql.SQLException e) {
System.out.println("SQL Exception");
System.out.println(e);
The definition of the "test" table is:
create table test(
id number(10,0),
name varchar2(30));
There are about 10 rows exists in the table "test", in which all rows contains ONLY chinese
characters in the "name" field.
And when I view the System log, the string "id written" is shown EXACTLY ONCE and then there
is:
SQL Exception
java.sql.SQLException: Fail to convert between UTF8 and UCS2: failUTF8Conv
That means the resultset is fetch back from the database correctly. The problem arise only
during the getString("name") method.
Again, this problem only happens when the servlet is run on the solaris platform.
At first I would expect there are some strange code shown on the web page rather than having
an exception. I know that I should use getBytes to convert between different encodings, but
that's another story.
One more piece of information: When all the rows contains ascii characters in their "name"
field, the servlet works perfectly even in solaris.
If anyone knows why and how to tackle the problem please let me know. You can feel free to
send email to me at [email protected]
Many thanks,
Ben<HR></BLOCKQUOTE>
null -
Unreported exception; java.sql.SQLException; must be caught or declared to
Hi everyone,
For my Java course assignment we need to make a small application that uses a MS Access database. But de code below gives me a "Unreported exception; java.sql.SQLException; must be caught or declared to be thrown at line xx" error.
public class ConnectieBeheer
private static Connection con;
private static Statement stmt;
private static ResultSet res;
private static ResultSetMetaData md;
private ConnectieBeheer(){}
public static void openDB() {
Driver driver = new JdbcOdbcDriver();
Properties info = new Properties();
String url = "jdbc:odbc:theater";
con = driver.connect(url, info); <--- Error here
if (con != null)
stmt = con.createStatement(); <--- Error here
DatabaseMetaData dma = con.getMetaData(); <--- Error here
}So I tried this :
public static void openDB() throws SQLException {Now I do not get an error.
The OpenDB method is called from a different class like this :
public static void test1(){
ConnectieBeheer.openDB();
System.out.println("DB opened");
}But now it gives the same "Unreported exception; java.sql.SQLException; must be caught or declared to be thrown at line xx" error but now at the line ConnectieBeheer.openDB();
Why is this? And what can I do to correct this?
Thanks!
Steven.you should read the sun tutoriel about exceptions handling ;
there are two ways to handle an exception : either you redirects it (using "throws" statement, what you did for the openDB method), or you catch it using a try { ... } catch (Exception exc) {}
if you want to get rid of the error what you can do is :
public static void test1(){
try {
ConnectieBeheer.openDB();
} catch (java.sql.SQLException sqle) {
sqle.printStackTrace();
System.out.println("DB opened");
} -
Error...java.sql.SQLException:Access denied for user
Hi,
I am getting the following error message while connecting with the MySQL .(O/S :Sun OS 5.6)
Error.....java.sql.SQLException: Invalid authorization specification: Access denied for user: 'some_user&password@localhost' (Using password: NO)
Note that i have given all permission to the user using,
GRANT ALL PRIVILEGES .......................
The code i have used to connect with the database is,
import java.io.*;
import java.sql.*;
class test
public static void main(String a[])
try
Connection con;
Statement stmt;
ResultSet rs;
Class.forName("org.gjt.mm.mysql.Driver");
con=DriverManager.getConnection(jdbc:mysql://localhost/db_name?user=some_user&password=some_pass");
stmt=con.createStatement();
//do something with resultset
catch(Exception e)
System.out.println("Exception in second try.."+e);
plese guide me on this problem to solve.
Thankz,
Bala.Hi friends...
I've read the last post...
The problem that I have is as follow....
1. I have installed on my machine MySQL 5.0 Server running
1.1 I have a database called "base1"
1.2 User "root", password "works"
1.3 I have the following sentence to connect it using JDBC
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/base1", "root", "works");
More notes:
- I use the JDBC 5.0
- My Machine is a Windows XP SP2 Pentium 3.0 512Mb
and it connects����
but I have this environment to develop applications, now that I want to connect to Production Environment happens the following:
2 The Production database is mounted on a Linux Server with MySQL 3.2.
2.1 I change the sentences as follow:
Connection con = DriverManager.getConnection("jdbc:mysql://192.168.0.7/base1", "user", "password");
2.3 But a message appears when I run the Java Program:
java.sql.SQLException:Access denied for user: '[email protected]' (Using password: YES)
2.4 As you can see it changes the IP Address...
More notes:- I have the MySQL Query Browser and I got connection.
- The IP that display the Error Message is my Second IP configurated on my Network Properties.
- Server is a Pentium 4 3.0 GHz 2Gb Linux Red Hat 3.0
I leave this case for the spider... I hope that somebady has the solution.
What is the problem? Why the JDBC doesn't respect the IP that I wrote. -
Java.sql.SQLException: Error in allocating a connection
hi,
I have developed enterprise application using net beans IDE 5.5.I created one enity bean using sql server database.When i tried deploy this project i am getting following error...
Internal Exception: java.sql.SQLException: Error in allocating a connection.
Cause: Class name is wrong or classpath is not set for : com.microsoft.jdbc.sqlserver.SQLServerDataSourceError
can anybody please help me.....where i went wrong...i am new to netbeans IDE
regrds
patelu need to download the three jar files.
download the following jar files and add in ur classpath.
msutil-2000.sp2-lib.jar
msbase-2000.sp2-lib.jar
mssqlserver-2000.sp2-lib.jar
This is sample program...
u can test in standalone first and do in netbeans....
import java.sql.*;
public class querybean {
public String getdata(String sql) {
try {
System.out.println("testing connection ");
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=master;user=sa;password=userpass;");
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
System.out.println("testing connection pooling");
while(rs.next()) {
System.out.println(rs.getString(1));
} catch(Exception e1) {
System.out.println("exception caught" + e1);
return "";
public static void main (String args[]) throws Exception {
querybean qb = new querybean();
qb.getdata("select * from sampletable");
I belive it will work now -
I am getting Error! java.sql.SQLException:General error
hi every body,
I struck with this error , can any one suggest in solving this.
I had a table in oracledatabase ,i have successfully created a table and inserted clob column with an attachment like xxx.txt.
table format----> id and text columns
Now my question is to retrieve that data and store it in local disk i am getting this error
import java.io.*;
import java.sql.*;
//import java.sql.SQLException;
public class Cread {
public static void main(String[] args) throws ClassNotFoundException,IOException,SQLException {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=DriverManager.getConnection("jdbc:odbc:sivadsn","scott","tiger");
Statement s = cn.createStatement();
ResultSet rs=s.executeQuery("Select text from ram where id=10");
if(rs.next()){
FileOutputStream file=new FileOutputStream("c:/store.txt");
InputStream fin=rs.getBinaryStream(1);
int c;
while((c=fin.read())!=-1){
file.write(c);
fin.close();
s.close();
rs.close();
catch(IOException e){
e.printStackTrace();
System.out.println("Err:"+e);
I am getting the error as
java.sql.SQLException: General error
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(Unknown Source)Error! java.sql.SQLException: General error
at attach.Clobread.main(Clobread.java:30)That usually means something is wrong with the syntax of your sql.
As a guess 'text' is probably a keyword and shouldn't be used as a field name. It is possible that the same is true for 'id' -
Java.sql.SQLException: Invalid cursor position on saving
Dear all
I'm having a problem with saving components on a JSF page. The page is plit in two parts:
1. Save report details, which are being saved correctly. Here is the code
public String btnSaveReport_action() {
// TODO: Process the button click action. Return value is a navigation
// case name where null will return to the same page.
System.out.println("Saving the report ... forsi");
int seqNumber = SequenceNumber.getNextSequenceNo("TB_REPORTS");
getSessionBean1().setReportFK(seqNumber);
String reportId = "REP_" + ((String)tfReportName.getText()).replace(' ', '_').trim();
System.out.println("ReportFK in btnSaveReport: " + getSessionBean1().getReportFK());
//SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
System.out.println("Start Date: " + calRepStartDate.getSelectedDate());
//error(calRepStartDate.getValue().toString());
//System.out.println("getvalue" + calRepStartDate.getValue());
try {
rk = tb_reportsDataProvider.appendRow();
tb_reportsDataProvider.setCursorRow(rk);
System.out.println("Setting Values ...");
tb_reportsDataProvider.setValue("REP_PK", new Integer(seqNumber));
tb_reportsDataProvider.setValue("REP_ID", reportId);
tb_reportsDataProvider.setValue("REP_ACTIVE", "Y");
tb_reportsDataProvider.setValue("REP_SESSION_FK", new Integer(getSessionBean1().getSessionId()));
tb_reportsDataProvider.setValue("REP_NAME", (String)tfReportName.getText());
tb_reportsDataProvider.setValue("REP_START_DATE", new java.sql.Date(calRepStartDate.getSelectedDate().getTime()));
tb_reportsDataProvider.setValue("REP_END_DATE", new java.sql.Date(calRepEndDate.getSelectedDate().getTime()));
System.out.println("Committing Changes ...");
tb_reportsDataProvider.commitChanges();
System.out.println("Refreshing Row ...");
tb_reportsDataProvider.getCachedRowSet().refreshRow();
getSessionBean1().getTb_reportsRowSet().refreshRow();
// tb_reportsDataProvider.refresh();
// System.out.println("Refreshing Row ...");
// tb_reportsDataProvider.setCursorRow(tb_reportsDataProvider.findFirst("REP_PK",new Integer(seqNumber)));
info("Report Data Saved Successfully!");
} catch (SQLException sqle) {
/* error("Cannot update report (SQLException): " +
reportId +
" : " + sqle.getMessage()); */
log("Cannot update report (SQLException): " +
reportId +
" : " + sqle);
info("Could not save report: " + sqle.getMessage());
sqle.printStackTrace();
//tfReportName.setValueBinding("sourceData", getApplication().
// createValueBinding("#{newReport.tb_reportsDataProvider}"));
//tfReportName.setValueBinding("text", getApplication().createValueBinding ("#{newReport.tb_reportsDataProvider.value['REP_NAME']}"));
// calRepStartDate.setValueBinding("sourceData", getApplication().
// createValueBinding("#{newReport.tb_reportsDataProvider}"));
//calRepStartDate.setValueBinding("selectedDate", getApplication().createValueBinding ("#{newReport.tb_reportsDataProvider.value['REP_START_DATE']}"));
//calRepEndDate.setValueBinding("sourceData", getApplication().
// createValueBinding("#{newReport.tb_reportsDataProvider}"));
//calRepEndDate.setValueBinding("selectedDate", getApplication().createValueBinding ("#{newReport.tb_reportsDataProvider.value['REP_END_DATE']}"));
info("Report Name: " + tb_reportsDataProvider.getValue("REP_NAME"));
tfReportName.validate(this.getFacesContext());
calRepStartDate.validate(this.getFacesContext());
calRepEndDate.validate(this.getFacesContext());
tfReportName.setDisabled(true);
calRepStartDate.setDisabled(true);
calRepEndDate.setDisabled(true);
btnNewQuery.setDisabled(false);
btnSaveReport.setDisabled(true);
return null;
}The problem is that the reportFK is losing its value when I submit the page the second time! I am trying to get the value from the provider or from the rowset, but none work. Here is the code I am trying ...
public String btnSaveQuery_action() {
// TODO: Process the button click action. Return value is a navigation
// case name where null will return to the same page.
int seqNumber = 0;
// Save the query header details to the database
try {
// Start with the query - needed for the link table
seqNumber = SequenceNumber.getNextSequenceNo("TB_QUERY");
String queryId = "QRY_" + ((String)tfQueryName.getText()).replace(' ', '_').trim();
tb_queryDataProvider.setCursorRow(queryRowKey);
tb_queryDataProvider.setValue("QRY_PK", new BigDecimal(seqNumber));
tb_queryDataProvider.setValue("QRY_CODE", queryId);
tb_queryDataProvider.setValue("QRY_NAME", (String)tfQueryName.getText());
tb_queryDataProvider.setValue("QRY_ACTIVE", "Y");
tb_queryDataProvider.setValue("QRY_SESS_FK", new BigDecimal(getSessionBean1().getSessionId()));
System.out.println("Committing Changes ...");
tb_queryDataProvider.commitChanges();
System.out.println("Refreshing Row ...");
tb_queryDataProvider.setCursorRow(tb_queryDataProvider.findFirst("QRY_PK",new Integer(seqNumber)));
getSessionBean1().getTb_queryRowSet().refreshRow();
info("Query Data Saved Successfully!");
} catch (Exception ex) {
error("Error while saving query: " + ex.getMessage());
log("Error while saving query" + ex);
ex.printStackTrace();
// Now save the link
try {
// Start with the query - needed for the link table
String sql = "INSERT INTO TB_LINK_REPORT_QUERY ( " +
"LRQ_PK, LRQ_REP_FK, LRQ_QRY_FK, " +
"LRQ_TYPE, LRQ_START_DATE, LRQ_END_DATE, " +
"LRQ_ACTIVE, LRQ_SESS_FK) " +
"VALUES (?,?,?,?,?,?,?,?)";
System.out.println("Trying to do the link");
int linkSeqNumber = SequenceNumber.getNextSequenceNo("TB_LINK_REPORT_QUERY");
PreparedStatement pstmt = DBConnection.getConnection().prepareStatement(sql);
if (getSessionBean1().getReportFK() == -1 || getSessionBean1().getReportFK() == 0)
System.out.println("reportFK = -1 or 0!!! Trying from provider.");
System.out.println("Report PK is: " + getSessionBean1().getTb_reportsRowSet().getBigDecimal("REP_PK"));
getSessionBean1().setReportFK(((Integer)tb_reportsDataProvider.getValue("REP_PK")).intValue());
System.out.println("Report Foreign Key: " + getSessionBean1().getReportFK());
System.out.println("Query Foreign Key: " + seqNumber);
pstmt.setInt(1, linkSeqNumber);
pstmt.setInt(2, getSessionBean1().getReportFK());
pstmt.setInt(3, seqNumber);
pstmt.setString(4, (String)dropDownQueryType.getSelected());
pstmt.setDate(5, new java.sql.Date(calendarQueryStartDate.getSelectedDate().getTime()));
pstmt.setDate(6, new java.sql.Date(calendarQueryEnd.getSelectedDate().getTime()));
pstmt.setString(7, "Y");
pstmt.setInt(8, getSessionBean1().getSessionId());
System.out.println("Committing Changes for Link ...");
pstmt.executeUpdate();
DBConnection.getConnection().commit();
System.out.println("Refreshing Row in link ...");
getSessionBean1().getTb_link_report_queryRowSet().setObject(
1, new Integer(linkSeqNumber));
getSessionBean1().getTb_link_report_queryRowSet().setObject(
2, new Integer(getSessionBean1().getReportFK()));
getSessionBean1().getTb_link_report_queryRowSet().setObject(
3, calendarQueryStartDate.getSelectedDate());
getSessionBean1().getTb_link_report_queryRowSet().setObject(
4, calendarQueryEnd.getSelectedDate());
tb_link_report_queryDataProvider.refresh();
info("Link Data Saved Successfully!");
} catch (Exception ex) {
error("Error while saving query: " + ex.getMessage());
log("Error while saving link: " + ex);
ex.printStackTrace();
return null;
}The part saving the query with the provider is working correctly. But the part with the link is not working at all (the part with the PreparedStatement). The fact is that the PreparedStatement cannot be executed because I am getting the error at the line
System.out.println("Report PK is: " + getSessionBean1().getTb_reportsRowSet().getBigDecimal("REP_PK"));Can anyone help please?
Thanks and Regards
Josephguys if any of you have an idea just post it. It would be of great help for me. I can't figure out my mistake and its been 2days already and still i am stuck with my problem.
It displays the table but there is an error "java.sql.SQLException: Invalid cursor position" so i cannot put the counter to the session. -
in a servlet, I have a class like:
class mydb
public static Connection conn;
public static void init() throws SQLException
// Load the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection ("jdbc:oracle:oci8:@baby", "scott", "tiger");
public static String getValue() throws SQLException
String curValue="";
// Create a Statement
Statement stmt = conn.createStatement ();
// Select the ENAME column from the EMP table
ResultSet rset = stmt.executeQuery ("select ENAME from EMP");
// Iterate through the result and print the employee names
if (rset.next ())
curValue = rset.getString (1);
// Close the RseultSet
rset.close();
// Close the Statement
stmt.close();
return(curValue);
public static void destroy() throws SQLException
// Close the connection
conn.close();
but when it is called, errors "java.sql.SQLException; must be caught or declared to be thrown." encountered, how to solve this problem? please help.This is part of the Java language.
If a method throws an exception, then
it is telling you that the exception is
something that you should be aware of.
If you call a method which throws this exception, then the method must either catch this exception, or you may decide that this exception should be caught by the calling method.
So, your choices are:
1. Wrap the method call in a try{...} catch block
-or-
2. Change the (calling) method's signature to reflect the fact that this method can cause this exception to be thrown (add a 'throws SQLException' ) at end of signature.
-John
null -
Java.sql.SQLException: Statement cancelled, probably by transaction timing
Hi all,
I have a problem with transaction handling over 2 applications. I have 2 EAR files (*A.ear* and B.ear) which are deployed on a WLS 12.1. The WLS contains a XA datasource which is connected to a Oracle XE database. Both applications are using the same datasource. The datasource is configured to use the driver oracle.jdbc.xa.client.OracleXADataSource.
EAR A contains a Remote EJB which is is calling a local EJB. The local EJB calls a Remote EJB from EAR B.
Here is an example how the code looks like:
@Remote
@Stateless(mappedName = "AnyRemote", name = "AnyRemote")
public class AnyRemoteBean implements AnyRemote {
@EJB
private AnyLocal anyLocal;
@Override
public void doIt() {
anyLocal.doSomething();
@Local
@Stateless(mappedName = "AnyLocal", name = "AnyLocal")
public class AnyLocalBean implements AnyLocal {
@PersistenceContext(unitName = "A")
private EntityManager entityManager;
@EJB(mappedName = "AnyCompositeService")
private AnyCompositeService anyCompositeService;
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean doSomething() {
try {
// do some stuff and save to database within another local EJB
anyCompositeService.doSomethingOnEAR_B();
return true;
} catch (final AnyException e) {
LOGGER.error("doSomething failed", e);
return false;
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean stayOnEar_A() {
// do some stuff and save to database within another local EJB
return true;
}AnyCompositeService located in EAR B looks like this:
@Remote
@Stateless(mappedName = "AnyCompositeService ", name = "AnyCompositeService ")
public class AnyCompositeServiceBean implements AnyCompositeService {
@Override
public boolean doSomethingOnEAR_B() throws AnyException {
// do some calls to some local EJBs and some other remote EJBs and save something to database
return true;
}In this process of EAR B I'm using the entitiy manager:
@PersistenceContext(unitName = "B")
private EntityManager entityManager;persistence.xml for EAR A looks like this
<persistence-unit name="A" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>MyDatasource</jta-data-source>
<!-- some entities -->
<properties>
<property name="hibernate.transaction.jta.platform"
value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
<property name="hibernate.connection.charSet" value="UTF-8" />
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.default_batch_fetch_size" value="20" />
</properties>
</persistence-unit>
</persistence>persistence.xml for EAR B looks like this
<persistence-unit name="B" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>MyDatasource</jta-data-source>
<!-- some entities -->
<properties>
<property name="hibernate.transaction.jta.platform"
value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
<property name="hibernate.connection.charSet" value="UTF-8" />
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.default_batch_fetch_size" value="20" />
</properties>
</persistence-unit>
</persistence>As you can see the method doSomething() defines the transaction attribute TransactionAttributeType.REQUIRES_NEW.
When I execute AnyRemote.doIt() I get the following exception:
Caused By: java.sql.SQLException: Statement cancelled, probably by transaction timing out
at weblogic.jdbc.wrapper.Statement.postInvocationHandler(Statement.java:69)
at weblogic.jdbc.wrapper.PreparedStatement_oracle_jdbc_driver_OraclePreparedStatementWrapper.clearBatch(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy452.clearBatch(Unknown Source)
at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.releaseStatements(AbstractBatchImpl.java:163)
at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.release(AbstractBatchImpl.java:197)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:139)
at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.close(TransactionCoordinatorImpl.java:276)
at org.hibernate.internal.SessionImpl.close(SessionImpl.java:349)
at org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:137)
at weblogic.persistence.TransactionalEntityManagerProxyImpl.close(TransactionalEntityManagerProxyImpl.java:117)
at weblogic.persistence.BasePersistenceContextProxyImpl$PersistenceContextCloser.afterCompletion(BasePersistenceContextProxyImpl.java:213)
at weblogic.transaction.internal.ServerSCInfo.doAfterCompletion(ServerSCInfo.java:1068)
at weblogic.transaction.internal.ServerSCInfo.callAfterCompletions(ServerSCInfo.java:1012)
at weblogic.transaction.internal.ServerTransactionImpl.callAfterCompletions(ServerTransactionImpl.java:3074)
at weblogic.transaction.internal.ServerTransactionImpl.afterRolledBackStateHousekeeping(ServerTransactionImpl.java:2954)
at weblogic.transaction.internal.ServerTransactionImpl.setRolledBack(ServerTransactionImpl.java:2930)
at weblogic.transaction.internal.ServerTransactionImpl.globalRetryRollback(ServerTransactionImpl.java:3172)
at weblogic.transaction.internal.ServerTransactionImpl.globalRollback(ServerTransactionImpl.java:2920)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:374)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:268)
at weblogic.ejb.container.internal.BaseLocalObject.postInvoke1(BaseLocalObject.java:332)
at weblogic.ejb.container.internal.BaseLocalObject.__WL_postInvokeTxRetry(BaseLocalObject.java:202)
at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:44)As long as the process only calls EJBs from EAR A only there is no issue. But if the process calls the method doSomethingOnEAR_B() on EAR B the call fails with above exception. If the process throws AnyException the rollback takes place as expected for transaction in EAR B and EAR A.
Does anybody know what is the issue here? Is there any configuration I have overseen?That is a WLS internal message. The statement did get cancelled,
probably as a part of the process of rolling back the transaction it
was involved in. If you don't find your core problem, open an
Oracle support SR, and we could help debug this further. -
Java.sql.SQLException: Io exception: End of TNS data channel
Hello folks,
Has amyone encountered this exception? If so, could you please shed some light for what might be going wrong?
Here is my confuguration:
400MB RAM
1.2GHTz processor
Win2K Pro
Oracle server 9.0.1
JDBC Thin driver (libs for 9.0.1)
Scenario:
My Java code uses Oracle Spatial to insert SDO_GEOMETRY objects into my DB model.
I have a config file where I store my connection properties, e.g.,
<DBConnection name="twatest">
<JDBCDriver>oracle.jdbc.driver.OracleDriver</JDBCDriver>
<URL>jdbc:oracle:thin:@saturn:1521:saturn</URL>
<Username>user1</Username>
<Password>twatest</Password>
</DBConnection>
We have 2 schemas defined: user1 and twatest.
The problem first occured when I switched from user1 to twatest. Consequent attempt to run the process as user user1 failed! The Java SQL statements do not use schemas (so they default, I suppose, to the default schema for that particular user, in our case being user1-->user1, twatest-->twatest).
The problem happens in the following Java class (search for "HERE" to see where exactly the problem occurs):
package com.vividsolutions.twatest;
import java.util.*;
import java.sql.*;
import oracle.sql.*;
import oracle.sdoapi.OraSpatialManager;
import oracle.sdoapi.geom.*;
import oracle.sdoapi.adapter.*;
import oracle.sdoapi.sref.*;
import com.vividsolutions.twatest.parser.*;
import com.vividsolutions.twatest.config.*;
import com.vividsolutions.twatest.model.*;
* This class is responsible for loading lakes into the SDO Oracle Spatial DB.
public class LakeLoader
static boolean initialized = false;
private static GeometryFactory gF;
private static SRManager srManager;
private static SpatialReference sref;
private static GeometryAdapter sdoAdapter;
public static void loadLake(EdgedLake slake, Connection conn) throws Exception {
com.vividsolutions.jts.geom.Envelope e = slake.getEnvelope();
if (e == null) {
System.out.println("Invalid envilope (feature ID="+slake.getFeatureId()+")! Ignoring...");
return; // ignore lake - it's invalid (no envilope)
if (!initialized) {
initialize(conn);
initialized = true;
Geometry geom;
STRUCT str;
// insert Lake
String lakeQuery = "INSERT INTO lake " +
"(lake_id, area, bounding_box, name, instantiation_date) " +
"VALUES(?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(lakeQuery);
int lakeId = getId(Lake.ID, conn);
ps.setInt(1, lakeId);
ps.setDouble(2, Double.parseDouble(slake.getArea()));
// Creates a 2-D rectangle (special case of Polygon geometry).
geom = gF.createRectangle(e.getMinX(), e.getMinY(), e.getMaxX(), e.getMaxY());
ps.setObject(3, sdoAdapter.exportGeometry(STRUCT.class, geom));
ps.setString(4, slake.getName());
ps.setTimestamp(5, new Timestamp(new java.util.Date().getTime()));
ps.executeUpdate(); // <-- HERE I got: java.sql.SQLException: Io exception: End of TNS data channel
//ps.close();
String ringQuery = null;
int ringId = 0;
List shellEdges = slake.getShellEdges();
if (shellEdges != null && shellEdges.size() > 0) { // if there is valid shell, insert it...
// insert shell Rings
ringQuery = "INSERT INTO ring (ring_id, lake_id, type) VALUES(?,?,?)";
ps = conn.prepareStatement(ringQuery);
ringId = getId(Ring.ID, conn);
ps.setInt(1, ringId);
ps.setInt(2, lakeId);
ps.setString(3, Ring.SHELL);
ps.executeUpdate();
//ps.close();
// insert shell ring Edges
insertEdges(shellEdges, lakeId, Ring.SHELL, ringId, conn);
List holeEdges = slake.getHoleEdges();
if (holeEdges != null && holeEdges.size() > 0) { // if there are valid holes, insert them...
// insert hole Rings
ringQuery = "INSERT INTO ring (ring_id, lake_id, type) VALUES(?,?,?)";
ps = conn.prepareStatement(ringQuery);
ringId = getId(Ring.ID, conn);
ps.setInt(1, ringId);
ps.setInt(2, lakeId);
ps.setString(3, Ring.HOLE);
ps.executeUpdate();
//ps.close();
// insert hole ring Edges
insertEdges(holeEdges, lakeId, Ring.HOLE, ringId, conn);
ps.close();
private static void insertEdges(List edges, int lakeId, String ringType,
int ringId, Connection conn) throws Exception {
if (!initialized) {
initialize(conn);
initialized = true;
Geometry geom;
STRUCT str;
// insert shell ring Edges
String edgeQuery = "INSERT INTO edge " +
"(edge_id, lake_id, ring_type, ring_id, edge_sequence, shape) " +
"VALUES(?,?,?,?,?,?)";
int edge_sequence = 0;
for (Iterator it=edges.iterator(); it.hasNext(); ) {
Edge edge = (Edge)it.next();
geom = gF.createLineString(LakeFactory.edgeToArray2D(edge)); // 2-dimensional coordinates
PreparedStatement ps = conn.prepareStatement(edgeQuery);
int edgeId = getId(Edge.ID, conn);
ps.setInt(1, edgeId);
ps.setInt(2, lakeId);
ps.setString(3, ringType);
ps.setInt(4, ringId);
ps.setInt(5, edge_sequence++);
ps.setObject(6, sdoAdapter.exportGeometry(STRUCT.class, geom));
ps.executeUpdate();
ps.close();
* @param key This can be: "lake", "ring", or "edge".
* @param conn The connection to use.
* @return the unique ID corresponding to the given key.
public static int getId(String key, Connection conn) {
int id = -1;
try {
String query = "SELECT "+key+"_SEQUENCE.NEXTVAL FROM DUAL";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
id = rs.getInt(1);
stmt.close();
} catch(SQLException sqle) {
sqle.printStackTrace();
return id;
private static void initialize(Connection conn) throws Exception {
gF = OraSpatialManager.getGeometryFactory();
// Set spatial reference system in which the geometries will be created
srManager = OraSpatialManager.getSpatialReferenceManager(conn);
sref = srManager.retrieve(8307);
gF.setSpatialReference(sref);
sdoAdapter = OraSpatialManager.getGeometryAdapter("SDO", "8.1.6",
null, STRUCT.class, null, conn);
public static void main(String args[]) throws Exception
String[] xmlLakeFiles = {
"lakes101to1400.xml",
"lakes1401to10000.xml",
"lakes10001to20000.xml",
"lakes20001to30000.xml",
"lakes30001to40000.xml",
"lakes40001to50000.xml",
"lakes50001to60000.xml"
PropertyManager pm = new PropertyManager();
int numberOfLoadedLakes = 0;
try {
pm.initialize();
Map modelMap = (Map)pm.get(XMLConfigFile.MODEL_MAP);
LakeModel lakeModel = (LakeModel)modelMap.get(LREConcreteLakeModel.NAME);
Connection connection = ConnectionManager.getConnection();
lakeModel.setConnection(connection);
for (int i=0; i<xmlLakeFiles.length; i++) {
long then = System.currentTimeMillis();
System.out.println("Loading lake "+xmlLakeFiles[i]+"...");
numberOfLoadedLakes = lakeModel.loadModel(xmlLakeFiles);
long now = System.currentTimeMillis();
System.out.println("Loaded "+numberOfLoadedLakes+" lakes!");
System.out.println("Execution time: "+(now-then)/1000+" seconds!");
System.out.println("Loading lake "+xmlLakeFiles[i]+"...done!");
connection.close();
} catch(Exception e) {
e.printStackTrace();
My client class calls LakeLoader.loadLake() method in a loop to load a bunch of Lake objects into the DB. The first lake in the list is created without problems, but when the 2-nd lake is being inserted, I get an exception at the preparedStatement.executeUpdate() statement. This happens consistently.
I tried to find information on this on the net, but seems that this problem only happened when people dealt with LOBs?!
Thank you very much!
GeorgiSuresh -- I'd probably log a TAR with Oracle support for this question if you definitely need it resolved. Support have access to all manner of existing cases, so this may be something they have seen before.
cheers
-steve- -
Java.sql.SQLException:Cannot open any more tables.
I have such exception(java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Cannot open any more tables.) when I try to make request to database:
if(null!=con)
try{
Statement stmt;
stmt = con.createStatement ( ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs= stmt.executeQuery(quary);
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
ex.printStackTrace();
}//try
But exception occurs after several requests(about 20). First 20 requests work fine. What is it? Thanks.Statement stmt;
stmt = con.createStatement ( ResultSet.TYPE_SCROLL_INSENSITIVE,
try{
ResultSet.CONCUR_UPDATABLE);
ResultSet rs= stmt.executeQuery(quary);
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
ex.printStackTrace();
}//tryyou should reuse the statement rather than opening it for every query
Good Luck -
ADF Bc third party JDBC Driver java.sql.SQLException: No suitable driver
Hello all
I am using JT400.jar file to connect to AS/400 data base in my JSF/ADF Application.
We are using shared library for all non oracle jar files . and my application fails with error message
## Detail 0 ##
java.sql.SQLException: No suitable driver
During runtime. even though i am importing the required jar files from shared library settings in server.xml / application.xml
When i don't have the entry in shared library for this jar file it will fail during deployment time it self, but with shared library link it works during deployment but fails during runtime
it will work during runtime if i add my jar file to BC4J/lib folder. but team responsible for mintaining application server don't accept adding non oracle jar files to oracle installation folders
i have also posted this in jdev forum
Please Advise
ThanksThanks for reply
i am using Sqlserver 2000 as back end
import java.sql.*;
import java.net.*;
public class MysqlConnect{
public static void main(String[] args) {
System.out.println("MySQL Connect Example.");
Connection conn = null;
// String url = "jdbc:mysql:/localhost:3306/";
String url = "jdbc:microsoft:sqlserver/GTEXC/";
String dbName = "java";
// String driver = "Sun.Jdbc.Odbc.JdbcOdbcdriver";
String userName = "root";
String password = "root";
try {
Driver d=(Driver)Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
conn = DriverManager.getConnection(url+dbName,userName,password);
System.out.println("Connected to the database");
conn.close();
System.out.println("Disconnected from database");
} catch (Exception e) {
e.printStackTrace();
} -
Error: java.sql.SQLException: No suitable driver
Hi,
Here is the source file in Java :
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class FruitTest3 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String url = "jdbc:oracle:thin(or kprb ):sys/jameson@(DESCRIPTION=(ADDRESS_LIST =(ADDRESS =(COMMUNITY =
tcp.insee.fr)(PROTOCOL = TCP)(Host = 10.20.108.3)(Port = 1521)))(CONNECT_DATA = (SID = ORA817)))";
String table;
try {
String query =
"SELECT * " +
" FROM sys.sales";
Connection connection = DriverManager.getConnection(url);
DBResults results =
DatabaseUtilities.getQueryResults(connection,
query, false);
table = results.toHTMLTable("#FFAD00");
} catch(Exception e) {
table = "Error: " + e;
response.setContentType("text/html");
// Prevent the browser from caching the response. See
// Section 7.2 of Core Servlets and JSP for details.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0
response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
PrintWriter out = response.getWriter();
String title = "Connection Pool Test";
out.println("<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<CENTER>\n" +
table + "\n" +
"</CENTER>\n</BODY></HTML>");
Irceive the error message : Error: java.sql.SQLException: No suitable driver
Thanks in advance.hi nick..
im having thiis particular problem too. part of my codes look like this
try
Class.forName("org.gjt.mm.mysql.Driver");
connection = DriverManager.getConnection("jdbc:mysql//localhost/mmovies:/");
statement = connection.createStatement();
rs = statement.executeQuery("select * from timetable");
String result = "";
while(rs.next())
//String result = rs.getString(2);
String moviename = rs.getString(1);
result += moviename + ";";
System.out.println(result);
i have specified the 'driver'.
i have also places a 'gjt' folder in the same place as all my server codes. Please advice.
Thanks
-faridz -
hi,
I am having having problems with the getArray() of oracle.sql.ARRAY.
Here are the details:
Oracle Database - 9.2.0.6. The JDBC driver used -10.2.0.1 jar.(the latest available).
I am calling a stored procedure from java, that has out param as a collection (VARRAY) of a user defined type.
The stored procedure works fine, if the user/schema used to connect,contains actual type, and i am able to extract the user defined object from the oracle.sql.ARRAY, via getArray().
But if i use a different user to connect which has public synonyms and execute rights to the actual type, i get the following error:
java.sql.SQLException: Internal Error
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.initCollElemTypeName(OracleTypeCOLLECTION.java:1026)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.getAttributeType(OracleTypeCOLLECTION.java:1056)
at oracle.jdbc.oracore.OracleNamedType.getFullName(OracleNamedType.java:110)
at oracle.jdbc.oracore.OracleTypeADT.createStructDescriptor(OracleTypeADT.java:2262)
at oracle.jdbc.oracore.OracleTypeADT.unpickle81(OracleTypeADT.java:1656)
at oracle.jdbc.oracore.OracleTypeUPT.unpickle81UPT(OracleTypeUPT.java:466)
at oracle.jdbc.oracore.OracleTypeUPT.unpickle81rec(OracleTypeUPT.java:416)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81_imgBody_elems(OracleTypeCOLLECTION.java:979)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81_imgBody(OracleTypeCOLLECTION.java:923)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81(OracleTypeCOLLECTION.java:743)
at oracle.jdbc.oracore.OracleTypeCOLLECTION._unlinearize(OracleTypeCOLLECTION.java:242)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unlinearize(OracleTypeCOLLECTION.java:208)
at oracle.sql.ArrayDescriptor.toJavaArray(ArrayDescriptor.java:963)
at oracle.sql.ARRAY.getArray(ARRAY.java:370)
The problem is happening because we have 2 different users to connect to the database. one is the dba user, which contains all the types, packages and other one the application user, which we are supposed to use, to connect via java. This application user does have access to types via public synonym, but it gives the above mentioned error.
Please help :(.
Regards,
Gaurav.Hi avi,
Even I am getting the same error inspite of preceding the type name with the same user who has created the type.
It has displayed the array length.When I am trying to fetch each array, I am getting the error.
ARRAY simpleArray = (ARRAY) cs.getObject(3);
System.out.println("Array is of length " + simpleArray.length()); ********************** The above stmt prints 2 records ******************
But it goes to exception in the foll stmt..
Object [] objArrStructArray = null;
try{
objArrStructArray = (Object[]) simpleArray.getArray();
}catch(SQLException e){
e.printStackTrace();
Do u know abt this?
The foll is the error which I am getting.
java.sql.SQLException: Internal Error
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.initCollElemTypeName(OracleTypeCOLLECTION.java:1026)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.getAttributeType(OracleTypeCOLLECTION.java:1056)
at oracle.jdbc.oracore.OracleNamedType.getFullName(OracleNamedType.java:110)
at oracle.jdbc.oracore.OracleTypeADT.createStructDescriptor(OracleTypeADT.java:2262)
at oracle.jdbc.oracore.OracleTypeADT.unpickle81(OracleTypeADT.java:1656)
at oracle.jdbc.oracore.OracleTypeUPT.unpickle81UPT(OracleTypeUPT.java:466)
at oracle.jdbc.oracore.OracleTypeUPT.unpickle81rec(OracleTypeUPT.java:416)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81_imgBody_elems(OracleTypeCOLLECTION.java:979)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81_imgBody(OracleTypeCOLLECTION.java:923)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81(OracleTypeCOLLECTION.java:743)
at oracle.jdbc.oracore.OracleTypeCOLLECTION._unlinearize(OracleTypeCOLLECTION.java:242)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unlinearize(OracleTypeCOLLECTION.java:208)
at oracle.sql.ArrayDescriptor.toJavaArray(ArrayDescriptor.java:963)
at oracle.sql.ARRAY.getArray(ARRAY.java:353)
at com.telstra.plo.data.NetworkDAO.findCablesInBuffer(NetworkDAO.java:730)
at com.telstra.plo.data.NetworkDAOTest.testFindCablesInBuffer(NetworkDAOTest.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Thanks
Archana -
Hi,
i am trying to execute an Oracle procedure from JDBC. The procedure accepts a Nested table as an input parameter. Definition of the nested table is given below.
Database – Oracle 10g.
Application Server – JBOSS 4.2.1
I get the following exception._
java.sql.SQLException: Non supported character set: oracle-character-set-178
at oracle.gss.util.NLSError.throwSQLException(NLSError.java:46)
I. JDBC Code_
Session s = HibernateUtil.getSession();
Transaction tr = s.beginTransaction();
con=s.connection();
oraConn = (OracleConnection) con.getMetaData().getConnection();
TableObject obj=new TableObject();
obj.setId(new Integer(123));//Tested ok, stroing in DB
obj.setDescr("test"); // this line throwing error
obj.setCre_user(new Integer(456));
obj.setUpd_user(new Integer(789));
obj.setXfr_flag("Y");
ArrayList al=new ArrayList();
al.add(obj);
Object[] objAray = al.toArray();
ArrayDescriptor arrayDescriptor =ArrayDescriptor.createDescriptor("T_TEST_SYN", oraConn);
ARRAY oracleArray = new ARRAY(arrayDescriptor, oraConn, objAray);
cs = (OracleCallableStatement)oraConn.prepareCall("call PKG_OBJ_TEST.accept_ui_input(?) ");
cs.setArray(1, oracleArray);
cs.execute();
tr.commit();
public class TableObject implements SQLData{
private String sql_type = "T_OBJ_TEST";
private int id;
private String descr;
//private Date cre_date;
private int cre_user;
//private Date upd_date;
private int upd_user;
private String xfr_flag;
public TableObject()
public TableObject (int id,String descr,int cre_user,int upd_user,String xfr_flag)
// this.sql_type = sql_type;
this.id = id;
this.descr = descr;
// this.cre_date=cre_date;
this.cre_user=cre_user;
//this.upd_date=upd_date;
this.upd_user=upd_user;
this.xfr_flag=xfr_flag;
public String getSQLTypeName() throws SQLException {
return "T_OBJ_TEST";
public void readSQL(SQLInput stream, String typeName) throws SQLException {
//sql_type = typeName;
id=stream.readInt();
descr=stream.readString();
//cre_date=stream.readDate();
cre_user=stream.readInt();
//upd_date=stream.readDate();
upd_user=stream.readInt();
xfr_flag=stream.readString();
public void writeSQL(SQLOutput stream) throws SQLException {
try {
stream.writeInt(this.id);
System.out.println("Iddddd");
stream.writeString(this.descr);
System.out.println("Desccccccccccccccc"+":"+descr);
//stream.writeDate(cre_date);
stream.writeInt(this.cre_user);
System.out.println("userrrrrrrrrrrr");
//stream.writeDate(upd_date);
stream.writeInt(this.upd_user);
System.out.println("upd uiserrrrrrrrrrr");
stream.writeString(this.xfr_flag);
System.out.println("flagggggggggggggggggggg"+xfr_flag);
}catch (SQLException se) {
System.out.println("Table object sql exception");
se.printStackTrace();
catch (Exception e) {
System.out.println("Table object exception");
* @return the id
public int getId() {
return id;
* @param id the id to set
public void setId(Object obj) {
Integer iobj= (Integer)obj;
this.id =iobj.intValue();
* @return the descr
public String getDescr() {
System.out.println("getDescr "+descr);
return descr;
* @param descr the descr to set
public void setDescr(Object obj) {
System.out.println("setDescr "+obj);
String sobj = (String)obj;
this.descr=sobj.toString();
System.out.println("setDescr "+obj);
* @return the cre_user
public int getCre_user() {
return cre_user;
* @param cre_user the cre_user to set
public void setCre_user(Object obj) {
Integer iobj=(Integer)obj;
this.cre_user = iobj.intValue();
* @return the upd_user
public int getUpd_user() {
return upd_user;
* @param upd_user the upd_user to set
public void setUpd_user(Object obj) {
Integer iobj=(Integer)obj;
this.upd_user = iobj.intValue();
* @return the xfr_flag
public String getXfr_flag() {
return xfr_flag;
* @param xfr_flag the xfr_flag to set
public void setXfr_flag(Object obj) {
this.xfr_flag = (String)xfr_flag;
II. Oracle database object details
Details of Object and Nested table created in the database.
T_TEST_SYN is a public synonym created for t_tab_obj_test
CREATE OR REPLACE TYPE t_obj_test as object (
id number(10),
descr varchar2(100),
--cre_date date,
cre_user number(10),
--upd_date date,
upd_user number(10),
xfr_flag varchar2(1),
CONSTRUCTOR FUNCTION t_obj_test ( id IN NUMBER DEFAULT NULL,
descr IN varchar2 default null,
--cre_date in date default null,
cre_user in number default null,
--upd_date in date default null,
upd_user in number default null,
xfr_flag in varchar2 default null ) RETURN SELF AS RESULT ) ;
CREATE OR REPLACE TYPE BODY t_obj_test as
CONSTRUCTOR FUNCTION t_obj_test ( id IN NUMBER DEFAULT NULL,
descr IN varchar2 default null,
--cre_date in date default null,
cre_user in number default null,
--upd_date in date default null,
upd_user in number default null,
xfr_flag in varchar2 default null ) RETURN SELF AS RESULT IS
BEGIN
SELF.id := id ;
SELF.descr := descr ;
--SELF.cre_date := cre_date ;
SELF.cre_user := cre_user ;
--SELF.upd_date := cre_date ;
SELF.upd_user := cre_user ;
SELF.xfr_flag := xfr_flag ;
RETURN ;
END ;
END ;
CREATE OR REPLACE TYPE t_tab_obj_test AS TABLE OF t_obj_test ;
CREATE OR REPLACE PACKAGE BODY PKG_OBJ_TEST AS
PROCEDURE accept_ui_input ( p_tab_obj_test in T_TAB_OBJ_TEST ) IS
BEGIN
FOR row IN p_tab_obj_test.First .. p_tab_obj_test.LAST
LOOP
INSERT INTO OBJ_TEST ( ID,
DESCR,
CRE_DATE,
CRE_USER,
UPD_DATE,
UPD_USER,
XFR_FLAG )
VALUES ( p_tab_obj_test(row).ID,
p_tab_obj_test(row).DESCR,
NULL,
p_tab_obj_test(row).CRE_USER,
NULL,
p_tab_obj_test(row).UPD_USER,
p_tab_obj_test(row).XFR_FLAG ) ;
END LOOP ;
COMMIT ;
END accept_ui_input ;
END PKG_OBJ_TEST;
/Check your CLASSPATH enviroment variable. Try to add something like c:\Ora10g\jlib\orai18n.jar.
From "JDBC Developers Guide and Reference":
orai18n.jar
Contains classes for globalization and multibyte character sets support
This solved the same error in my case.
Maybe you are looking for
-
How to remove the select button from the alv grid
Hi, I am using the Function modules for alv report, My 1st field in the list is checkbox, User can select the checkbox for further process. My problem is I want to remove the standards select option from alv. I have searched in slis_layout_alv for an
-
Hi. I keep getting this "The iPod '...' cannot be synced. The disk is locked and cannot be written to." error when I try to sync my 11 GB of music from my very old, updated Windows XP Pro SP3 machine to an old iPod Touch 1G (iOS v3.1.3). It has a bra
-
Local host name message pops up on start up
I've started getting message on start up saying "local host name is already in use, do you want to change" this just began happening. what does this mean and how can i fix it from poping up? thanks
-
Change value in specific address in hex file
Hi all : I have hex file that I want to change specific values in some specific address , how can I do that in labview Attach see file please for hex file Please see another attach file which explain what I want in steps Thanks a lot Wisam Attach
-
CFREPORT - rendering bug?
I am trying to generate a tabular report, but I encountered a weird bug: if the content of a column exceed the first page height, in the second page the borders of the other columns (that don't exceed the first page) don't display. The result is o