Table des matières
基本问题解决
项目环境:
错误描述:
报错日志:
原因分析:
解决这个问题的办法有三种,推荐第二种):" >解决方案(解决这个问题的办法有三种,推荐第二种):
1. 增加 MySQL 的 wait_timeout 属性的值 
2. 减少连接池内连接的生存周期
3. 定期使用连接池内的连接
知识扩展
C3P0" >C3P0
Maison base de données tutoriel mysql 使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方案_MySQL

使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方案_MySQL

Jun 01, 2016 pm 01:17 PM
数据库 解决方案 项目

本文提供了对c3p0与DBCP连接池连接MySql数据库时, 8小时内无请求自动断开连接的解决方案。首先介绍一下我在项目(c3p0连接池)中遇到的问题,后面还提供了使用DBCP连接池的解决方案。

基本问题解决

项目环境:

Java Web项目框架为Spring MVC+JPA,使用c3p0连接池,发布环境为Tomcat 7

错误描述:

项目运行一段时间(大概几个小时)之后访问时会出现第一次访问报错,再次访问正常的现象,且多次出现此问题。

报错日志:

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed:   
  2.     at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:428)  
  3.     at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372)  
  4.     at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417)  
  5.     at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255)  
  6.     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)  
  7.     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)  
  8.     at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)  
  9.     at com.appcarcare.cube.service.UserService$$EnhancerByCGLIB$$a4429cba.getUserDao()  
  10.   
  11.     at com.appcarcare.cube.servlet.DataCenterServlet$SqlTimer.connectSql(DataCenterServlet.java:76)  
  12.     at com.appcarcare.cube.servlet.DataCenterServlet$SqlTimer.run(DataCenterServlet.java:70)  
  13.     at java.util.TimerThread.mainLoop(Timer.java:555)  
  14.     at java.util.TimerThread.run(Timer.java:505)  
  15. Caused by: javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed:   
  16.     at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)  
  17.     at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)  
  18.   
  19.     at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1397)  
  20.     at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:62)  
  21.     at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:71)  
  22.     at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:60)  
  23.     at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:378)  
  24.     ... 11 more  
  25. Caused by: org.hibernate.TransactionException: JDBC begin transaction failed:   
  26.     at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:76)  
  27.     at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)  
  28.   
  29.     at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1426)  
  30.     at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:59)  
  31.     ... 14 more  
  32. Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure  
  33.   
  34. The last packet successfully received from the server was 1,836,166 milliseconds ago.  The last packet sent successfully to the server was 29,134 milliseconds ago.  
  35.     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)  
  36.     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)  
  37.     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)  
  38.     at java.lang.reflect.Constructor.newInstance(Constructor.java:526)  
  39.     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)  
  40.     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)  
  41.     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3567)  
  42.     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3456)  
  43.   
  44.     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3997)  
  45.     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)  
  46.     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)  
  47.     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2713)  
  48.     at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5060)  
  49.     at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881)  
  50.     at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:72)  
  51.   
  52.     ... 17 more  
  53. Caused by: java.net.SocketException: Software caused connection abort: recv failed  
  54.     at java.net.SocketInputStream.socketRead0(Native Method)  
  55.     at java.net.SocketInputStream.read(SocketInputStream.java:150)  
  56.     at java.net.SocketInputStream.read(SocketInputStream.java:121)  
  57.     at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)  
  58.     at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)  
  59.     at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)  
  60.     at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3014)  
  61.     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3467)  
  62.     ... 25 more  
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed: 
	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:428)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
	at com.appcarcare.cube.service.UserService$EnhancerByCGLIB$a4429cba.getUserDao(<generated>)

	at com.appcarcare.cube.servlet.DataCenterServlet$SqlTimer.connectSql(DataCenterServlet.java:76)
	at com.appcarcare.cube.servlet.DataCenterServlet$SqlTimer.run(DataCenterServlet.java:70)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)
Caused by: javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed: 
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)

	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1397)
	at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:62)
	at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:71)
	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:60)
	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:378)
	... 11 more
Caused by: org.hibernate.TransactionException: JDBC begin transaction failed: 
	at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:76)
	at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)

	at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1426)
	at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:59)
	... 14 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 1,836,166 milliseconds ago.  The last packet sent successfully to the server was 29,134 milliseconds ago.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3567)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3456)

	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3997)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2713)
	at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5060)
	at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881)
	at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:72)

	... 17 more
Caused by: java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:150)
	at java.net.SocketInputStream.read(SocketInputStream.java:121)
	at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
	at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
	at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
	at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3014)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3467)
	... 25 more</generated>
Copier après la connexion

 


原因分析:

MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

解决方案(解决这个问题的办法有三种,推荐第二种):

 

1. 增加 MySQL 的 wait_timeout 属性的值 

修改mysql安装目录下的配置文件 my.ini文件(如果没有此文件,复制“my-default.ini”文件,生成“复件 my-default.ini”文件。将“复件 my-default.ini”文件重命名成“my.ini” ),在文件中设置: 

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. wait_timeout=31536000  
  2. interactive_timeout=31536000  
wait_timeout=31536000
interactive_timeout=31536000
Copier après la connexion

这两个参数的默认值是8小时(60*60*8=28800)。

注意: 1.wait_timeout的最大值只允许2147483 (24天左右)

2.修改配置文件为网上大部分文章所提供的方式,也可以使用mysql命令对这两个属性进行修改



2. 减少连接池内连接的生存周期

减少连接池内连接的生存周期,使之小于上一项中所设置的wait_timeout 的值 

修改 c3p0 的配置文件,在 Spring 的配置文件中设置:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. "dataSource"  class="com.mchange.v2.c3p0.ComboPooledDataSource">       
  2. "maxIdleTime"value="1800"/>    
  3.     
  4.   
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  	
	<property name="maxIdleTime" value="1800"></property>  
	<!--other properties -->  
	</bean>
Copier après la connexion

3. 定期使用连接池内的连接

定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。 

修改 c3p0 的配置文件,在 Spring 的配置文件中设置:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1.        "dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">    
  2. "preferredTestQuery" value="SELECT 1"/>    
  3. "idleConnectionTestPeriod" value="18000"/>    
  4. "testConnectionOnCheckout" value="true"/>    
  5.   
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
	<property name="preferredTestQuery" value="SELECT 1"></property>  
	<property name="idleConnectionTestPeriod" value="18000"></property>  
	<property name="testConnectionOnCheckout" value="true"></property>  
	</bean>
Copier après la connexion

知识扩展

C3P0

C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。 c3p0配置文件

 

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. default-config>   
  2.      
  3.   property name="acquireIncrement">3property>   
  4.      
  5.   property name="acquireRetryAttempts">30property>   
  6.      
  7.   property name="acquireRetryDelay">1000property>   
  8.      
  9.   property name="autoCommitOnClose">falseproperty>   
  10.      
  11.   property name="idleConnectionTestPeriod">60property>   
  12.      
  13.   property name="initialPoolSize">3property>   
  14.      
  15.   property name="maxIdleTime">60property>   
  16.      
  17.   property name="maxPoolSize">15property>   
  18.      
  19.   property name="maxStatementsPerConnection">property>   
  20.      
  21.   property name="overrideDefaultPassword">passwordproperty>   
  22.      
  23.   property name="password">property>   
  24.      
  25.   property name="propertyCycle">300property>   
  26.      
  27.   property name="testConnectionOnCheckin">trueproperty>   
  28.      
  29.   property name="user">rootproperty>   
  30.   在Hibernate(spring管理)中的配置:   
  31.   bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">   
  32.   property name="driverClass">value>oracle.jdbc.driver.OracleDrivervalue>property>   
  33.   property name="jdbcUrl">value>jdbc:oracle:thin:@localhost:1521:Testvalue>property>   
  34.   property name="user">value>Kayvalue>property>   
  35.   property name="password">value>rootvalue>property>   
  36.      
  37.   property name="minPoolSize" value="10" />   
  38.      
  39.   property name="maxPoolSize" value="100" />   
  40.      
  41.   property name="maxIdleTime" value="1800" />   
  42.      
  43.   property name="acquireIncrement" value="3" />   
  44.   property name="maxStatements" value="1000" />   
  45.   property name="initialPoolSize" value="10" />   
  46.      
  47.   property name="idleConnectionTestPeriod" value="60" />   
  48.      
  49.   property name="acquireRetryAttempts" value="30" />   
  50.   property name="breakAfterAcquireFailure" value="true" />   
  51.   property name="testConnectionOnCheckout" value="false" />   
  52.   bean>   
  53.   ###########################   
  54.   ### C3P0 Connection Pool###   
  55.   ###########################   
  56.   #hibernate.c3p0.max_size 2   
  57.   #hibernate.c3p0.min_size 2   
  58.   #hibernate.c3p0.timeout 5000   
  59.   #hibernate.c3p0.max_statements 100   
  60.   #hibernate.c3p0.idle_test_period 3000   
  61.   #hibernate.c3p0.acquire_increment 2   
  62.   #hibernate.c3p0.validate false   
  63.   在hibernate.cfg.xml文件里面加入如下的配置:   
  64.      
  65.   property name="hibernate.c3p0.max_size">20property>   
  66.      
  67.   property name="hibernate.c3p0.min_size">5property>   
  68.      
  69.   property name="hibernate.c3p0.timeout">120property>   
  70.      
  71.   property name="hibernate.c3p0.max_statements">100property>   
  72.      
  73.   property name="hibernate.c3p0.idle_test_period">120property>   
  74.      
  75.   property name="hibernate.c3p0.acquire_increment">2property>   
  76.      
  77.   property name="hibernate.c3p0.validate">trueproperty>  
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'IA peut-elle vaincre le dernier théorème de Fermat ? Un mathématicien a abandonné 5 ans de sa carrière pour transformer 100 pages de preuve en code L'IA peut-elle vaincre le dernier théorème de Fermat ? Un mathématicien a abandonné 5 ans de sa carrière pour transformer 100 pages de preuve en code Apr 09, 2024 pm 03:20 PM

Le dernier théorème de Fermat, sur le point d'être conquis par l'IA ? Et la partie la plus significative de tout cela est que le dernier théorème de Fermat, que l’IA est sur le point de résoudre, vise précisément à prouver que l’IA est inutile. Autrefois, les mathématiques appartenaient au domaine de l’intelligence humaine pure ; aujourd’hui, ce territoire est déchiffré et piétiné par des algorithmes avancés. Image Le dernier théorème de Fermat est une énigme « notoire » qui intrigue les mathématiciens depuis des siècles. Cela a été prouvé en 1993, et les mathématiciens ont désormais un grand projet : recréer la preuve à l’aide d’ordinateurs. Ils espèrent que toute erreur logique dans cette version de la preuve pourra être vérifiée par un ordinateur. Adresse du projet : https://github.com/riccardobrasca/flt

Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Jun 03, 2024 pm 01:25 PM

Les défis courants rencontrés par les algorithmes d'apprentissage automatique en C++ incluent la gestion de la mémoire, le multithread, l'optimisation des performances et la maintenabilité. Les solutions incluent l'utilisation de pointeurs intelligents, de bibliothèques de threads modernes, d'instructions SIMD et de bibliothèques tierces, ainsi que le respect des directives de style de codage et l'utilisation d'outils d'automatisation. Des cas pratiques montrent comment utiliser la bibliothèque Eigen pour implémenter des algorithmes de régression linéaire, gérer efficacement la mémoire et utiliser des opérations matricielles hautes performances.

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Analyse et solutions des vulnérabilités de sécurité du framework Java Analyse et solutions des vulnérabilités de sécurité du framework Java Jun 04, 2024 pm 06:34 PM

L'analyse des vulnérabilités de sécurité du framework Java montre que XSS, l'injection SQL et SSRF sont des vulnérabilités courantes. Les solutions incluent : l'utilisation des versions du cadre de sécurité, la validation des entrées, le codage des sorties, la prévention de l'injection SQL, l'utilisation de la protection CSRF, la désactivation des fonctionnalités inutiles, la définition des en-têtes de sécurité. Dans les cas réels, la vulnérabilité d'injection ApacheStruts2OGNL peut être résolue en mettant à jour la version du framework et en utilisant l'outil de vérification d'expression OGNL.

Une analyse approfondie de la façon dont HTML lit la base de données Une analyse approfondie de la façon dont HTML lit la base de données Apr 09, 2024 pm 12:36 PM

HTML ne peut pas lire directement la base de données, mais cela peut être réalisé via JavaScript et AJAX. Les étapes comprennent l'établissement d'une connexion à la base de données, l'envoi d'une requête, le traitement de la réponse et la mise à jour de la page. Cet article fournit un exemple pratique d'utilisation de JavaScript, AJAX et PHP pour lire les données d'une base de données MySQL, montrant comment afficher dynamiquement les résultats d'une requête dans une page HTML. Cet exemple utilise XMLHttpRequest pour établir une connexion à la base de données, envoyer une requête et traiter la réponse, remplissant ainsi les données dans les éléments de la page et réalisant la fonction de lecture HTML de la base de données.

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Comment utiliser MySQLi pour établir une connexion à une base de données en PHP : Inclure l'extension MySQLi (require_once) Créer une fonction de connexion (functionconnect_to_db) Appeler la fonction de connexion ($conn=connect_to_db()) Exécuter une requête ($result=$conn->query()) Fermer connexion ( $conn->close())

Comment gérer les erreurs de connexion à la base de données en PHP Comment gérer les erreurs de connexion à la base de données en PHP Jun 05, 2024 pm 02:16 PM

Pour gérer les erreurs de connexion à la base de données en PHP, vous pouvez utiliser les étapes suivantes : Utilisez mysqli_connect_errno() pour obtenir le code d'erreur. Utilisez mysqli_connect_error() pour obtenir le message d'erreur. En capturant et en enregistrant ces messages d'erreur, les problèmes de connexion à la base de données peuvent être facilement identifiés et résolus, garantissant ainsi le bon fonctionnement de votre application.

See all articles