Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Question about Oracle JDBC setFormOfUse for storing NLS data

Question about Oracle JDBC setFormOfUse for storing NLS data

From: <nandiarnab_at_yahoo.com>
Date: 16 Aug 2005 10:43:18 -0700
Message-ID: <1124214198.457979.301700@o13g2000cwo.googlegroups.com>


Hi,

This question is related to Oracle 9.2.0.6 JDBC.

Please refer to the below program.

Because of some generic code in a lower level of our Java code, we decided to always use the
((OraclePreparedStatement)prepared).setFormOfUse(1,OraclePreparedStatement.FORM_NCHAR), even when inserting VARCHAR2 data.

I am doing this because, Oracle, in the JDBC Application Developer's Guide, said this: -
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96529/ch6.htm#1011077



In addition, if you bind or define a Java string for a column of SQL CHAR datatypes but specify the form of use argument, performance of the database will be degraded. However, data should not be lost because the national character set is always a larger set than the database character set.

What is happening is that till a Java String of 2000 characters, Oracle is able to insert the data into a VARCHAR2(2000) column correctly.

As soon as the String length becomes 2001 characters, the column size of 2001 does not suffice and Oracle returns an error: - java.sql.SQLException: Data size bigger than max size for this type: 4002

This does not happen, if I comment out the setFormOfUse() line.

<code>
import java.sql.*;
import java.io.StringReader;
import oracle.jdbc.driver.*;

public class Example {

    private final String strUserName;
    private final String strPassword;
    private final String strURL;

//4000 characters
//private final String

UNICODE="111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666677777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

//2001 characters
//private final String

UNICODE="011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666677777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001";

//2000 characters

    private final String

UNICODE="111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001";

//150 characters
//private final String UNICODE =

"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

    public Example(String strUserName, String strPassword, String strURL) {

        this.strUserName = strUserName;
        this.strPassword = strPassword;
        this.strURL = strURL;
        try {
            DriverManager.registerDriver(new OracleDriver());
        } catch (SQLException e) {
            System.err.println(e);
            System.exit(1);
        }

    }

    public void insert() throws Exception {

        Connection conn = null;
        Statement statement = null;
        PreparedStatement prepared = null;
        ResultSet set = null;
        try {
            conn = DriverManager.getConnection(strURL, strUserName,
strPassword);
            statement = conn.createStatement();
            statement.executeQuery("CREATE TABLE A (B VARCHAR2(" +
UNICODE.length() + "))");
            prepared = conn.prepareStatement("INSERT INTO A VALUES
(?)");

((OraclePreparedStatement)prepared).setFormOfUse(1,OraclePreparedStatement.FORM_NCHAR);

            prepared.setString(1, UNICODE);
            prepared.executeUpdate();
            set = statement.executeQuery("SELECT B FROM A");
            while (set.next()) {
                String str = set.getString(1);
                System.out.println(UNICODE.equals(str));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            statement.executeQuery("DROP TABLE A");
            if (conn != null) {
                conn.close();
            }
        }

    }

    public static void main(String[] args) {

        try {
            Example example = new Example("x", "x",
"jdbc:oracle:thin:@x:1521:x");
            example.insert();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
</code>

Am I doing something wrong?

Thank you,
Arnab Received on Tue Aug 16 2005 - 12:43:18 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US