Acerca De MariaDB Connector/J
The most recent Stable (GA) release of MariaDB Connector/J is:
MariaDB Connector/J 3.5.1
MariaDB Connector/J es usado para conectar desarrollo de aplicaciones en Java para MariaDB y MySQL bases de datos usando el estandar JDBC API. La libreria es LGPL licensed.
Fecha | Version | Estado | Min. Java Compat. | Notas de Version | Registro de cambios |
---|---|---|---|---|---|
11 May 2017 | 2.0.1 | Stable (GA) | Java 8 | Release Notes | Changelog |
20 Apr 2017 | 2.0.0 | RC | Java 8 | Release Notes | Changelog |
11 May 2017 | 1.6.0 | Stable (GA) | Java 7 | Release Notes | Changelog |
20 Mar 2017 | 1.5.9 | Stable (GA) | Java 7 | Release Notes | Changelog |
Contents
Acerca De MariaDB Connector/J
MariaDB el Conector/J es un Tipo 4 conductor JDBC. Fue desarrollado expresamente como un peso ligero JDBC el conector para el empleo con MariaDB y servidores de base de datos MySQL. Estaba al principio basado en la Llovizna JDBC el código con numerosas adiciones y correcciones de errores.
Obtención del driver
MariaDB el código original de Conector/J tarballs puede ser descargado de : https://downloads.mariadb.org/connector-java/
Pre-construccion archivos .jar pueden ser descargados desde: https://mariadb.com/my_portal/download/java-client
Instalación del driver
La instalación de la biblioteca de cliente es muy simple. El archivo jar debería ser guardado en un lugar apropiado para su uso y el classpath de su aplicacion uso cambiado para incluir Conector/J MariaDB más bien que su corriente conector.
Usando maven :
<dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>xxx</version> </dependency>
Requerimientos
Java 6 | version up to 1.1.10 |
---|---|
Java 7 | All versions before 2.0.0 |
Java 8 | All versions |
- com.sun.JNA es usado por algunas funciones de biblioteca y un jar está disponible en
https://github.com/twall/jna
- sólo necesario cuando conecta al servidor con socket unix o ventanas memoria compartida
- A MariaDB or MySQL Server
- maven (Sólo si desea crear desde el origen)
Código fuente
El código fuente está disponible en GitHub: https://github.com/MariaDB/mariadb-connector-j Y el desarrollo más reciente Se puede obtener mediante el siguiente comando:
git clone https://github.com/MariaDB/mariadb-connector-j.git
Licencia
Licencia Pública General Menor GNU publicada por la Free Software Foundation; Ya sea la versión 2.1 de la Licencia, o (a su elección) cualquier versión posterior.
Construcción y prueba del driver
Esta sección trata de construir el conector desde la fuente y probarlo. Si Usted ha descargado un conector preparado, en un archivo .jar, entonces esta sección Pueden omitirse.
MariaDB Client Library para aplicaciones Java utiliza maven para la creación. Tú primero Necesita asegurarse de que tiene tanto java como maven instalados en su servidor antes de Puede construir el controlador.
Para ejecutar la prueba de unidad, necesitará un servidor MariaDB o MySQL Localhost (en el puerto TCP predeterminado 3306) y una base de datos llamada 'testj', y el usuario 'Root' con una contraseña vacía
git clone https://github.com/MariaDB/mariadb-connector-j.git # Or, unpack the source distribution tarball cd mariadb-connector-j # For the unit test run, start local mysqld mysqld, # ensure that user root with empty password can login mvn package # If you want to build without running unit tests, use # mvn -Dmaven.test.skip=true package
After that, you should have JDBC jar mariadb-java-client-x.y.z.jar in the 'target' subdirectory
Uso del controlador
Las subsecciones siguientes muestran el formato de cadenas de conexión JDBC para MariaDB y servidores de bases de datos MySQL. Además, se proporciona código de ejemplo que muestra cómo conectarse a uno de estos servidores y crear una tabla.
Obteniendo una nueva conexión
Existen dos formas estándar para obtener una conexión:
Uso de DriverManager
La forma preferida de conectarse es usarhttps:docs.oracle.com/javase/7/docs/api/java/sql/DriverManager.html. Las aplicaciones diseñadas para utilizar el gestor de controladores para localizar el punto de entrada necesitan No más configuración. MariaDB Connector / J Ser cargado automáticamente y utilizado de la manera que cualquier conductor anterior de MySQL Ha estado.
Ejemplo:
Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword");
The legacy way of loading a JDBC driver (using Class.forName("org.mariadb.jdbc.Driver")) still works.
Uso de la piscina externa
Cuando se utiliza un grupo de conexiones externo, se debe configurar la clase de controlador mariadb org.mariadb.jdbc.Driver
.
Ejemplo usando hikariCP JDBC connection pool:
final HikariDataSource ds = new HikariDataSource(); ds.setMaximumPoolSize(20); ds.setDriverClassName("org.mariadb.jdbc.Driver"); ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db"); ds.addDataSourceProperty("user", "root"); ds.addDataSourceProperty("password", "myPassword"); ds.setAutoCommit(false);
Tenga en cuenta que la clase de controlador proporcionada por MariaDB Connector / J no es com.mysql.jdbc.Driver
peroorg.mariadb.jdbc.Driver
!
La org.mariadb.jdbc.MariaDbDataSource
Class se puede utilizar cuando la configuración de datasource de la agrupación sólo permite la implementación de java.sql.Datasource.
Cadenas de conexión
El formato de la cadena de conexión JDBC es
jdbc:(mysql|mariadb):[replication:|failover:|sequential:|aurora:]//<hostDescription>[,<hostDescription>...]/[database][?<key1>=<value1>[&<key2>=<value2>]]
HostDescription:
<host>[:<portnumber>] or address=(host=<host>)[(port=<portnumber>)][(type=(master|slave))]
El host debe ser un nombre DNS o una dirección IP. En caso de ipv6 y simple host
Descripción, la dirección IP debe escribirse entre paréntesis. El puerto predeterminado
Es 3306
. El tipo predeterminado es master
. Si replication
failover está establecido, de forma predeterminada el primer host es maestro y los demás son esclavos.
Ejemplos:
localhost:3306
[2001:0660:7401:0200:0000:0000:0edf:bdd7]:3306
somehost.com:3306
address=(host=localhost)(port=3306)(type=master)
Parámetros de conmutación por error
La conmutación por error se introdujo en Connector/J 1.2.0.
sequential | Soporte de conmutación por error para clúster maestro de replicación (por ejemplo Galera) sin alta disponibilidad. Los hosts se conectarán en el orden en que fueron declarados. Ejemplo al usar la cadena url de jdbc "jdbc:mysql:replication:host1,host2,host3/testdb" : Cuando conecta, el driver siempre sera el primer host1, y si no esta disponible host2 y luego. Después de un fallo de host, el controlador se volverá a conectar de acuerdo con este pedido. since 1.3.0 |
---|---|
failover | Alta disponibilidad (inicialización de la conexión de selección aleatoria) con soporte de conmutación por error para el clúster de replicación maestra (por ejemplo Galera). since 1.2.0 |
replication | Alta disponibilidad (inicialización de conexión de selección aleatoria) con soporte de conmutación por error para clúster de replicación maestro / esclavo (uno o varios masters) since 1.2.0 |
aurora | Alta disponibilidad (inicialización de conexión de selección aleatoria) con soporte de conmutación por error para el clúster de replicación de Amazon Aurora since 1.2.0 |
Ver failover description para mas informacion.
Parámetros URL opcionales
Observación general: Se aceptan opciones desconocidas y se ignoran en silencio.
Actualmente se admiten las siguientes opciones.
Opciones esenciales
user | nombre de usuario Base de datos. since 1.0.0 |
---|---|
password | Contraseña usuario base de datos. since 1.0.0 |
rewriteBatchedStatements | Para consultas de inserción, vuelva a escribir batchedStatement Para ejecutar en un solo executeQuery. ejemplo: insert into ab (i) values (?) with first batch values = 1, second = 2 will be rewritteninsert into ab (i) values (1), (2) . If query cannot be rewriten in "multi-values", rewrite will use multi-queries : INSERT INTO TABLE(col1) VALUES (?) ON DUPLICATE KEY UPDATE col2=? con valores [1,2] y [2,3]" will be rewrittenINSERT INTO TABLE(col1) VALUES (1) ON DUPLICATE KEY UPDATE col2=2; INSERT INTO TABLE(col1) VALUES (3) ON DUPLICATE KEY UPDATE col2=4 cuando activa, the useServerPrepStmts option is set to false Default: false. Since 1.1.8 |
connectTimeout | The connect timeout value, in milliseconds, or zero for no timeout. Default: 0. Since 1.1.8 |
useServerPrepStmts | PrepareStatement se preparan en el lado del servidor antes de ejecutar. Las aplicaciones que utilizan repetidamente las mismas consultas tienen valor para activar esta opción, pero el caso general es usar el comando directo (protocolo de texto). if rewriteBatchedStatements Se establece en true, esta opción se establecerá en false Defecto: false (was true before 1.6.0). Since 1.3.0 |
useBatchMultiSend | *Not compatible con aurora* El controlador puede enviar consultas por lote. Si se establece en false , las consultas se envían una a una, esperando el resultado antes de enviar la siguiente. Si se establece en true , las consultas se enviarán por lote correspondiente a la useBatchMultiSendNumber opcion valor (defecto 100) O según elmax_allowed_packet Servidor si el tamaño del paquete no permite el envío de tantas consultas. Los resultados se leerán más tarde, evitando una gran cantidad de latencia de red cuando el cliente y el servidor no están en el mismo host. Esta opción es principalmente efectiva cuando el cliente está distante del servidor. Más información here Predeterminado: true (false si se utiliza la conmutación por error aurora). Ya que 1.5.0 |
TLS (SSL)
mas informacion en Using TLS/SSL con MariaDB java connector
UseSSL | Fuerza SSL / TLS en conexión por defecto: false. Desde 1.1.0 |
---|---|
TrustServerCertificate | Cuando se usa SSL / TLS, no marque el certificado del servidor defecto:. Falsa. Ya que 1.1.1 |
ServerSslCert | permisos que proporcionan el certificado del servidor en forma DER, o certificado de CA de servidor. El servidor se añadirá a trustStor. Esto permite que un certificado autofirmado para ser de confianza Puede ser utilizado en una de las 3 formas:. * SSLServerCert = / ruta / a / cert.pem (ruta completa al certificado) * SSLServerCert = ruta de clases: relative / cert.pem (en relación a la ruta de clase actual) * o una cadena de certificados DER codificada como pie de la letra "------ ----- BEGIN CERTIFICATE" desde 1.1.3. |
keyStore | Ruta de archivo del archivo de almacén de claves que contiene los certificados de clave privada del cliente almacenar y asociar (similar a la propiedad del sistema Java "javax.net.ssl.keyStore", pero asegúrese de que se utilizan sólo las entradas de la clave privada) (alias de legado clientCertificateKeyStoreUrl) Desde 1.3.4. |
KeyStorePassword | contraseña para el almacén de claves de certificado de cliente (similar a la propiedad del sistema Java "javax.net.ssl.keyStorePassword") (alias legado clientCertificateKeyStorePassword) Desde 1.3.4. |
KeyPassword | contraseña para la clave privada en el almacén de claves de certificado de cliente. (Sólo es necesario si la contraseña de clave privada difieren de contraseña del almacén) Desde 1.5.3. |
TrustStore | Ruta de archivo del archivo trustStore (similar a la propiedad del sistema Java "javax.net.ssl.trustStore"). (Alias legado trustCertificateKeyStoreUrl) utilizar el archivo especificado para certificados raíz de confianza Cuando se establece, anula serverSslCert Desde 1.3.4.. |
TrustStorePassword | contraseña para el archivo de certificados raíz de confianza (similar a la propiedad del sistema Java "javax.net.ssl.trustStorePassword") (alias legado trustCertificateKeyStorePassword) Desde 1.3.4.. |
EnabledSslProtocolSuites | protocolo SSL Fuerza TLS a un conjunto específico de versiones TLS (lista separada por comas). Ejemplo: "TLSv1, TLSv1.1, TLSv1.2" ( "enabledSSLProtocolSuites" Alias funciona también) defecto: TLSv1, TLSv1.1. Desde 1.5.0 |
EnabledSslCipherSuites | Fuerza TLS / cifrado SSL (lista separada por comas) Ejemplo: ". TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" defecto:. Usar sistemas de cifrado JRE 1.5.0 Desde |
Conectarse
Log | Habilitar registro de la información. requieren SLF4J versión> 1.4 dependency. Log nivel se corresponde con el registro SLF4J aplicación por defecto: false. Desde 1.5.0 |
---|---|
MaxQuerySizeToLog | Sólo los primeros caracteres correspondientes a este tamaño opciones se mostrarán en los registros defecto: 1024. Desde 1.5.0 |
SlowQueryThresholdNanos | registrará consulta con el tiempo de ejecución superior a este valor (si está definida) defecto: 1024. Desde 1.5.0 |
ProfileSql | consulta de registro de tiempo de ejecución defecto: false.. Desde 1.5.0 |
utilizan con poca frecuencia
PasswordCharacterEncoding | Indicar contraseña codificación charset. charset valor debe ser un Java charset. Ejemplo: "UTF-8" defecto: nulo (= de plataforma de juego de caracteres por defecto). Desde 1.5.9 |
---|---|
UseFractionalSeconds | Manejar correctamente una precisión por debajo de las marcas de tiempo (función disponible con MariaDB 5.3 y posteriores) componentes Puede confundir la 3 ª parte (hibernado) defecto:.. Verdadera. Ya que 1.0.0 |
AllowMultiQueries | permitir multi-consultas como insertar en ab (i) valores (1); insertar en ab (i) valores (2) . por defecto: false. Desde 1.0.0 |
DumpQueriesOnException | Si se establece en 'true', se produce una excepción durante la ejecución de la consulta que contiene una cadena de consulta por defecto: false.. Desde 1.1.0 |
UseCompression | permitir la compresión en el Protocolo de MySQL por defecto: false.. Desde 1.0.0 |
SocketFactory | utilizar una fábrica de sockets encargo, configurarlo para que el nombre completo de la clase que implementa javax.net.SocketFactory desde 1.0.0 . |
tcpNoDelay | Sistemas de opción en la caja de conexión correspondientes desde 1.0.0. |
tcpKeepAlive | Sistemas de opción en la caja de conexión correspondientes desde 1.0.0. |
tcpAbortiveClose | Sistemas de opción en la caja de conexión correspondientes desde 1.1.1. |
TcpRcvBuf | conjunto tamaño del búfer de memoria intermedia TCP (SO_RCVBUF) desde 1.0.0 . |
TcpSndBuf | conjunto tamaño del búfer de memoria intermedia TCP (SO_SNDBUF) desde 1.0.0 . |
pipe | En Windows, especifique el nombre de canalización con nombre para conectarse a mysqld.exe desde 1.1.3 . |
tinyInt1isBit | bandera de tipo de datos de mapeo, manejar MySQL Tiny como BIT (boolean) defecto:. cierto. Ya que 1.0.0 |
YearIsDateType | Año es de tipo fecha, en lugar de numérica por defecto: true.. Desde 1.0.0 |
SessionVariables | pares <var> = <valor> separadas por comas, las variables de sesión mysql, establecen al establecer una conexión con éxito desde 1.1.0 . |
LocalSocket | permite conectar a la base de datos a través del socket de dominio Unix, si el servidor lo permite. El valor es la ruta de socket de dominio Unix (es decir, parámetro de base de datos "socket": seleccione @@ socket) desde. 1.1.4 |
SharedMemory | permite conectar a la base de datos a través de memoria compartida, si el servidor lo permite. El valor es el nombre de la base de la memoria compartida desde 1.1.4 . |
LocalSocketAddress | nombre de host o dirección IP para enlazar el conector de conexión a un conector local (UNIX dominio) desde 1.1.7 . |
SocketTimeout | definido el tiempo de espera de toma de red (SO_TIMEOUT) en milisegundos. El valor 0 desactiva este tiempo de espera. defecto: 0 (configuración estándar) o utilizando 10000ms ( "Aurora" configuración de conmutación por error) desde 1.1.7 |
InteractiveClient | tiempo de espera de la sesión se define por la wait_timeout variable de servidor. Configuración interactiveClient a cierto le dirá al servidor que utilice el interactive_timeout variable de servidor defecto:. falsa.Desde 1.1.7 |
UseOldAliasMetadataBehavior | metadatos ResultSetMetaData.getTableName () devuelve el nombre de la tabla física. permisos "useOldAliasMetadataBehavior" Activación del código heredado que envía el alias de la tabla si se establece. por defecto: false. Desde 1.1.9 |
CreateDatabaseIfNotExist | la base de datos especificado en la URL se creará si no existe por defecto: false.. Desde 1.1.7 |
ServerTimezone | Define la zona horaria del servidor utilizar sólo si el servidor tiene una aplicación jre tiempo diferente del servidor (mejor tener la misma zona horaria del servidor cuando sea posible) desde 1.1.... 7 |
PrepStmtCacheSize | Si useServerPrepStmts = true, define el tamaño de la caché declaración preparada. defecto: 250. Desde 1.3.0 |
PrepStmtCacheSqlLimit | si no se almacenan en caché useServerPrepStmts = true, consultas definidas mayores de este tamaño. defecto: 2048. Desde 1.3.0 |
JdbcCompliantTruncation | error de truncamiento ( "Datos truncados para la columna '%' en la fila%", "valor fuera de rango para la columna '%' en la fila%") será lanzado como un error, y no como una advertencia por defecto.: cierto. Ya que 1.4.0 |
CacheCallableStmts | activar / desactivar exigible Declaración caché por defecto: true. Desde 1.4.0 |
CallableStmtCacheSize | Esto establece el número de declaraciones desembolsadas que el conductor caché por si VM "cacheCallableStmts" está habilitada defecto:. Verdadera. Desde 1.4.0 |
UseBatchMultiSendNumber | Cuando la opción useBatchMultiSend está activo, indique la consulta máxima enviar en una fila antes de leer los resultados defecto:. 100. Desde 1.5.0 |
ConnectionAttributes | Cuando performance_schema está activo, permitir enviar alguna información del servidor cliente en una llave; formato de par de valores (ejemplo: connectionAttributes = key1:. valor1, key2, valor2) Esas informaciones puede ser recuperada en el servidor dentro de las tablas y performance_schema.session_connect_attrs. Performance_schema.session_account_connect_attrs Esto puede permitir desde el servidor una identificación de cliente / aplicación Desde 1.4.0 |
UsePipelineAuth | * No es compatible con la aurora * Durante la conexión, diferentes consultas se ejecutan. Cuando la opción está activa esas consultas se envían utilizando tubería (todas las consultas se envían, a continuación, sólo todos los resultados son lee), que permite la creación de una conexión más rápida defecto:. Verdadera. Desde 1.6.0 |
EnablePacketDebug | controlador a guardar los últimos 16 intercambios de paquetes MySQL (limitado a primeros 1000 bytes). será añadido valor hexadecimal de esos paquetes a StackTrace cuando se produce una IOException Esta opción no tiene ningún impacto en el rendimiento, pero controlador tomará 16kb más memoria defecto:.. falsa. Desde 1.6.0, 2.0.1 |
parámetros de conmutación por error / Alta disponibilidad URL
AutoReconnect | Con la conmutación por error básico: si es cierto, va a intentar recrear conexión después de una conmutación por error. Con la conmutación por error estándar: si es cierto, intentará volver a crear la conexión incluso si no hay una solución temporal (como usar una conexión maestro temporal hasta que vuelva a conectar a una conexión de esclavo) defecto es falso desde entonces. 1.1.7 |
---|---|
RetriesAllDown | Durante la búsqueda de un host válido, el número máximo de intentos de conexión antes de lanzar una excepción defecto:.. 120 segundos desde 1.2.0 |
FailoverLoopRetries | . Al buscar en silencio durante un host válido, el número máximo de intentos de conexión Esto difiere del parámetro "retriesAllDown" porque esta búsqueda es silenciosa utiliza, por ejemplo después de una desconexión de una conexión de esclavos al utilizar la conexión principal Por defecto: 120 desde entonces. 1.2.0 |
ValidConnectionTimeout | Con varios hosts, una vez transcurrido este tiempo en segundos, verifica que las conexiones no se han perdido Cuando 0, se llevará a cabo ninguna verificación.. defecto: 120 segundos desde 1.2.0 |
LoadBalanceBlacklistTimeout | Cuando una conexión falla, este host en la lista negra de la cantidad "loadBalanceBlacklistTimeout" de tiempo Cuando se conecta a un host, el controlador intentará conectarse a un host en la lista de los ejércitos no en la lista negra y, sólo si no se encuentra ninguno, el intento de la lista negra los Esta lista negra es compartida dentro del cargador de clases defecto:... 50 segundos desde 1.2.0 |
AssureReadOnly | Si es verdad, en alta disponibilidad, y el cambio a una gran cantidad de sólo lectura, aseguran que este host está en modo de sólo lectura mediante el establecimiento de la sesión de sólo lectura defecto a false Desde 1.3... 0 |
JDBC notas de implementación de la API
"LOAD DATA INFILE"
La forma más rápida para cargar una gran cantidad de datos está utilizando DATOS DE CARGA
INFILE.
Sin embargo, el uso de "LOAD DATA LOCAL INFILE" (es decir: la carga de un fichero desde el cliente) puede ser un problema de
seguridad:
- Un "hombre en el medio" servidor proxy puede cambiar el archivo real solicitada por el servidor por lo que el cliente enviará un archivo local a este proxy.
- si alguien puede ejecutar una consulta desde el cliente, que puede tener acceso a cualquier archivo en el cliente (según los derechos del usuario que ejecuta el proceso del cliente). Una opción específica "allowLocalInfile" (por defecto a true) puede desactivar la funcionalidad del lado del cliente. La variable local_infile global puede desactivar la carga de datos LOCAL INFILE en el lado del servidor. Un método no JDBC puede permitir el uso de este tipo de consulta sin este problema de seguridad: La aplicación tiene que crear un InputStream con el archivo a cargar. Si MariaDbStatement.setLocalInfileInputStream (InputStream flujoEntrada) se establece, el flujoEntrada se enviará al servidor, reemplazando el contenido del archivo (trabajando incluso con la opción "allowLocalInfile" desactivado). Ejemplo de código:
Statement statement = ... InputStream in = new FileInputStream("/file.sql"); if (statement.isWrapperFor(MariaDbStatement.class)) { MariaDbStatement mariaDbStatement = statement.unwrap(MariaDbStatement.class); mariaDbStatement.setLocalInfileInputStream(in); String sql = "LOAD DATA LOCAL INFILE 'dummyFileName'" + " INTO TABLE gigantic_load_data_infile " + " FIELDS TERMINATED BY '\\t' ENCLOSED BY ''" + " ESCAPED BY '\\\\' LINES TERMINATED BY '\\n'"; statement.execute(sql); } else { in.close(); throw new RuntimeException("Mariadb JDBC adaptor must be used"); }
Desde 1.5.0, interceptores ahora puede filtrar los datos CARGA INFILE consultas locales en función de nombre de archivo.
Estos interceptores deben implementar el org.mariadb.jdbc.LocalInfileInterceptor
interfaz. Interceptores utilizan el ServiceLoader patrón, por lo que los interceptores se deben definir en el /
los servicios / org.mariadb.jdbc.LocalInfileInterceptor archivo META-INF.
Ejemplo:
Crear la META-INF / services / org.mariadb.jdbc.LocalInfileInterceptor archivo con contenido
org.project.LocalInfileInterceptorImpl.
public class LocalInfileInterceptorImpl implements LocalInfileInterceptor { @Override public boolean validate(String fileName) { File file = new File(fileName); String absolutePath = file.getAbsolutePath(); String filePath = absolutePath.substring(0,absolutePath.lastIndexOf(File.separator)); return filePath.equals("/var/tmp/exchanges"); } }
Puede evitar definir el archivo META-INF / services usando
google de auto-servicio marco Utilizando el ejemplo anterior, sólo tiene que
añadir @AutoService (LocalInfileInterceptor.class)
, y su interceptor se definirá de forma automática.
@AutoService(LocalInfileInterceptor.class) public class LocalInfileInterceptorImpl implements LocalInfileInterceptor { @Override public boolean validate(String fileName) { File file = new File(fileName); String absolutePath = file.getAbsolutePath(); String filePath = absolutePath.substring(0,absolutePath.lastIndexOf(File.separator)); return filePath.equals("/var/tmp/exchanges"); } }
Ajuste un tiempo de espera de la consulta
Conductor sigue las especificaciones de JDBC, permitiendo Statement.setQueryTimeout () para una declaración particular. Si el objetivo es establecer un tiempo de espera para todas las consultas, desde la versión 10.1.1, MariaDB servidor permite que un [[abortingdeclaraciones / | solución para limitar el tiempo de consulta]] mediante el establecimiento de una variable del sistema max_statement_time. Esta solución se encargará de consulta tiempo de espera mejor (y más rápido) que las soluciones de Java (JPA2, "javax.persistence.query.timeout", Piscinas solución integrada como Tomcat JDBC-pool "QueryTimeout" ...). Opción "sessionVariables" permiso para establecer esta variable de sistema fácilmente: Ejemplo:
#will set a maximum query timeout of 10 seconds for this connection jdbc:mariadb://localhost/db?user=user&sessionVariables=max_statement_time=10
conjuntos de resultados Streaming
Por defecto, << código >> Statement.executeQuery () << / >> código leerá el resultado conjunto completo desde el servidor. Con grandes conjuntos de
resultados, esto requerirá grandes cantidades de memoria.
Para evitar el uso de demasiada memoria, en lugar utilizar Statement.setFetchSize (int numberOfRowInMemory) para indicar el número de
filas que se almacena en la memoria
Ejemplo:
utilizando Statement.setFetchSize(1000)
indicates that 1000 rows will be stored in memory.
So, when the query has executed, 1000 rows will be in memory. After 1000 ResultSet.next()
, los
próximos 1000 filas serán almacenados en la memoria, y así sucesivamente. Tenga en cuenta que el servidor espera por lo general los clientes para
leer el conjunto de resultados con relativa rapidez. El net_write_timeout servidor variable
controla este comportamiento (por defecto es 60).
Si no que los resultados sean manipulados de esta cantidad de tiempo que existe la posibilidad diferente:
- Si su versión del servidor> 10.1.2, puede utilizar la consulta "sentencia SET net_write_timeout = 10000 PARA XXX" XXX con la consulta "normal". Esto indicará que específicamente para esta consulta, net_write_timeout se establece en un tiempo más largo (10 000 en este ejemplo).
- para los servidores de mayor edad, una consulta específica tendrá que establecer temporalmente net_write_timeout ( "DECLARACIÓN net_write_timeout = SET ..."), y la puso de nuevo más tarde.
- si su aplicación por lo general utiliza una gran cantidad de largas consultas con ir a buscar el tamaño, la conexión se puede establecer utilizando la
opción "sessionVariables = net_write_timeout = xxx"
Incluso el uso de setFetchSize, el servidor enviará los resultados al cliente. Enviar otra consulta en la misma conexión será una excepción
hasta que todos los resultados no se leen. Antes de la versión 1.4.0, el único valor aceptado para ir a buscar el tamaño era
Statement.setFetchSize(Integer.MIN_VALUE)
(equivalent toStatement.setFetchSize(1)
). This value is still accepted for compatilibity reasons but rather useStatement.setFetchSize(1)
, ya que según JDBC El valor debe ser> = 0.
Declaraciones preparadas
El controlador utiliza declaraciones preparadas servidor como un estándar para comunicarse con la base de datos (ya 1.3.0). Si los "allowMultiQueries" u opciones "rewriteBatchedStatements" se establecen en true, el conductor sólo utilizará el protocolo de texto. declaraciones preparadas (parámetro de sustitución) es manejado por el conductor, en el lado del cliente.
CallableStatement
aplicación declaración exigible no tendrá que acceder a los metadatos procedimiento almacenado (mysql.proc) tabla si los dos siguientes son verdaderas
- CallableStatement.getMetadata () no se utiliza
- Los parámetros se accede mediante un índice, no por su nombre Cuando sea posible, siguiendo las dos reglas anteriores proporciona una mejor velocidad y elimina las preocupaciones sobre los privilegios SELECT en el mysql.proc mesa.
clases opcional JDBC
Las siguientes interfaces opcionales están implementadas por la clase org.mariadb.jdbc.MariaDbDataSource: javax.sql.DataSource, javax.sql.ConnectionPoolDataSource javax.sql.XADataSource cuidado: org.mariadb.jdbc.MySQLDataSource ya no existe y debe ser reemplazado con org.mariadb.jdbc.MariaDbDataSource desde v1.3.0
Ejemplos de uso
El siguiente código muestra un ejemplo básico de cómo conectarse a un servidor MySQL y MariaDB o crear una tabla.
La creación de una tabla en un servidor MariaDB o MySQL
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "username", "password"); Statement stmt = connection.createStatement(); stmt.executeUpdate("CREATE TABLE a (id int not null primary key, value varchar(20))"); stmt.close(); connection.close();