2016-02-16 8 views

Odpowiedz

2

Jeśli nie chcesz to zrobić za pośrednictwem adresu URL, można użyć obiektu Properties z DriverManager:

Properties props = new Properties(); 
props.setProperty("user", ...); 
props.setProperty("password", ...); 
props.setProperty("rewriteBatchedStatements", "true"); 
Connection connection = DriverManager.getConnection(url, props); 

Jeśli używasz MysqlDataSource lub MysqlConnectionPoolDataSource, musisz ustawić właściwość rewriteBatchedStatements (lub ustawiający ustawiający setRewriteBatchedStatements(boolean)

Aby to zmienić w czasie działania po uzyskaniu połączenia, powinien mieć możliwość korzystania z:

((com.mysql.jdbc.ConnectionProperties) connection).setRewriteBatchedStatements(true); 

Uwaga: Mam tylko spojrzał na źródłach MySQL Connector/J, dla tej ostatniej opcji, nie mam przetestowałem to.

AKTUALIZACJA

Dla C3P0 można użyć następujących:

ComboPooledDataSource cpds = ... 
Connection connection = cpds.getConnection(); 
connection.unwrap(com.mysql.jdbc.ConnectionProperties.class).setRewriteBatchedStatements(true); 

C3P0 powinny być com.mchange:c3p0:0.9.5.2, należy zachować ostrożność z com.mchange - z drugiej GroupID kod ten nie działa.

+0

@Cherry Dzięki za edycję. Całkowicie zapomniałem wspomnieć o "unwrap", prawdopodobnie będzie działać dla normalnego połączenia MySQL i dla zawiniętych połączeń MySQL innych źródeł danych. –

0

Powinieneś być w stanie to zrobić przy użyciu Connection.setClientInfo:

Connection c = ...; 
c.setClientInfo("rewriteBatchedStatements", "true"); 
+0

Czy wiesz na pewno, że to działa? Po prostu rzuciłem okiem na kod źródłowy MySQL/kod źródłowy J, ale setClientInfo wydaje się tylko ustawiać informacje po stronie serwera dotyczące bieżącego połączenia. –

Powiązane problemy