⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preparedstatementtest.java

📁 第三方的SQL Server and Sybase的jdbc dirver,速度更快
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    public void testPreparedStatementSetObject5() throws Exception {        BigDecimal data = new BigDecimal(3.7D);        Statement stmt = con.createStatement();        stmt.execute("CREATE TABLE #psso5 (data MONEY)");        PreparedStatement pstmt = con.prepareStatement("INSERT INTO #psso5 (data) VALUES (?)");        pstmt.setObject(1, data, Types.DECIMAL, 4);        assertEquals(1, pstmt.executeUpdate());        pstmt.close();        ResultSet rs = stmt.executeQuery("SELECT data FROM #psso5");        assertTrue(rs.next());        assertEquals(data.doubleValue(), rs.getDouble(1), 0);        assertFalse(rs.next());        rs.close();        stmt.close();    }    /**     * Test for bug [1204658] Conversion from Number to BigDecimal causes data     * corruption.     */    public void testPreparedStatementSetObject6() throws Exception {        final Long TEST_VALUE = new Long(2265157674817400199L);        Statement s = con.createStatement();        s.execute("CREATE TABLE #psso6 (test_value NUMERIC(22,0))");        PreparedStatement ps = con.prepareStatement(                "insert into #psso6(test_value) values (?)");        ps.setObject(1, TEST_VALUE, Types.DECIMAL);        assertEquals(1, ps.executeUpdate());        ps.close();        ResultSet rs = s.executeQuery("select test_value from #psso6");        assertTrue(rs.next());        assertEquals("Persisted value not equal to original value",                TEST_VALUE.longValue(), rs.getLong(1));        assertFalse(rs.next());        rs.close();        s.close();    }    /**     * Test for bug [985754] row count is always 0     */    public void testUpdateCount1() throws Exception {    	int count = 50;        Statement stmt = con.createStatement();        stmt.execute("CREATE TABLE #updateCount1 (data INT)");        PreparedStatement pstmt = con.prepareStatement("INSERT INTO #updateCount1 (data) VALUES (?)");        for (int i = 1; i <= count; i++) {            pstmt.setInt(1, i);            assertEquals(1, pstmt.executeUpdate());        }        pstmt.close();        ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM #updateCount1");        assertTrue(rs.next());        assertEquals(count, rs.getInt(1));        assertFalse(rs.next());        stmt.close();        rs.close();        pstmt = con.prepareStatement("DELETE FROM #updateCount1");        assertEquals(count, pstmt.executeUpdate());        pstmt.close();    }    /**     * Test for parameter markers in function escapes.     */    public void testEscapedParams() throws Exception {        PreparedStatement pstmt = con.prepareStatement("SELECT {fn left(?, 2)}");        pstmt.setString(1, "TEST");        ResultSet rs = pstmt.executeQuery();        assertTrue(rs.next());        assertEquals("TE", rs.getString(1));        assertFalse(rs.next());        rs.close();        pstmt.close();    }    /**     * Test for bug [ 1059916 ] whitespace needed in preparedStatement.     */    public void testMissingWhitespace() throws Exception    {        PreparedStatement pstmt = con.prepareStatement(            "SELECT name from master..syscharsets where description like?and?between csid and 10");        pstmt.setString(1, "ISO%");        pstmt.setInt(2, 0);        ResultSet rs = pstmt.executeQuery();        assertNotNull(rs);        assertTrue(rs.next());    }    /**     * Test for bug [1022968] Long SQL expression error.     * NB. Test must be run with TDS=7.0 to fail.     */    public void testLongStatement() throws Exception {        Statement stmt = con.createStatement(                ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);        stmt.execute("CREATE TABLE #longStatement (id int primary key, data varchar(8000))");        StringBuffer buf = new StringBuffer(4096);        buf.append("SELECT * FROM #longStatement WHERE data = '");        for (int i = 0; i < 4000; i++) {            buf.append('X');        }        buf.append("'");        ResultSet rs = stmt.executeQuery(buf.toString());        assertNotNull(rs);        assertFalse(rs.next());        rs.close();        stmt.close();    }    /**     * Test for bug [1047330] prep statement with more than 2100 params fails.     */    public void testManyParametersStatement() throws Exception {        final int PARAMS = 2110;        Statement stmt = con.createStatement();        makeTestTables(stmt);        makeObjects(stmt, 10);        stmt.close();        StringBuffer sb = new StringBuffer(PARAMS * 3 + 100);        sb.append("SELECT * FROM #test WHERE f_int in (?");        for (int i = 1; i < PARAMS; i++) {            sb.append(", ?");        }        sb.append(")");        try {            // This can work if prepareSql=0            PreparedStatement pstmt = con.prepareStatement(sb.toString());            // Set the parameters            for (int i = 1; i <= PARAMS; i++) {                pstmt.setInt(i, i);            }            // Execute query and count rows            ResultSet rs = pstmt.executeQuery();            int cnt = 0;            while (rs.next()) {                ++cnt;            }            // Make sure this worked            assertEquals(9, cnt);        } catch (SQLException ex) {            assertEquals("22025", ex.getSQLState());        }    }    /**     * Test for bug [1010660] 0.9-rc1 setMaxRows causes unlimited temp stored     * procedures. This test has to be run with logging enabled or while     * monitoring it with SQL Profiler to see whether the temporary stored     * procedure is executed or the SQL is executed directly.     */    public void testMaxRows() throws SQLException {        Statement stmt = con.createStatement();        stmt.execute("CREATE TABLE #maxRows (val int)"                + " INSERT INTO #maxRows VALUES (1)"                + " INSERT INTO #maxRows VALUES (2)");        PreparedStatement pstmt = con.prepareStatement(                "SELECT * FROM #maxRows WHERE val<? ORDER BY val");        pstmt.setInt(1, 100);        pstmt.setMaxRows(1);        ResultSet rs = pstmt.executeQuery();        assertNotNull(rs);        assertTrue(rs.next());        assertEquals(1, rs.getInt(1));        assertFalse(rs.next());        rs.close();        pstmt.close();        stmt.executeUpdate("DROP TABLE #maxRows");        stmt.close();    }    /**     * Test for bug [1050660] PreparedStatement.getMetaData() clears resultset.     */    public void testMetaDataClearsResultSet() throws Exception {        Statement stmt = con.createStatement(                ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);        stmt.executeUpdate(                "CREATE TABLE #metaDataClearsResultSet (id int primary key, data varchar(8000))");        stmt.executeUpdate("INSERT INTO #metaDataClearsResultSet (id, data)"                + " VALUES (1, '1')");        stmt.executeUpdate("INSERT INTO #metaDataClearsResultSet (id, data)"                + " VALUES (2, '2')");        stmt.close();        PreparedStatement pstmt = con.prepareStatement(                "SELECT * FROM #metaDataClearsResultSet ORDER BY id");        ResultSet rs = pstmt.executeQuery();        assertNotNull(rs);        ResultSetMetaData rsmd = pstmt.getMetaData();        assertEquals(2, rsmd.getColumnCount());        assertEquals("id", rsmd.getColumnName(1));        assertEquals("data", rsmd.getColumnName(2));        assertEquals(8000, rsmd.getColumnDisplaySize(2));        assertTrue(rs.next());        assertEquals(1, rs.getInt(1));        assertEquals("1", rs.getString(2));        assertTrue(rs.next());        assertEquals(2, rs.getInt(1));        assertEquals("2", rs.getString(2));        assertFalse(rs.next());        rs.close();        pstmt.close();    }    /**     * Test for bad truncation in prepared statements on metadata retrieval     * (patch [1076383] ResultSetMetaData for more complex statements for SQL     * Server).     */    public void testMetaData() throws Exception {        Statement stmt = con.createStatement(                ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);        stmt.executeUpdate("CREATE TABLE #metaData (id int, data varchar(8000))");        stmt.executeUpdate("INSERT INTO #metaData (id, data)"                + " VALUES (1, 'Data1')");        stmt.executeUpdate("INSERT INTO #metaData (id, data)"                + " VALUES (1, 'Data2')");        stmt.executeUpdate("INSERT INTO #metaData (id, data)"                + " VALUES (2, 'Data3')");        stmt.executeUpdate("INSERT INTO #metaData (id, data)"                + " VALUES (2, 'Data4')");        stmt.close();        // test simple statement        PreparedStatement pstmt = con.prepareStatement("SELECT id " +                "FROM #metaData " +                "WHERE data=? GROUP BY id");        ResultSetMetaData rsmd = pstmt.getMetaData();        assertNotNull("No meta data returned for simple statement", rsmd);        assertEquals(1, rsmd.getColumnCount());        assertEquals("id", rsmd.getColumnName(1));        pstmt.close();        // test more complex statement        pstmt = con.prepareStatement("SELECT id, count(*) as count " +                "FROM #metaData " +                "WHERE data=? GROUP BY id");        rsmd = pstmt.getMetaData();        assertNotNull("No metadata returned for complex statement", rsmd);        assertEquals(2, rsmd.getColumnCount());        assertEquals("id", rsmd.getColumnName(1));        assertEquals("count", rsmd.getColumnName(2));        pstmt.close();    }    /**     * Test for bug [1071397] Error in prepared statement (parameters in outer     * join escapes are not recognized).     */    public void testOuterJoinParameters() throws SQLException {        Statement stmt = con.createStatement();        stmt.executeUpdate(                "CREATE TABLE #outerJoinParameters (id int primary key)");        stmt.executeUpdate(                "INSERT #outerJoinParameters (id) values (1)");        stmt.close();        // Real dumb join, the idea is to see the parser works fine        PreparedStatement pstmt = con.prepareStatement(                "select * from "                + "{oj #outerJoinParameters a left outer join #outerJoinParameters b on a.id = ?}"                + "where b.id = ?");        pstmt.setInt(1, 1);        pstmt.setInt(2, 1);        ResultSet rs = pstmt.executeQuery();        assertTrue(rs.next());        assertEquals(1, rs.getInt(1));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -