FileDocCategorySizeDatePackage
SQLExceptionConversionTest.javaAPI DocHibernate 3.2.53476Thu Jun 07 17:48:34 BST 2007org.hibernate.test.exception

SQLExceptionConversionTest

public class SQLExceptionConversionTest extends org.hibernate.junit.functional.FunctionalTestCase
Implementation of SQLExceptionConversionTest.
author
Steve Ebersole

Fields Summary
Constructors Summary
public SQLExceptionConversionTest(String name)

		super(name);
	
Methods Summary
public java.lang.String[]getMappings()

		return new String[] {"exception/User.hbm.xml", "exception/Group.hbm.xml"};
	
public static junit.framework.Testsuite()

		return new FunctionalTestClassTestSuite(SQLExceptionConversionTest.class);
	
public voidtestBadGrammar()

		SQLExceptionConverter converter = getDialect().buildSQLExceptionConverter();

		Session session = openSession();
		Connection connection = session.connection();

        // prepare/execute a query against a non-existent table
		PreparedStatement ps = null;
		try {
			ps = connection.prepareStatement("SELECT user_id, user_name FROM tbl_no_there");
			ps.executeQuery();

			fail("SQL compilation should have failed");
		}
		catch( SQLException sqle ) {
			assertEquals( "Bad conversion [" + sqle.getMessage() + "]", SQLGrammarException.class, converter.convert(sqle, null, null).getClass() );
		}
		finally {
			if ( ps != null ) {
				try {
					ps.close();
				}
				catch( Throwable ignore ) {
					// ignore...
				}
			}
		}

		session.close();
	
public voidtestIntegrityViolation()

		if ( getDialect() instanceof MySQLMyISAMDialect ) {
			reportSkip( "MySQL (ISAM) does not support FK violation checking", "exception conversion" );
			return;
		}
		
		SQLExceptionConverter converter = getDialect().buildSQLExceptionConverter();

		Session session = openSession();
		session.beginTransaction();
		Connection connection = session.connection();

		// Attempt to insert some bad values into the T_MEMBERSHIP table that should
		// result in a constraint violation
		PreparedStatement ps = null;
		try {
			ps = connection.prepareStatement("INSERT INTO T_MEMBERSHIP (user_id, group_id) VALUES (?, ?)");
			ps.setLong(1, 52134241);    // Non-existent user_id
			ps.setLong(2, 5342);        // Non-existent group_id
			ps.executeUpdate();

			fail("INSERT should have failed");
		}
		catch(SQLException sqle) {
			JDBCExceptionReporter.logExceptions(sqle, "Just output!!!!");
			JDBCException jdbcException = converter.convert(sqle, null, null);
			assertEquals( "Bad conversion [" + sqle.getMessage() + "]", ConstraintViolationException.class , jdbcException.getClass() );
			ConstraintViolationException ex = (ConstraintViolationException) jdbcException;
			System.out.println("Violated constraint name: " + ex.getConstraintName());
		}
		finally {
			if ( ps != null ) {
				try {
					ps.close();
				}
				catch( Throwable ignore ) {
					// ignore...
				}
			}
		}

		session.getTransaction().rollback();
		session.close();