📄 preparedstatementtest.java
字号:
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 + -