Acerca De MariaDB Connector/J

The most recent Stable (GA) release of MariaDB Connector/J is:
MariaDB Connector/J 3.5.0

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 20172.0.1Stable (GA)Java 8Release NotesChangelog
20 Apr 20172.0.0RCJava 8Release NotesChangelog
11 May 20171.6.0Stable (GA)Java 7Release NotesChangelog
20 Mar 20171.5.9Stable (GA)Java 7Release NotesChangelog

see all releases

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 6version up to 1.1.10
Java 7All versions before 2.0.0
Java 8All 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.

sequentialSoporte 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
failoverAlta 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
replicationAlta 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
auroraAlta 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

usernombre de usuario Base de datos.
since 1.0.0
passwordContraseña usuario base de datos.
since 1.0.0
rewriteBatchedStatementsPara 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 rewritten
insert 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 rewritten
INSERT 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
connectTimeoutThe connect timeout value, in milliseconds, or zero for no timeout.
Default: 0. Since 1.1.8
useServerPrepStmtsPrepareStatement 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

UseSSLFuerza SSL / TLS en conexión
por defecto: false. Desde 1.1.0
TrustServerCertificateCuando se usa SSL / TLS, no marque el certificado del servidor
defecto:. Falsa. Ya que 1.1.1
ServerSslCertpermisos 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.
keyStoreRuta 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.
KeyStorePasswordcontraseñ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.
KeyPasswordcontraseñ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.
TrustStoreRuta 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..
TrustStorePasswordcontraseñ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..
EnabledSslProtocolSuitesprotocolo 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
EnabledSslCipherSuitesFuerza 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

LogHabilitar 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
MaxQuerySizeToLogSólo los primeros caracteres correspondientes a este tamaño opciones se mostrarán en los registros
defecto: 1024. Desde 1.5.0
SlowQueryThresholdNanosregistrará consulta con el tiempo de ejecución superior a este valor (si está definida)
defecto: 1024. Desde 1.5.0
ProfileSqlconsulta de registro de tiempo de ejecución
defecto: false.. Desde 1.5.0


utilizan con poca frecuencia

PasswordCharacterEncodingIndicar 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
UseFractionalSecondsManejar 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
AllowMultiQueriespermitir multi-consultas como insertar en ab (i) valores (1); insertar en ab (i) valores (2). por defecto: false. Desde 1.0.0
DumpQueriesOnExceptionSi 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
UseCompressionpermitir la compresión en el Protocolo de MySQL
por defecto: false.. Desde 1.0.0
SocketFactoryutilizar una fábrica de sockets encargo, configurarlo para que el nombre completo de la clase que implementa javax.net.SocketFactory
desde 1.0.0 .
tcpNoDelaySistemas de opción en la caja de conexión correspondientes
desde 1.0.0.
tcpKeepAliveSistemas de opción en la caja de conexión correspondientes
desde 1.0.0.
tcpAbortiveCloseSistemas de opción en la caja de conexión correspondientes
desde 1.1.1.
TcpRcvBufconjunto tamaño del búfer de memoria intermedia TCP (SO_RCVBUF)
desde 1.0.0 .
TcpSndBufconjunto tamaño del búfer de memoria intermedia TCP (SO_SNDBUF)
desde 1.0.0 .
pipeEn Windows, especifique el nombre de canalización con nombre para conectarse a mysqld.exe
desde 1.1.3 .
tinyInt1isBitbandera de tipo de datos de mapeo, manejar MySQL Tiny como BIT (boolean)
defecto:. cierto. Ya que 1.0.0
YearIsDateTypeAño es de tipo fecha, en lugar de numérica
por defecto: true.. Desde 1.0.0
SessionVariablespares <var> = <valor> separadas por comas, las variables de sesión mysql, establecen al establecer una conexión con éxito
desde 1.1.0 .
LocalSocketpermite 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
SharedMemorypermite 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 .
LocalSocketAddressnombre de host o dirección IP para enlazar el conector de conexión a un conector local (UNIX dominio)
desde 1.1.7 .
SocketTimeoutdefinido 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
InteractiveClienttiempo 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
UseOldAliasMetadataBehaviormetadatos 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
CreateDatabaseIfNotExistla base de datos especificado en la URL se creará si no existe
por defecto: false.. Desde 1.1.7
ServerTimezoneDefine 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
PrepStmtCacheSizeSi useServerPrepStmts = true, define el tamaño de la caché declaración preparada.
defecto: 250. Desde 1.3.0
PrepStmtCacheSqlLimitsi no se almacenan en caché useServerPrepStmts = true, consultas definidas mayores de este tamaño.
defecto: 2048. Desde 1.3.0
JdbcCompliantTruncationerror 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
CacheCallableStmtsactivar / desactivar exigible Declaración caché
por defecto: true. Desde 1.4.0
CallableStmtCacheSizeEsto establece el número de declaraciones desembolsadas que el conductor caché por si VM "cacheCallableStmts" está habilitada
defecto:. Verdadera. Desde 1.4.0
UseBatchMultiSendNumberCuando 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
ConnectionAttributesCuando 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
EnablePacketDebugcontrolador 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

AutoReconnectCon 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
RetriesAllDownDurante 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
ValidConnectionTimeoutCon 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
LoadBalanceBlacklistTimeoutCuando 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
AssureReadOnlySi 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 to Statement.setFetchSize(1)). This value is still accepted for compatilibity reasons but rather use Statement.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();

Comments

Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.