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

📄 safetest.java

📁 第三方的SQL Server and Sybase的jdbc dirver,速度更快
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                            } catch (SQLException e) {                            }                        }                        // Notify that we're done                        synchronized (o1) {                            done++;                            o1.notify();                        }                    }                }            };            threads[i].start();        }        while (true) {            synchronized (o1) {                if (started == threadCount) {                    break;                }                o1.wait();            }        }        synchronized (o2) {            o2.notifyAll();        }        boolean passed = true;        for (int i = 0; i < threadCount; i++) {            stmt0 = con.createStatement();            ResultSet rs = stmt0.executeQuery("SELECT 1234");            passed &= rs.next();            passed &= !rs.next();            stmt0.close();        }        while (true) {            synchronized (o1) {                if (done == threadCount) {                    break;                }                o1.wait();            }        }        for (int i = 0; i < threadCount; i++) {            threads[i].join();        }        stmt0.close();        assertTrue(passed);        assertTrue(!failed);    }    /**     * Check that meta data information is fetched even for empty cursor-based result sets (bug #613199).     *     * @throws Exception     */    public void testCursorResultSetEmpty0004() throws Exception {        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);        ResultSet rs = stmt.executeQuery("SELECT 5 Value WHERE 1=0");        assertEquals(null, stmt.getWarnings());        assertEquals(null, rs.getWarnings());        assertEquals("Value", rs.getMetaData().getColumnName(1));        assertTrue(!rs.isBeforeFirst());        assertTrue(!rs.isAfterLast());        assertTrue(!rs.isFirst());        assertTrue(!rs.isLast());        rs.next();        assertTrue(!rs.isBeforeFirst());        assertTrue(!rs.isAfterLast());        assertTrue(!rs.isFirst());        assertTrue(!rs.isLast());        rs.close();        stmt.close();    }    /**     * Check that the <code>isBeforeFirst</code>, <code>isAfterLast</code>,     * <code>isFirst</code> and <code>isLast</code> methods work for     * forward-only, read-only result sets (bug [1039876] MS SQL     * JtdsResultSet.isAfterLast() always returns false).     *     * @throws Exception if an error condition occurs     */    public void testPlainResultSetPosition0004() throws Exception {        Statement stmt = con.createStatement();        // Try with an empty ResultSet        ResultSet rs = stmt.executeQuery("SELECT 5 Value WHERE 1=0");        assertEquals(null, stmt.getWarnings());        assertEquals(null, rs.getWarnings());        assertEquals("Value", rs.getMetaData().getColumnName(1));        assertTrue(!rs.isBeforeFirst());        assertTrue(!rs.isAfterLast());        assertTrue(!rs.isFirst());        assertTrue(!rs.isLast());        rs.next();        assertTrue(!rs.isBeforeFirst());        assertTrue(!rs.isAfterLast());        assertTrue(!rs.isFirst());        assertTrue(!rs.isLast());        rs.close();        // Try with a non-empty ResultSet        rs = stmt.executeQuery("SELECT 5 Value");        assertEquals(null, stmt.getWarnings());        assertEquals(null, rs.getWarnings());        assertEquals("Value", rs.getMetaData().getColumnName(1));        assertTrue(rs.isBeforeFirst());        assertTrue(!rs.isAfterLast());        assertTrue(!rs.isFirst());        assertTrue(!rs.isLast());        rs.next();        assertTrue(!rs.isBeforeFirst());        assertTrue(!rs.isAfterLast());        assertTrue(rs.isFirst());        assertTrue(rs.isLast());        rs.next();        assertTrue(!rs.isBeforeFirst());        assertTrue(rs.isAfterLast());        assertTrue(!rs.isFirst());        assertTrue(!rs.isLast());        rs.close();        stmt.close();    }    /**     * Check that values returned from bit fields are correct (not just 0) (bug #841670).     *     * @throws Exception     */    public void testBitFields0005() throws Exception {        Statement stmt = con.createStatement();        stmt.execute(                "create table #SAfe0005(id int primary key, bit1 bit not null, bit2 bit not null)");        stmt.execute(                "insert into #SAfe0005 values (0, 0, 0) "+                "insert into #SAfe0005 values (1, 1, 1) "+                "insert into #SAfe0005 values (2, 0, 0)");        while (stmt.getMoreResults() || stmt.getUpdateCount() != -1);        ResultSet rs = stmt.executeQuery("SELECT * FROM #SAfe0005");        while (rs.next()) {            int id = rs.getInt(1);            int bit1 = rs.getInt(2);            int bit2 = rs.getInt(3);            assertTrue("id: " + id + "; bit1: " + bit1 + "; bit2: " + bit2,                       bit1 == id % 2 && (bit2 == id || id == 2 && bit2 == 0));        }        rs.close();        stmt.close();    }    /**     * Test that <code>CallableStatement</code>s with return values work correctly.     *     * @throws Exception     */    public void testCallableStatement0006() throws Exception {        final int myVal = 13;        Statement stmt = con.createStatement();        stmt.execute("CREATE PROCEDURE #SAfe0006 @p1 INT, @p2 VARCHAR(20) OUT AS "                     + "SELECT @p2=CONVERT(VARCHAR(20), @p1-1) "                     + "SELECT @p1 AS value "                     + "RETURN @p1+1");        stmt.close();        // Try all formats: escaped, w/ exec and w/o exec        String[] sql = {"{?=call #SAfe0006(?,?)}", "exec ?=#SAfe0006 ?,?", "?=#SAfe0006 ?,?"};        for (int i = 0; i < sql.length; i++) {            // Execute it using executeQuery            CallableStatement cs = con.prepareCall(sql[i]);            cs.registerOutParameter(1, Types.INTEGER);            cs.setInt(2, myVal);            cs.registerOutParameter(3, Types.VARCHAR);            cs.executeQuery().close();            assertFalse(cs.getMoreResults());            assertEquals(-1, cs.getUpdateCount());            assertEquals(myVal+1, cs.getInt(1));            assertEquals(String.valueOf(myVal-1), cs.getString(3));            cs.close();            // Now use execute            cs = con.prepareCall(sql[i]);            cs.registerOutParameter(1, Types.INTEGER);            cs.setInt(2, myVal);            cs.registerOutParameter(3, Types.VARCHAR);            assertTrue(cs.execute());            cs.getResultSet().close();            assertFalse(cs.getMoreResults());            assertEquals(-1, cs.getUpdateCount());            assertEquals(myVal+1, cs.getInt(1));            assertEquals(String.valueOf(myVal-1), cs.getString(3));            cs.close();        }    }    /**     * Helper method for <code>testBigDecimal0007</code>. Inserts a BigDecimal     * value obtained from a double value.     *     * @param stmt      <code>PreparedStatement</code> instance     * @param val       the <code>double</code> value to insert     * @param scaleFlag if <code>true</code> scale the value to 4, otherwise     *                  leave it as it is     */    private static void insertBigDecimal(PreparedStatement stmt, double val,                                         boolean scaleFlag)            throws Exception {        BigDecimal bd = new BigDecimal(val);        if (scaleFlag) {            bd = bd.setScale(4,                    BigDecimal.ROUND_HALF_EVEN);        }        stmt.setBigDecimal(1, bd);        stmt.execute();        int rowCount = stmt.getUpdateCount();        assertEquals(1, rowCount);        assertTrue(stmt.getMoreResults());        ResultSet rs = stmt.getResultSet();        assertTrue(rs.next());        assertEquals("Values don't match.", val, rs.getDouble(1), 0);    }    /**     * Test <code>BigDecimal</code>s created from double values (i.e with very     * large scales).     */    public void testBigDecimal0007() throws Exception {        Statement createStmt = con.createStatement();        createStmt.execute("CREATE TABLE #SAfe0007(value MONEY)");        createStmt.close();        PreparedStatement stmt = con.prepareStatement(                "INSERT INTO #SAfe0007(value) VALUES (?) "                + "SELECT * FROM #SAfe0007 DELETE #SAfe0007");        // Now test with certain values.        insertBigDecimal(stmt, 1.1, false);        insertBigDecimal(stmt, 0.1, false);        insertBigDecimal(stmt, 0.1, true);        insertBigDecimal(stmt, 0.01, false);        insertBigDecimal(stmt, 0.01, true);        insertBigDecimal(stmt, 0.02, false);        insertBigDecimal(stmt, 0.02, true);        insertBigDecimal(stmt, 0.25, false);        stmt.close();    }    /**     * Test writing <code>long</code> values to VARCHAR fields. There was a     * regression introduced in release 0.6 that caused <code>long</code>     * fields to be sent with non-zero scale and appear with decimals when     * written into VARCHAR fields.     */    public void testLongToVarchar0008() throws Exception {        long myVal = 13;        Statement createStmt = con.createStatement();        createStmt.execute("CREATE TABLE #SAfe0008(value VARCHAR(255))");        createStmt.close();        PreparedStatement stmt = con.prepareStatement(                "INSERT INTO #SAfe0008(value) values (CONVERT(VARCHAR(255), ?)) "                + "SELECT * FROM #SAfe0008 DELETE #SAfe0008");        stmt.setLong(1, myVal);        stmt.execute();        int rowCount = stmt.getUpdateCount();        assertEquals(1, rowCount);        assertTrue(stmt.getMoreResults());        ResultSet rs = stmt.getResultSet();        assertTrue(rs.next());        assertEquals("Values don't match.",                     String.valueOf(myVal), rs.getString(1));        stmt.close();    }    /**     * Test <code>ResultSet.deleteRow()</code> on updateable result sets.     */    public void testDeleteRow0009() throws Exception {        Statement stmt = con.createStatement();        stmt.execute("CREATE TABLE #SAfe0009(value VARCHAR(255) PRIMARY KEY)");        stmt.close();        PreparedStatement insStmt = con.prepareStatement(                "INSERT INTO #SAfe0009(value) values (?)");        insStmt.setString(1, "Row 1");        assertEquals(1, insStmt.executeUpdate());        insStmt.setString(1, "Row 2");        assertEquals(1, insStmt.executeUpdate());        insStmt.close();        stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,                                   ResultSet.CONCUR_UPDATABLE);        ResultSet rs = stmt.executeQuery("SELECT * FROM #SAfe0009 ORDER BY 1");        assertEquals(null, stmt.getWarnings());        assertEquals(null, rs.getWarnings());        assertTrue(rs.last());        assertTrue(!rs.rowDeleted());        rs.deleteRow();        assertTrue(rs.rowDeleted());        rs.close();        rs = stmt.executeQuery("SELECT * FROM #SAfe0009");        assertTrue(rs.next());        assertEquals("Row 1", rs.getString(1));        assertTrue(!rs.next());        rs.close();        stmt.close();    }    /**     * Test VARCHAR output parameters returned by CallableStatements.     * <p>     * An issue existed, caused by the fact that the parameter was sent to SQL     * Server as a short VARCHAR (not XORed with 0x80) limiting its length to     * 255 characters. See bug [815348] for more details.

⌨️ 快捷键说明

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