questions d'entretien javaweb (2)
Quelles sont les étapes de base permettant à JDBC d'accéder à la base de données ? Terminer la session l'objet de connexion 4, ajouter, supprimer, modifier et vérifier les données via la session, encapsuler l'objet
5, fermer la ressource
Parlez de la différence entre PrepareStatement et Statement
1. Efficacité : les sessions précompilées sont meilleures que les objets de session ordinaires. Le système de base de données ne compilera pas à nouveau la même instruction SQL
. 2. Sécurité : SQL peut être efficacement évité les attaques par injection ! L'attaque par injection SQL consiste à saisir des caractères spéciaux illégaux à partir du client, afin que le serveur puisse toujours construire correctement l'instruction SQL lors de sa construction, collectant ainsi des informations et des données sur le programme et le serveur.
Par exemple : "select * from t_user which userName = '" + userName + " ' and password ='" + password + "'"Si le nom d'utilisateur et le mot de passe sont saisis comme ' 1' ou '1'='1' ; L'instruction SQL générée est :
"select * from t_user où userName = '1' ou '1' ='1' et password ='1' ou ' 1 '='1' La partie où de cette instruction ne joue aucun rôle dans le filtrage des données
Parlons du concept de transactions et des étapes de traitement des transactions dans la programmation JDBC. 1 Une transaction est une série d'opérations effectuées comme une seule unité logique de travail
2. Une unité logique de travail doit avoir quatre propriétés, appelées attribut d'atomicité, de cohérence, d'isolation et de durabilité (ACID). , ce n'est qu'ainsi qu'elle peut devenir une transaction
Étapes du traitement de la transaction :3, conn.setAutoComit(false) Définir la méthode de soumission sur soumission manuelle
4, conn.commit() valide la transaction 5, une exception se produit, rollback conn.rollback();Le principe du pool de connexion à la base de données, pourquoi utiliser le pool de connexions ?
1. La connexion à la base de données est une opération qui prend du temps. Le pool de connexions permet à plusieurs opérations de partager une connexion 2. Le pool de connexion à la base de données consiste à vous connecter à la base de données. Établissez un "pool tampon" à l'avance. Lorsque vous devez établir une connexion à la base de données, retirez-en simplement une du "pool tampon" et remettez-le après utilisation. Nous pouvons empêcher le système de se connecter sans fin à la base de données en définissant le nombre maximum de connexions dans le pool de connexions. Plus important encore, nous pouvons surveiller le nombre et l'utilisation des connexions à la base de données via le mécanisme de gestion du pool de connexions. fournir le développement du système, les tests et l'ajustement des performances. Fournir des preuves 3. Le but de l'utilisation du pool de connexions est d'améliorer la gestion des ressources de connexion à la base de donnéesQu'est-ce que la lecture sale. de JDBC ?
Lorsque nous utilisons des transactions, il peut y avoir une situation où une ligne de données vient d'être mise à jour, et en même temps une autre requête lit la valeur nouvellement mise à jour, ce qui conduit en lecture, car les données mises à jour n'ont pas été conservées, l'entreprise qui a mis à jour cette ligne de données peut être restaurée, de sorte que les données ne sont pas valides. Les niveaux d'isolement TRANSACTIONREADCOMMITTED, TRANSACTIONREPEATABLEREAD et TRANSACTION_SERIALIZABLE de la base de données peuvent empêcher la lecture. .
Qu'est-ce que la lecture fantôme et quel niveau d'isolement peut empêcher la lecture fantôme ? La lecture fantôme signifie qu'une transaction exécute une requête plusieurs fois mais renvoie des valeurs différentes. Supposons qu'une transaction effectue une requête de données basée sur une certaine condition, puis qu'une autre transaction insère une ligne de données qui satisfait la condition de requête.Ensuite, cette transaction exécute à nouveau cette requête et l'ensemble de résultats renvoyé contiendra les nouvelles données qui viennent d'être insérées. Cette nouvelle ligne de données est appelée ligne fantôme, et ce phénomène est appelé lecture fantôme.
Seul le niveau d'isolement TRANSACTION_SERIALIZABLE peut empêcher les lectures fantômes.
À quoi sert le DriverManager JDBC ?
DriverManager de JDBC est une classe d'usine à travers laquelle nous créons des connexions à des bases de données. Lorsque la classe JDBC Driver est chargée, elle s'enregistrera dans la classe DriverManager
Quelle est la différence entre exécuter, exécuterQuery et exécuterUpdate ?
1. La méthode execute(String query) de l'instruction est utilisée pour exécuter n'importe quelle requête SQL. Si le résultat de la requête est un ResultSet, cette méthode renvoie true. Si le résultat n’est pas un ResultSet, comme une requête d’insertion ou de mise à jour, il renverra false.
Nous pouvons obtenir le ResultSet via sa méthode getResultSet, ou obtenir le nombre d'enregistrements mis à jour via la méthode getUpdateCount(). 2. L'interface executeQuery (String query) de l'instruction est utilisée pour exécuter la requête de sélection et renvoyer ResultSet. Même si aucun enregistrement n'est trouvé dans la requête, le ResultSet renvoyé ne sera pas nul.
Nous utilisons généralement executeQuery pour exécuter des instructions de requête. Dans ce cas, si une instruction d'insertion ou de mise à jour est transmise, elle lancera une exception java.util.SQLException avec le message d'erreur "la méthodeexecuteQuery ne peut pas être utilisée pour la mise à jour". ,
3. La méthode executeUpdate(String query) de l'instruction est utilisée pour exécuter des instructions d'insertion ou de mise à jour/suppression (DML), ou ne renvoie rien Pour les instructions DDL, la valeur de retour est de type int. instruction, Si c'est le cas, c'est le nombre de mises à jour. Si c'est DDL, il renverra 0.
Vous devez utiliser la méthodeexecute() uniquement lorsque vous n'êtes pas sûr de quelle instruction il s'agit, sinon vous devez utiliser la méthodeexecuteQuery ouexecuteUpdate.
Comment afficher les résultats d'une requête SQL en pagination ?
Oracle :
select * from (select *,rownum as tempid from student ) t where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber
MySQL :
select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize; sql server: select top ” + pageSize + ” * from students where id not in + (select top ” + pageSize * (pageNumber-1) + id from students order by id) + “order by id;
Qu'est-ce que le ResultSet de JDBC ?
Après avoir interrogé la base de données, un ResultSet sera renvoyé, qui ressemble à une table de données de l'ensemble de résultats de la requête.
L'objet ResultSet maintient un curseur pointant vers la ligne de données actuelle. Au début, le curseur pointe sur la première ligne. Si la méthode next() de ResultSet est appelée, le curseur descendra d'une ligne. S'il n'y a plus de données, la méthode next() retournera false. Vous pouvez l'utiliser dans une boucle for pour parcourir un ensemble de données.
Le ResultSet par défaut ne peut pas être mis à jour et le curseur ne peut que se déplacer vers le bas. En d’autres termes, vous ne pouvez parcourir que de la première ligne à la dernière ligne. Cependant, vous pouvez également créer un ResultSet qui peut être annulé ou mis à jour
Lorsque l'objet Statement qui a généré le ResultSet doit être fermé ou réexécuté ou que le ResultSet suivant est obtenu, l'objet ResultSet sera également automatiquement fermé.
Vous pouvez obtenir des données de colonne via la méthode getter de ResultSet en transmettant le nom de la colonne ou le numéro de série à partir de 1.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Pré-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusofperforming lightbetterine scénarios.

Tout d'abord, CheckifThefnKeySettingisInterferingyTryingBothThevolumeKeyAlonEndfn volumeKey, thentogglefnlockwithfn espifavailable.2.enterbios / uefidUringbootAnableFunctionKeysordiSablehotKeyModetoenSureVolumeSarereCognined.3.updateorreinstallAdriodriving

TestThepdfinanotherApptodetermineIftheissueiswiththefileoredge.2.EnBlEthebuilt-inpdfViewerByTurningOff "AlwaysOpenpdffilesexternal" et "DownloadPdffiles" inedgestoSolver.

Le module de journalisation de Python peut écrire des journaux dans les fichiers via FileHandler. Tout d'abord, appelez le processeur et format de fichier de configuration BasicConfig, tels que la définition du niveau sur les informations, en utilisant FileHandler pour écrire app.log; Deuxièmement, ajoutez StreamHandler pour atteindre la sortie à la console en même temps; Les scénarios avancés peuvent utiliser TimeRotingFileHandler pour diviser les journaux par le temps, par exemple, définir quand = 'Midnight' pour générer de nouveaux fichiers chaque jour et conserver 7 jours de sauvegarde, et assurez-vous que le répertoire de journal existe; Il est recommandé d'utiliser GetLogger (__ Name__) pour créer des journalistes nommés et produire

Utilisez la méthode .equals () pour comparer le contenu de la chaîne, car == ne compare les références d'objet plutôt que le contenu; 1. Utilisez .equals () pour comparer également les valeurs de chaîne; 2. Utiliser .EqualSignoreCase () pour comparer l'ignorance du cas; 3. Utilisez .Compareto () pour comparer les chaînes dans l'ordre du dictionnaire, renvoyant 0, nombres négatifs ou positifs; 4. Utiliser .CompareToIgnoreCase () pour comparer le cas Ignorer; 5. Utilisez des objets.equals () ou de la méthode d'appel sûr pour traiter les chaînes nulles pour éviter les exceptions de pointeur nul. En bref, vous devez éviter d'utiliser == pour les comparaisons de contenu de chaîne, sauf s'il est explicitement nécessaire de vérifier si l'objet est en phase.

L'utilisation de String.join () (Java8) est la méthode recommandée la plus simple pour connecter les tableaux de chaîne, spécifiez simplement le séparateur directement; 2. Pour les anciennes versions de Java ou lorsque plus de contrôle est nécessaire, vous pouvez utiliser StringBuilder pour traverser et épisser manuellement; 3. StringJoiner convient aux scénarios qui nécessitent des formats plus flexibles tels que les préfixes et les suffixes; 4. Utilisation de Arrays.Stream () combinée avec des collectionneurs.joining () convient au filtrage ou à la conversion du tableau avant de rejoindre; Pour résumer, si Java8 et supérieur est utilisé, la méthode String.join () doit être préférée dans la plupart des cas, ce qui est concis et facile à lire, mais pour une logique complexe, elle est recommandée.

L'utilisation de pandasstyling dans Jupyternotebook peut réaliser le bel affichage de DataFrame. 1. Utilisez Highlight_max et Highlight_min pour mettre en évidence la valeur maximale (vert) et la valeur minimale (rouge) de chaque colonne; 2. Ajouter la couleur d'arrière-plan du gradient (comme le blues ou les rouges) à la colonne numérique via background_gradient pour afficher visuellement la taille des données; 3. Fonction personnalisée Color_score combinée avec ApplyMap pour définir des couleurs de texte pour différents intervalles fractionnaires (≥90 vert, 80 ~ 89 orange, 60 ~ 79 rouge,

Calculé a un cache et les accès multiples ne sont pas recalculés lorsque la dépendance reste inchangée, tandis que les méthodes sont exécutées à chaque fois qu'elles sont appelées; 2.COMPUT est adapté aux calculs basés sur des données réactives. Les méthodes conviennent aux scénarios où les paramètres sont requis ou les appels fréquents, mais le résultat ne dépend pas de données réactives; 3.Coupation prend en charge les getters et les setters, ce qui peut réaliser la synchronisation bidirectionnelle des données, mais les méthodes ne sont pas prises en charge; 4. Résumé: Utilisez d'abord calculé pour améliorer les performances et utilisez des méthodes lors de la réussite des paramètres, de l'exécution d'opérations ou d'éviter le cache, en suivant le principe de "Si vous pouvez utiliser calculé, vous n'utilisez pas de méthodes".
