package cn.org.rapid_framework.generator.util.sqlerrorcode; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import javax.sql.DataSource; import cn.org.rapid_framework.generator.GeneratorConstants; import cn.org.rapid_framework.generator.GeneratorProperties; import cn.org.rapid_framework.generator.GeneratorTestCase; import cn.org.rapid_framework.generator.provider.db.DataSourceProvider; import cn.org.rapid_framework.generator.provider.db.sql.SqlFactory; public class SQLErrorCodeSQLExceptionTranslatorTest extends GeneratorTestCase { public void testTranslator() { DataSource ds = DataSourceProvider.getDataSource(); SQLErrorCodeSQLExceptionTranslator translator = SQLErrorCodeSQLExceptionTranslator.getSQLErrorCodeSQLExceptionTranslator(ds); try { execute("insert into role_permission(permissoin_id,role_id) values (123,123)"); fail(); }catch(SQLException e) { e.printStackTrace(); System.err.println("ErrorCode:"+e.getErrorCode()+" SQLState:"+e.getSQLState()); assertTrue(translator.isDataIntegrityViolation(e)); } new SqlFactory().parseSql("insert into role_permission(permissoin_id,role_id) values (123,123)"); new SqlFactory().parseSql("insert into user_info(user_id,username,password) values (123,'123',123)"); } public void execute(String sql) throws SQLException { DataSource ds = DataSourceProvider.getDataSource(); Connection conn = ds.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); if(ps.execute()) { } ps.close(); conn.close(); } public void test_oracle() { SQLErrorCodeSQLExceptionTranslator translator = newTranslator("Oracle"); assertTrue(translator.isDataIntegrityViolation(new SQLException("","",12899))); } public void test_ignore_by_config() { SQLErrorCodeSQLExceptionTranslator translator = newTranslator("Oracle"); assertFalse(translator.isDataIntegrityViolation(new SQLException("","",12345))); assertFalse(translator.isDataIntegrityViolation(new SQLException("","",67890))); GeneratorProperties.setProperty(GeneratorConstants.SQLPARSE_IGNORE_SQL_EXCEPTION_ERROR_CODES, "12345,67890"); assertTrue(translator.isDataIntegrityViolation(new SQLException("","",12345))); assertTrue(translator.isDataIntegrityViolation(new SQLException("","",67890))); GeneratorProperties.setProperty(GeneratorConstants.SQLPARSE_IGNORE_SQL_EXCEPTION_ERROR_CODES, "54321,09876"); assertFalse(translator.isDataIntegrityViolation(new SQLException("","",12345))); assertFalse(translator.isDataIntegrityViolation(new SQLException("","",67890))); } private SQLErrorCodeSQLExceptionTranslator newTranslator(String dbName) { SQLErrorCodeSQLExceptionTranslator translator = new SQLErrorCodeSQLExceptionTranslator(); SQLErrorCodes codes = SQLErrorCodesFactory.getInstance().getErrorCodes(dbName); assertNotNull(codes); translator.setSqlErrorCodes(codes); return translator; } }