Java Code Examples for java.sql.PreparedStatement#getClass()

The following examples show how to use java.sql.PreparedStatement#getClass() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: preparedData.java    From openbd-core with GNU General Public License v3.0 6 votes vote down vote up
private static void setLongVarChar(PreparedStatement Statmt, int ColIndex, String s, int jdbcType) throws SQLException {
	Method m;

	Class<? extends PreparedStatement> c = Statmt.getClass();
	String className = c.getName();
	if (className.equals("oracle.jdbc.driver.T4CPreparedStatement") || className.equals("oracle.jdbc.driver.T4CCallableStatement")) {
		// When updating an Oracle CLOB column using the Oracle JDBC driver we need to use the
		// Oracle proprietary method setStringForClob() so it will work for strings longer than 32765.
		// NORMAL CODE: ((oracle.jdbc.OraclePreparedStatement)Statmt).setStringForClob( ColIndex, s );
		try {
			m = c.getMethod("setStringForClob", new Class[] { int.class, String.class });
			m.invoke(Statmt, new Object[] { new Integer(ColIndex), s });
		} catch (Exception e) {
			// If the reflection code fails for some reason then just call setObject()
			Statmt.setObject(ColIndex, s, jdbcType);
		}
	} else {
		// for MS SQL Server via JDBC-ODBC Bridge, if you try to use setString()
		// instead of setObject(), it will pad VARCHAR columns when it shouldn't
		Statmt.setObject(ColIndex, s, jdbcType);
	}
}
 
Example 2
Source File: Expectations.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
private CallableStatement toCallableStatement(PreparedStatement statement) {
	if ( !CallableStatement.class.isInstance( statement ) ) {
		throw new HibernateException(
				"BasicParamExpectation operates exclusively on CallableStatements : " + statement.getClass()
		);
	}
	return (CallableStatement) statement;
}
 
Example 3
Source File: preparedData.java    From openbd-core with GNU General Public License v3.0 5 votes vote down vote up
private static void setOracleNClob(PreparedStatement Statmt, int ColIndex, String s, int jdbcType) throws SQLException {
	Method m;

	Class<? extends PreparedStatement> c = Statmt.getClass();
	String className = c.getName();
	if (className.equals("oracle.jdbc.driver.T4CPreparedStatement")) {
		// When updating an Oracle NCLOB column using the Oracle JDBC driver we need to use the
		// Oracle proprietary method setFormOfUse() so it will know it's an NCLOB instead of CLOB.
		// NOTE: a string longer than 2000 characters will result in the following error:
		// "ORA-01461: can bind a LONG value only for insert into a LONG column."
		// Using setString, setCharacterStream or setObject instead of setStringForClob
		// results in the same limitation.
		// NORMAL CODE: ((oracle.jdbc.OraclePreparedStatement)Statmt).setFormOfUse( ColIndex, oracle.jdbc.OraclePreparedStatement.FORM_NCHAR );
		// NORMAL CODE: ((oracle.jdbc.OraclePreparedStatement)Statmt).setStringForClob( ColIndex, s );
		try {
			m = c.getMethod("setFormOfUse", new Class[] { int.class, short.class });
			m.invoke(Statmt, new Object[] { new Integer(ColIndex), new Short(FORM_NCHAR) });
			m = c.getMethod("setStringForClob", new Class[] { int.class, String.class });
			m.invoke(Statmt, new Object[] { new Integer(ColIndex), s });
		} catch (Exception e) {
			// If the reflection code fails for some reason then just call setObject()
			Statmt.setObject(ColIndex, s, Types.CLOB);
		}
	} else {
		// Need to pass a jdbc type of Types.CLOB instead of ORACLE_NCLOB since the JDBC drivers
		// won't recognize ORACLE_NCLOB.
		Statmt.setObject(ColIndex, s, Types.CLOB);
	}
}
 
Example 4
Source File: preparedData.java    From openbd-core with GNU General Public License v3.0 5 votes vote down vote up
private static void setFormOfUseToNCHAR(PreparedStatement Statmt, int ColIndex) {
	Class<? extends PreparedStatement> c = Statmt.getClass();
	String className = c.getName();
	if (className.equals("oracle.jdbc.driver.T4CPreparedStatement")) {
		try {
			Method m = c.getMethod("setFormOfUse", new Class[] { int.class, short.class });
			m.invoke(Statmt, new Object[] { new Integer(ColIndex), new Short(FORM_NCHAR) });
		} catch (Exception e) {
		}
	}
}
 
Example 5
Source File: preparedData.java    From openbd-core with GNU General Public License v3.0 5 votes vote down vote up
private int getJdbcType(PreparedStatement Statmt, int cfSqlType) {
	if (cfSqlType == CF_SQL_CLOB) {
		// For Oracle callable statements we need to map the CF_SQL_CLOB
		// type to the JDBC type java.sql.Types.CLOB.
		Class<? extends PreparedStatement> c = Statmt.getClass();
		String className = c.getName();
		if (className.equals("oracle.jdbc.driver.T4CCallableStatement"))
			return Types.CLOB;
	}

	return jdbcType[cfSqlType];
}
 
Example 6
Source File: ClobMemTest.java    From gemfirexd-oss with Apache License 2.0 4 votes vote down vote up
/**
 * Insert a clob and test length.
 *
 * @param lengthless  if true use the lengthless setCharacterStream api
 *
 * @throws SQLException
 * @throws IOException
 * @throws InvocationTargetException
 * @throws IllegalAccessException
 * @throws IllegalArgumentException
 */
private void testClobLength(boolean lengthless) throws SQLException, IOException, IllegalArgumentException,
        IllegalAccessException, InvocationTargetException {
    getConnection().setAutoCommit(false);
    Statement s = createStatement();
    s.executeUpdate("CREATE TABLE CLOBTABLE (K INT CONSTRAINT PK PRIMARY KEY, C CLOB(" + LONG_CLOB_LENGTH + "))");

    PreparedStatement ps = prepareStatement("INSERT INTO CLOBTABLE VALUES(?,?)");
    // We allocate 16MB for the test so use something bigger than that.
    ps.setInt(1,1);
    LoopingAlphabetReader reader = new LoopingAlphabetReader(LONG_CLOB_LENGTH);
    if (lengthless) {
        Method m = null;
        try {
            Class c = ps.getClass();
            m = c.getMethod("setCharacterStream",new Class[] {Integer.TYPE,
                        InputStream.class});
        } catch (NoSuchMethodException e) {
            // ignore method not found as method may not be present for
            // jdk's lower than 1.6.
            println("Skipping lengthless insert because method is not available");
            return;
        }
        m.invoke(ps, new Object[] {new Integer(2), reader});
    }
    else
        ps.setCharacterStream(2, reader, LONG_CLOB_LENGTH);
    ps.executeUpdate();
    // insert a zero length clob.
    ps.setInt(1, 2);
    ps.setString(2, "");
    ps.executeUpdate();
    // insert a null clob.
    ps.setInt(1, 3);
    ps.setString(2,null);
    ps.executeUpdate();
    // insert a short clob
    ps.setInt(1, 4);
    ps.setString(2, new String(SHORT_CLOB_CHARS));
    ps.executeUpdate();
    // Currently need to use optimizer override to force use of the index.
    // Derby should use sort avoidance and do it automatically, but there
    // appears to be a bug.
    ResultSet rs = s.executeQuery("SELECT K, LENGTH(C), C FROM CLOBTABLE" +
            "-- GEMFIREXD-PROPERTIES constraint=pk\n ORDER BY K");
    rs.next();
    assertEquals(LONG_CLOB_LENGTH_STRING,rs.getString(2));
    // make sure we can still access the clob after getting length.
    // It should be ok because we reset the stream
    Reader rsReader = rs.getCharacterStream(3);
    int len= 0;
    char[] buf = new char[32672];
    for (;;)  {
            int size = rsReader.read(buf);
            if (size == -1)
                    break;
            len += size;
            int expectedValue = ((len -1) % 26) + 'a';
            if (size != 0)
                assertEquals(expectedValue,buf[size -1]);
    }

    assertEquals(LONG_CLOB_LENGTH,len);
    // empty clob
    rs.next();
    assertEquals("0",rs.getString(2));
    String chars = rs.getString(3);
    assertEquals(0, chars.length());
    // null clob
    rs.next();
    assertEquals(null, rs.getString(2));
    chars = rs.getString(3);
    assertEquals(null, chars);
    // short clob
    rs.next();
    assertEquals("" + SHORT_CLOB_CHARS.length , rs.getString(2));
    chars = rs.getString(3);
    assertTrue(Arrays.equals(chars.toCharArray(), SHORT_CLOB_CHARS));
    rs.close();

    // Select just length without selecting the clob.
    rs = s.executeQuery("SELECT K, LENGTH(C)  FROM CLOBTABLE " +
            "ORDER BY K");
    JDBC.assertFullResultSet(rs, new String [][] {{"1",LONG_CLOB_LENGTH_STRING},{"2","0"},
            {"3",null},{"4","6"}});
}
 
Example 7
Source File: Expectations.java    From cacheonix-core with GNU Lesser General Public License v2.1 4 votes vote down vote up
private CallableStatement toCallableStatement(PreparedStatement statement) {
	if ( ! CallableStatement.class.isInstance( statement ) ) {
		throw new HibernateException( "BasicParamExpectation operates exclusively on CallableStatements : " + statement.getClass() );
	}
	return ( CallableStatement ) statement;
}
 
Example 8
Source File: ClobMemTest.java    From gemfirexd-oss with Apache License 2.0 4 votes vote down vote up
/**
 * Insert a clob and test length.
 *
 * @param lengthless  if true use the lengthless setCharacterStream api
 *
 * @throws SQLException
 * @throws IOException
 * @throws InvocationTargetException
 * @throws IllegalAccessException
 * @throws IllegalArgumentException
 */
private void testClobLength(boolean lengthless) throws SQLException, IOException, IllegalArgumentException,
        IllegalAccessException, InvocationTargetException {
    getConnection().setAutoCommit(false);
    Statement s = createStatement();
    s.executeUpdate("CREATE TABLE CLOBTABLE (K INT CONSTRAINT PK PRIMARY KEY, C CLOB(" + LONG_CLOB_LENGTH + "))");

    PreparedStatement ps = prepareStatement("INSERT INTO CLOBTABLE VALUES(?,?)");
    // We allocate 16MB for the test so use something bigger than that.
    ps.setInt(1,1);
    LoopingAlphabetReader reader = new LoopingAlphabetReader(LONG_CLOB_LENGTH);
    if (lengthless) {
        Method m = null;
        try {
            Class c = ps.getClass();
            m = c.getMethod("setCharacterStream",new Class[] {Integer.TYPE,
                        InputStream.class});
        } catch (NoSuchMethodException e) {
            // ignore method not found as method may not be present for
            // jdk's lower than 1.6.
            println("Skipping lengthless insert because method is not available");
            return;
        }
        m.invoke(ps, new Object[] {new Integer(2), reader});
    }
    else
        ps.setCharacterStream(2, reader, LONG_CLOB_LENGTH);
    ps.executeUpdate();
    // insert a zero length clob.
    ps.setInt(1, 2);
    ps.setString(2, "");
    ps.executeUpdate();
    // insert a null clob.
    ps.setInt(1, 3);
    ps.setString(2,null);
    ps.executeUpdate();
    // insert a short clob
    ps.setInt(1, 4);
    ps.setString(2, new String(SHORT_CLOB_CHARS));
    ps.executeUpdate();
    // Currently need to use optimizer override to force use of the index.
    // Derby should use sort avoidance and do it automatically, but there
    // appears to be a bug.
    ResultSet rs = s.executeQuery("SELECT K, LENGTH(C), C FROM CLOBTABLE" +
            "-- GEMFIREXD-PROPERTIES constraint=pk\n ORDER BY K");
    rs.next();
    assertEquals(LONG_CLOB_LENGTH_STRING,rs.getString(2));
    // make sure we can still access the clob after getting length.
    // It should be ok because we reset the stream
    Reader rsReader = rs.getCharacterStream(3);
    int len= 0;
    char[] buf = new char[32672];
    for (;;)  {
            int size = rsReader.read(buf);
            if (size == -1)
                    break;
            len += size;
            int expectedValue = ((len -1) % 26) + 'a';
            if (size != 0)
                assertEquals(expectedValue,buf[size -1]);
    }

    assertEquals(LONG_CLOB_LENGTH,len);
    // empty clob
    rs.next();
    assertEquals("0",rs.getString(2));
    String chars = rs.getString(3);
    assertEquals(0, chars.length());
    // null clob
    rs.next();
    assertEquals(null, rs.getString(2));
    chars = rs.getString(3);
    assertEquals(null, chars);
    // short clob
    rs.next();
    assertEquals("" + SHORT_CLOB_CHARS.length , rs.getString(2));
    chars = rs.getString(3);
    assertTrue(Arrays.equals(chars.toCharArray(), SHORT_CLOB_CHARS));
    rs.close();

    // Select just length without selecting the clob.
    rs = s.executeQuery("SELECT K, LENGTH(C)  FROM CLOBTABLE " +
            "ORDER BY K");
    JDBC.assertFullResultSet(rs, new String [][] {{"1",LONG_CLOB_LENGTH_STRING},{"2","0"},
            {"3",null},{"4","6"}});
}