📄 preparedstatementtest.java
字号:
// jTDS JDBC Driver for Microsoft SQL Server and Sybase// Copyright (C) 2004 The jTDS Project//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.//// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//package net.sourceforge.jtds.test;import java.math.BigDecimal;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.sql.Types;/** * @version $Id: PreparedStatementTest.java,v 1.40 2005/06/02 11:59:12 alin_sinpalean Exp $ */public class PreparedStatementTest extends TestBase { public PreparedStatementTest(String name) { super(name); } public void testPreparedStatement() throws Exception { PreparedStatement pstmt = con.prepareStatement("SELECT * FROM #test"); Statement stmt = con.createStatement(); makeTestTables(stmt); makeObjects(stmt, 10); stmt.close(); ResultSet rs = pstmt.executeQuery(); dump(rs); rs.close(); pstmt.close(); } public void testScrollablePreparedStatement() throws Exception { Statement stmt = con.createStatement(); makeTestTables(stmt); makeObjects(stmt, 10); stmt.close(); PreparedStatement pstmt = con.prepareStatement("SELECT * FROM #test", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = pstmt.executeQuery(); assertTrue(rs.isBeforeFirst()); while (rs.next()) { } assertTrue(rs.isAfterLast()); //This currently fails because the PreparedStatement //Doesn't know it needs to create a cursored ResultSet. //Needs some refactoring!! // SAfe Not any longer. ;o) while (rs.previous()) { } assertTrue(rs.isBeforeFirst()); rs.close(); pstmt.close(); } public void testPreparedStatementAddBatch1() throws Exception { int count = 50; Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #psbatch1 (f_int INT)"); int sum = 0; con.setAutoCommit(false); PreparedStatement pstmt = con.prepareStatement("INSERT INTO #psbatch1 (f_int) VALUES (?)"); for (int i = 0; i < count; i++) { pstmt.setInt(1, i); pstmt.addBatch(); sum += i; } int[] results = pstmt.executeBatch(); assertEquals(results.length, count); for (int i = 0; i < count; i++) { assertEquals(results[i], 1); } pstmt.close(); con.commit(); con.setAutoCommit(true); ResultSet rs = stmt.executeQuery("SELECT SUM(f_int) FROM #psbatch1"); assertTrue(rs.next()); System.out.println(rs.getInt(1)); assertEquals(rs.getInt(1), sum); rs.close(); stmt.close(); } /** * Test for [924030] EscapeProcesser problem with "{}" brackets */ public void testPreparedStatementParsing1() throws Exception { String data = "New {order} plus {1} more"; Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #psp1 (data VARCHAR(32))"); stmt.close(); stmt = con.createStatement(); stmt.execute("create procedure #sp_psp1 @data VARCHAR(32) as INSERT INTO #psp1 (data) VALUES(@data)"); stmt.close(); PreparedStatement pstmt = con.prepareStatement("{call #sp_psp1('" + data + "')}"); pstmt.execute(); pstmt.close(); stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT data FROM #psp1"); assertTrue(rs.next()); assertTrue(data.equals(rs.getString(1))); assertFalse(rs.next()); rs.close(); stmt.close(); } /** * Test for bug [1008882] Some queries with parameters cannot be executed with 0.9-rc1 */ public void testPreparedStatementParsing2() throws Exception { PreparedStatement pstmt = con.prepareStatement(" SELECT ?"); pstmt.setString(1, "TEST"); ResultSet rs = pstmt.executeQuery(); assertTrue(rs.next()); assertEquals("TEST", rs.getString(1)); assertFalse(rs.next()); pstmt.close(); rs.close(); } /** * Test for "invalid parameter index" error. */ public void testPreparedStatementParsing3() throws Exception { PreparedStatement pstmt = con.prepareStatement( "UPDATE dbo.DEPARTMENTS SET DEPARTMENT_NAME=? WHERE DEPARTMENT_ID=?"); pstmt.setString(1, "TEST"); pstmt.setString(2, "TEST"); pstmt.close(); } /** * Test for [931090] ArrayIndexOutOfBoundsException in rollback() */ public void testPreparedStatementRollback1() throws Exception { Connection localCon = getConnection(); Statement stmt = localCon.createStatement(); stmt.execute("CREATE TABLE #psr1 (data BIT)"); localCon.setAutoCommit(false); PreparedStatement pstmt = localCon.prepareStatement("INSERT INTO #psr1 (data) VALUES (?)"); pstmt.setBoolean(1, true); assertEquals(1, pstmt.executeUpdate()); pstmt.close(); localCon.rollback(); ResultSet rs = stmt.executeQuery("SELECT data FROM #psr1"); assertFalse(rs.next()); rs.close(); stmt.close(); localCon.close(); try { localCon.commit(); fail("Expecting commit to fail, connection was closed"); } catch (SQLException ex) { assertEquals("HY010", ex.getSQLState()); } try { localCon.rollback(); fail("Expecting rollback to fail, connection was closed"); } catch (SQLException ex) { assertEquals("HY010", ex.getSQLState()); } } /** * Test for bug [938494] setObject(i, o, NUMERIC/DECIMAL) cuts off decimal places */ public void testPreparedStatementSetObject1() throws Exception { BigDecimal data = new BigDecimal(3.7D); Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #psso1 (data MONEY)"); PreparedStatement pstmt = con.prepareStatement("INSERT INTO #psso1 (data) VALUES (?)"); pstmt.setObject(1, data); assertEquals(1, pstmt.executeUpdate()); pstmt.close(); ResultSet rs = stmt.executeQuery("SELECT data FROM #psso1"); assertTrue(rs.next()); assertEquals(data.doubleValue(), rs.getDouble(1), 0); assertFalse(rs.next()); rs.close(); stmt.close(); } /** * Test for bug [938494] setObject(i, o, NUMERIC/DECIMAL) cuts off decimal places */ public void testPreparedStatementSetObject2() throws Exception { BigDecimal data = new BigDecimal(3.7D); Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #psso2 (data MONEY)"); PreparedStatement pstmt = con.prepareStatement("INSERT INTO #psso2 (data) VALUES (?)"); pstmt.setObject(1, data, Types.NUMERIC); assertEquals(1, pstmt.executeUpdate()); pstmt.close(); ResultSet rs = stmt.executeQuery("SELECT data FROM #psso2"); assertTrue(rs.next()); assertEquals(data.doubleValue(), rs.getDouble(1), 0); assertFalse(rs.next()); rs.close(); stmt.close(); } /** * Test for bug [938494] setObject(i, o, NUMERIC/DECIMAL) cuts off decimal places */ public void testPreparedStatementSetObject3() throws Exception { BigDecimal data = new BigDecimal(3.7D); Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #psso3 (data MONEY)"); PreparedStatement pstmt = con.prepareStatement("INSERT INTO #psso3 (data) VALUES (?)"); pstmt.setObject(1, data, Types.DECIMAL); assertEquals(1, pstmt.executeUpdate()); pstmt.close(); ResultSet rs = stmt.executeQuery("SELECT data FROM #psso3"); assertTrue(rs.next()); assertEquals(data.doubleValue(), rs.getDouble(1), 0); assertFalse(rs.next()); rs.close(); stmt.close(); } /** * Test for bug [938494] setObject(i, o, NUMERIC/DECIMAL) cuts off decimal places */ public void testPreparedStatementSetObject4() throws Exception { BigDecimal data = new BigDecimal(3.7D); Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #psso4 (data MONEY)"); PreparedStatement pstmt = con.prepareStatement("INSERT INTO #psso4 (data) VALUES (?)"); pstmt.setObject(1, data, Types.NUMERIC, 4); assertEquals(1, pstmt.executeUpdate()); pstmt.close(); ResultSet rs = stmt.executeQuery("SELECT data FROM #psso4"); assertTrue(rs.next()); assertEquals(data.doubleValue(), rs.getDouble(1), 0); assertFalse(rs.next()); rs.close(); stmt.close(); } /** * Test for bug [938494] setObject(i, o, NUMERIC/DECIMAL) cuts off decimal places */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -