当前位置:网站首页>Tutoriel de démarrage rapide JDBC

Tutoriel de démarrage rapide JDBC

2022-06-12 17:42:00 * Night Star River ℡

Contenu principal

  • JDBCUtiliser
  • JDBCClasse d'outils
  • JDBCOpérations de contrôle

Objectifs pédagogiques

  • Être capable de comprendreJDBCLe concept de
  • Capable d'utiliserDriverManager Catégorie
  • Capable d'utiliser Connection Interface
  • Capable d'utiliser Statement Interface
  • Capable d'utiliser ResultSet Interface
  • Capable de dire SQL Causes de l'injection et solutions
  • Capable de passer à travers PreparedStatement Achèvement de l & apos; augmentation、Supprimer、Modifier、Regarde.
  • Capable de le faire PreparedStatement Modifier le cas de connexion

JDBC

Concept

Java DataBase Connectivity Java Connexion à la base de données, JavaBase de données des opérations linguistiques

Nature

C'est officiel.(sunEntreprises)Un ensemble de règles définies pour le fonctionnement de toutes les bases de données relationnelles,Interface.
Chaque fabricant de base de données implémente cette interface,Fournir un pilote de base de donnéesjarSac.
Nous pouvons utiliser cet ensemble d'interfaces(JDBC)Programmation,Le Code réellement exécuté est le pilotejarClasses d'implémentation dans le paquet.

Les avantages

1) Si un programmeur doit développer un programme pour accéder à la base de données,Il suffit d'appeler JDBC La méthode dans l'interface est OK,Ne vous concentrez pas sur la façon dont la classe est implémentée.
2) Utiliser le même ensemble Java Code,Pour accéder à d'autres JDBC Bases de données prises en charge

Démarrage rapide

Étapes

* Étapes:
	1. Importer le lecteurjarSac mysql-connector-java-5.1.37-bin.jar
		1.Créer dans un projetlibsTable des matières
		2.Copiermysql-connector-java-5.1.37-bin.jarAu projetlibsSous la table des matières
		3.Inlibs Sélectionnez ce que vous souhaitez ajouter dans le répertoire jarSac,Puis clic droit-->Bulid Path-->Add to Build Path
	2. Enregistrer le pilote
	3. Obtenir l'objet de connexion à la base de données Connection
	4. Définitionsql
	5. Obtenir l'exécutionsqlObjet de l'instruction Statement
	6. Mise en œuvresql,Accepter les résultats retournés
	7. Résultats du traitement
	8. Libérer des ressources

Détailler chaque objet central

1. DriverManager

DriverManager:Drive Management Object
* Fonction:
	1. Enregistrer le pilote:Dites au programme quel pilote de base de données utiliserjar
	static void registerDriver(Driver driver) :Enregistrer avec le pilote donné DriverManager . 
	Utilisation du Code d'écriture:  Class.forName("com.mysql.jdbc.Driver");
	Découverte en regardant le code source:Incom.mysql.jdbc.DriverBloc de code statique présent dans la classe
	static {
			try {
					java.sql.DriverManager.registerDriver(new Driver());
				} catch (SQLException E) {
				    throw new RuntimeException("Can't register driver!");
				}
			}
	Attention!:mysql5Entraînement arrièrejarLe paquet peut omettre les étapes pour enregistrer le pilote.
	2. Obtenir une connexion à la base de données:
	* Méthodes:static Connection getConnection(String url, String user, String password) 
	* Paramètres:
	* url:Spécifier le chemin de connexion
	* Syntaxe:jdbc:mysql://ipAdresse(Nom de domaine):Numéro de port/Nom de la base de données
	* Exemple:jdbc:mysql://localhost:3306/db3
	* Détails:Si la machine est connectéemysqlServeur,EtmysqlLe port par défaut du service est3306,EturlPeut être abrégé en:jdbc:mysql:///Nom de la base de données
	* user:Nom d'utilisateur
	* password:Mot de passe

2. Connection

Connection:Objet de connexion à la base de données
1. Fonction:
	1. Obtenir l'exécutionsql Objet de
		* Statement createStatement()
		* PreparedStatement prepareStatement(String sql)  
	2. Services de gestion:
		* Ouvrir la transaction:setAutoCommit(boolean autoCommit) :Appeler cette méthode pour définir les paramètres àfalse,C'est - à - dire que la transaction est ouverte
		* Soumettre une transaction:commit() 
		* Opérations de rollback:rollback() 

3. Statement

1. Mise en œuvresql
	1. boolean execute(String sql) :Peut exécuter n'importe quelsql Compris. 
	2. int executeUpdate(String sql) :Mise en œuvreDML(insert、update、delete)Déclarations、DDL(create,alter、drop)Déclarations
	* Valeur de retour:Nombre de lignes affectées,Peut être déterminé par le nombre de lignes affectéesDMLSi l'instruction a été exécutée avec succès Valeur de retour>0A été exécuté avec succès,Au contraire,A échoué..
	3. ResultSet executeQuery(String sql)  :Mise en œuvreDQL(select)Déclarations


Exercice:
1.studentTableau Ajouter un enregistrement
2. studentTableau Modifier l'enregistrement
3. studentTableau Supprimer un enregistrement

//Charger l'entraînement,Connexion à la base de données,Libérer des ressources
package com.zhibang.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/** * Charger l'entraînement,Connexion à la base de données,Libérer des ressources * @author  La pluie tombe sur les étoiles  * */
public class Utils {
    
	private static String driver = "com.mysql.jdbc.Driver";// Charger le paquet d'entraînement 
	private static String url = "jdbc:mysql://localhost:3306/girls";//Connexion à la base de données localhostPour le localid girlsPour le nom de la table de base de données
	private static String urname = "root";//Nom d'utilisateur
	private static String pass = "3306";//Mot de passe
	
	
	/** *  Charger le paquet d'entraînement  */
	static {
    
		try {
    
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/** * Connexion à la base de données * @return */
	public static Connection getConnection() {
    
		Connection con = null;
		try {
    
			con = DriverManager.getConnection(url,urname,pass);
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
	/** * Release Connection,PreparedStatement,ResultSet Ressources * @param con * @param ps * @param rst */
	public static void close(Connection con,PreparedStatement ps,ResultSet res) {
    
		try {
    
			if(con!=null) {
    
				con.close();
			}
			if(ps!=null) {
    
				ps.close();
			}
			if(res!=null) {
    
				res.close();
			}
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/** * Release Connection,PreparedStatement Ressources * @param con * @param ps */
	public static void close_1(Connection con,PreparedStatement ps) {
    
		try {
    
			if(con!=null) {
    
				con.close();
			}
			if(ps!=null) {
    
				ps.close();
			}
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

//Classe d'étudiants
package com.zhibang.student;
/** * Données du tableau * @author  La pluie tombe sur les étoiles  * */
public class student {
    
	private int id;//Numéro d'étudiant
	private String uname;//Nom d'utilisateur
	private String psw;//Mot de passe
	public student() {
    
	}
	public student(int id2, String uname, String psw) {
    
		super();
		this.id = id2;
		this.uname = uname;
		this.psw = psw;
	}
	public int getId() {
    
		return id;
	}
	public void setId(int id) {
    
		this.id = id;
	}
	public String getUname() {
    
		return uname;
	}
	public void setUname(String uname) {
    
		this.uname = uname;
	}
	public String getPsw() {
    
		return psw;
	}
	public void setPsw(String psw) {
    
		this.psw = psw;
	}
	@Override
	public String toString() {
    
		return "student [id=" + id + ", uname=" + uname + ", psw=" + psw + "]";
	}
	@Override
	public int hashCode() {
    
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		result = prime * result + ((psw == null) ? 0 : psw.hashCode());
		result = prime * result + ((uname == null) ? 0 : uname.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
    
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		student other = (student) obj;
		if (id != other.id)
			return false;
		if (psw == null) {
    
			if (other.psw != null)
				return false;
		} else if (!psw.equals(other.psw))
			return false;
		if (uname == null) {
    
			if (other.uname != null)
				return false;
		} else if (!uname.equals(other.uname))
			return false;
		return true;
	}
}

  1. studentTableau Ajouter un enregistrement
// Ramassez vos mains précieuses et écoutez les cours pour les réaliser 
public static int getinsert(student st) {
    
		String sql = "INSERT INTO admin(`username`,`password`) VALUES ('"+ st.getUname() +"','"+ st.getPsw() +"')";
		int n = 0;
		try {
    
			con = Utils.getConnection();
			ps = con.prepareStatement(sql);
			n = ps.executeUpdate();
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
    
			Utils.close_1(con, ps);
		}
		return n;
	}
  1. studentTableau Modifier l'enregistrement
// Ramassez vos mains précieuses et écoutez les cours pour les réaliser 
public static int getupdate(student st) {
    
		String sql = "UPDATE admin SET `password`='"+ st.getPsw() +"' WHERE id="+ st.getId() +"";
		int n = 0;
		try {
    
			con = Utils.getConnection();
			ps = con.prepareStatement(sql);
			n = ps.executeUpdate();
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
    
			Utils.close_1(con, ps);
		}
		return n;
	}
  1. studentTableau Supprimer un enregistrement
// Ramassez vos mains précieuses et écoutez les cours pour les réaliser 
public static int getdelect(student st) {
    
		String sql = "DELETE FROM admin WHERE id="+ st.getId() +"";
		int n = 0;
		try {
    
			con = Utils.getConnection();
			ps = con.prepareStatement(sql);
			n = ps.executeUpdate();
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
    
			Utils.close_1(con, ps);
		}
		return n;
	}
  1. Mise en œuvreDDLDéclarations
// Ramassez vos mains précieuses et écoutez les cours pour les réaliser 
		//Ajouter
		student st = new student();
		st.setUname("ccc");
		st.setPsw("244542");
		int n = UserDao.getinsert(st);
		if(n>0) {
    
			System.out.println("Soumis avec succès");
		}else {
    
			System.out.println("Échec de la soumission");
		}
		
		//Modifier
		student st = new student();
		st.setId(1);
		st.setPsw("2113");		
		int n = UserDao.getupdate(st);
		if(n>0) {
    
			System.out.println("Soumis avec succès");
		}else {
    
			System.out.println("Échec de la soumission");
		}
		
		//Supprimer
		student st = new student();
		st.setId(6);
		int n = UserDao.getdelect(st);
		if(n>0) {
    
			System.out.println("Soumis avec succès");
		}else {
    
			System.out.println("Échec de la soumission");
		}

4. ResultSet

* boolean next(): Le curseur descend d'une ligne,Déterminer si la ligne courante est la fin de la dernière ligne(Y a - t - il des données),Si oui,Renvoiefalse,Sinon, retourneztrue
* getXxx(Paramètres):Obtenir des données
	* Xxx:Représente le type de données   Par exemple:: int getInt() ,	String getString()
	* Paramètres:
		1. int:Nombre de colonnes représentatives,De1C'est parti.   Par exemple:: getString(1)
		2. String:Nom de la colonne représentative. Par exemple:: getDouble("balance")
		
	* Attention!:
		* Utiliser les étapes:
			1. Le curseur descend d'une ligne
			2. Déterminer s'il y a des données
			3. Obtenir des données
			//Boucle pour déterminer si le curseur est à la fin de la dernière ligne.
	        while(rs.next()){
	            //Obtenir des données
	            //6.2 Obtenir des données
	            int id = rs.getInt(1);
	            String name = rs.getString("name");
	            double balance = rs.getDouble(3);
	
	            System.out.println(id + "---" + name + "---" + balance);
	       }


* Exercice:
	* Définir une méthode,RequêtestudentLes données du tableau l'encapsulent comme objet,Puis chargez la collection,Retour.
	1. DéfinitionstudentCatégorie
	2. Définir la méthode public List<student> findAll(){}
	3. Méthode de réalisation select * from student;
//Charger l'entraînement,Connexion à la base de données,Libérer des ressources
package com.zhibang.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/** * Charger l'entraînement,Connexion à la base de données,Libérer des ressources * @author  La pluie tombe sur les étoiles  * */
public class Utils {
    
	private static String driver = "com.mysql.jdbc.Driver";// Charger le paquet d'entraînement 
	private static String url = "jdbc:mysql://localhost:3306/girls";//Connexion à la base de données localhostPour le localid girlsPour le nom de la table de base de données
	private static String urname = "root";//Nom d'utilisateur
	private static String pass = "3306";//Mot de passe
	
	
	/** *  Charger le paquet d'entraînement  */
	static {
    
		try {
    
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/** * Connexion à la base de données * @return */
	public static Connection getConnection() {
    
		Connection con = null;
		try {
    
			con = DriverManager.getConnection(url,urname,pass);
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
	/** * Release Connection,PreparedStatement,ResultSet Ressources * @param con * @param ps * @param rst */
	public static void close(Connection con,PreparedStatement ps,ResultSet res) {
    
		try {
    
			if(con!=null) {
    
				con.close();
			}
			if(ps!=null) {
    
				ps.close();
			}
			if(res!=null) {
    
				res.close();
			}
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/** * Release Connection,PreparedStatement Ressources * @param con * @param ps */
	public static void close_1(Connection con,PreparedStatement ps) {
    
		try {
    
			if(con!=null) {
    
				con.close();
			}
			if(ps!=null) {
    
				ps.close();
			}
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Code de mise en œuvre(studentCatégorie):

// Ramassez vos mains précieuses et écoutez les cours pour les réaliser 
package com.zhibang.student;
/** * Données du tableau * @author  La pluie tombe sur les étoiles  * */
public class student {
    
	private int id;//Numéro d'étudiant
	private String uname;//Nom d'utilisateur
	private String psw;//Mot de passe
	public student() {
    
	}
	public student(int id2, String uname, String psw) {
    
		super();
		this.id = id2;
		this.uname = uname;
		this.psw = psw;
	}
	public int getId() {
    
		return id;
	}
	public void setId(int id) {
    
		this.id = id;
	}
	public String getUname() {
    
		return uname;
	}
	public void setUname(String uname) {
    
		this.uname = uname;
	}
	public String getPsw() {
    
		return psw;
	}
	public void setPsw(String psw) {
    
		this.psw = psw;
	}
	@Override
	public String toString() {
    
		return "student [id=" + id + ", uname=" + uname + ", psw=" + psw + "]";
	}
	@Override
	public int hashCode() {
    
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		result = prime * result + ((psw == null) ? 0 : psw.hashCode());
		result = prime * result + ((uname == null) ? 0 : uname.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
    
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		student other = (student) obj;
		if (id != other.id)
			return false;
		if (psw == null) {
    
			if (other.psw != null)
				return false;
		} else if (!psw.equals(other.psw))
			return false;
		if (uname == null) {
    
			if (other.uname != null)
				return false;
		} else if (!uname.equals(other.uname))
			return false;
		return true;
	}
}

Code de mise en œuvre(Lire la classe)

// Ramassez vos mains précieuses et écoutez les cours pour les réaliser 
public static List<student> getselect() {
    
		String sql="select * from student";
		List<student> li = new ArrayList<student>();
		try {
    
			con = Utils.getConnection();
			ps = con.prepareStatement(sql);
			res = ps.executeQuery();
			while (res.next()) {
    
				int id = res.getInt("id");
				String uname = res.getNString("username");
				String psw = res.getString("password");
				li.add(new student(id, uname, psw));
			}
		} catch (SQLException e) {
    
			e.printStackTrace();
		} finally {
    
			Utils.close(con, ps, res);
		}
		return li;
	}

5. PreparedStatement

1. SQLProblèmes d’injection:C'est un épissage.sqlHeure,Un peu.sqlMot - clé spécial pour participer à l'épissage des chaînes.Peut causer des problèmes de sécurité
	1. Saisissez l'utilisateur au hasard,Saisissez le mot de passe:a' or 'a' = 'a
	2. sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a' 

2. RésolutionsqlProblèmes d’injection:UtiliserPreparedStatementObjet à résoudre
3. PrécompiléSQL:Utilisation des paramètres?Comme substituant
4. Étapes:
	1. Importer le lecteurjarSac mysql-connector-java-5.1.37-bin.jar
	2. Enregistrer le pilote
	3. Obtenir l'objet de connexion à la base de données Connection
	4. Définitionsql
		* Attention!:sqlUtilisation des paramètres pour?Comme substituant. Par exemple::select * from user where username = ? and password = ?;
	5. Obtenir l'exécutionsqlObjet de l'instruction PreparedStatement  Connection.prepareStatement(String sql) 
	6. Voilà.?Affectation:
		* Méthodes: setXxx(Paramètres1,Paramètres2)
			* Paramètres1:?Numéro de localisation De1 C'est parti.
			* Paramètres2:?Valeur de
	7. Mise en œuvresql,Accepter les résultats retournés,Pas besoin de passersqlDéclarations
	8. Résultats du traitement
	9. Libérer des ressources

5. Attention!:Sera utilisé plus tardPreparedStatementPour compléter toutes les opérations d'ajout, de suppression, de modification et de recherche
	1. Peut empêcherSQLInjection
	2. Plus efficace

ExtractionJDBCClasse d'outils : JDBCUtils

Description

* Objectif:écriture simplifiée
* Analyse:
	1.  Le pilote d'enregistrement est aussi appelé extraction 
	2. Extraire une méthode pour obtenir l'objet de connexion
		* Besoins:Ne voulez pas passer de paramètres(Des ennuis.),Il faut aussi garantir la polyvalence des classes d'outils.
		* Résolution:Profil
			jdbc.properties
				url=
				user=
				password=
	3. Extraire une méthode pour libérer les ressources

Réalisation concrète

Enregistrer le pilote

public class JDBCUtils {
    
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    /** * Lecture du fichier,Il suffit d'une lecture pour obtenir ces valeurs.Utiliser des blocs de code statiques */
    static{
    
        //Lire le fichier de ressources,Obtenir la valeur.

        try {
    
            //1. CréationPropertiesClasse set.
            Properties pro = new Properties();

            //AccèssrcComment les fichiers sous le chemin--->ClassLoader Chargeur de classe
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL res  = classLoader.getResource("jdbc.properties");
            String path = res.getPath();
            System.out.println(path);
            //2. Charger le fichier
           // pro.load(new FileReader("E:\\eclipse-workspace\\First\\src\\jdbc.properties"));
            pro.load(new FileReader(path));

            //3. Obtenir des données,Affectation
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            //4. Enregistrer le pilote
            Class.forName(driver);
        } catch (IOException e) {
    
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
    
            e.printStackTrace();
        }
    }
}
// IO Mode de chargement du flux propertiesDocumentation
InputStream inputStream = ClassLoader.getSystemResourceAsStream("/jdbc.properties");
// InputStream inputStream = LoadPropertiesFile.class.getResourceAsStream("/jdbc.properties");
Properties prop = new Properties();
prop.load(inputStream);

Extraire une méthode pour obtenir l'objet de connexion

	 /** * Obtenir la connexion * @return Objet de connexion */
    public static Connection getConnection() throws SQLException {
    

        return DriverManager.getConnection(url, user, password);
    }

    /** * Libérer des ressources * @param stmt * @param conn */
    public static void close(Statement stmt,Connection conn){
    
        if( stmt != null){
    
            try {
    
                stmt.close();
            } catch (SQLException e) {
    
                e.printStackTrace();
            }
        }

        if( conn != null){
    
            try {
    
                conn.close();
            } catch (SQLException e) {
    
                e.printStackTrace();
            }
        }
    }

Extraire une méthode pour libérer les ressources

    /** * Libérer des ressources * @param stmt * @param conn */
    public static void close(ResultSet rs,Statement stmt, Connection conn){
    
        if( rs != null){
    
            try {
    
                rs.close();
            } catch (SQLException e) {
    
                e.printStackTrace();
            }
        }

        if( stmt != null){
    
            try {
    
                stmt.close();
            } catch (SQLException e) {
    
                e.printStackTrace();
            }
        }

        if( conn != null){
    
            try {
    
                conn.close();
            } catch (SQLException e) {
    
                e.printStackTrace();
            }
        }
    }

}

Exercice

* Exercice:
	* Besoins:
		1. Saisissez le nom d'utilisateur et le mot de passe via le clavier
		2. Déterminer si l'utilisateur s'est connecté avec succès
			* select * from user where username = "" and password = "";
			* Si çasqlIl y a des résultats de recherche,Ça marche.,Au contraire,A échoué.

	* Étapes:
		1. Créer une table de base de données user
			CREATE TABLE USER(
				id INT PRIMARY KEY AUTO_INCREMENT,
				username VARCHAR(32),
				PASSWORD VARCHAR(32)
			
			);

			INSERT INTO USER VALUES(NULL,'zhangsan','123');
			INSERT INTO USER VALUES(NULL,'lisi','234');

		2. Mise en œuvre du Code

Mise en œuvre du Code

//Charger l'entraînement,Connexion à la base de données,Libérer des ressources
package com.zhibang.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/** * Charger l'entraînement,Connexion à la base de données,Libérer des ressources * @author  La pluie tombe sur les étoiles  * */
public class Utils {
    
	private static String driver = "com.mysql.jdbc.Driver";// Charger le paquet d'entraînement 
	private static String url = "jdbc:mysql://localhost:3306/girls";//Connexion à la base de données localhostPour le localid girlsPour le nom de la table de base de données
	private static String urname = "root";//Nom d'utilisateur
	private static String pass = "3306";//Mot de passe
	
	
	/** *  Charger le paquet d'entraînement  */
	static {
    
		try {
    
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/** * Connexion à la base de données * @return */
	public static Connection getConnection() {
    
		Connection con = null;
		try {
    
			con = DriverManager.getConnection(url,urname,pass);
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
	/** * Release Connection,PreparedStatement,ResultSet Ressources * @param con * @param ps * @param rst */
	public static void close(Connection con,PreparedStatement ps,ResultSet res) {
    
		try {
    
			if(con!=null) {
    
				con.close();
			}
			if(ps!=null) {
    
				ps.close();
			}
			if(res!=null) {
    
				res.close();
			}
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/** * Release Connection,PreparedStatement Ressources * @param con * @param ps */
	public static void close_1(Connection con,PreparedStatement ps) {
    
		try {
    
			if(con!=null) {
    
				con.close();
			}
			if(ps!=null) {
    
				ps.close();
			}
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


//Selon le nom d'utilisateur et le mot de passe
public static boolean getnamepass(String name,String pass) {
    
		if(name==null&&pass==null) {
    
			return false;
		}
		try {
    
			con = Utils.getConnection();
// String sql = "select * from admin where username='"+ name +"' and password='"+ pass +"'";
			
			//PréventionsqlInjection
			String sql = "select * from admin where username=? and password=?";
			ps = con.prepareStatement(sql);
			ps.setString(1, name);
			ps.setString(2, pass);
			res = ps.executeQuery();
			return res.next();
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
    
			Utils.close(con, ps, res);
		}
		
		return false;
	}
//Catégorie de mise en œuvre
	Scanner sc = new Scanner(System.in);
		System.out.println("Veuillez saisir un nom d'utilisateur:");
		String name = sc.next();
		System.out.println("Veuillez saisir le mot de passe:");
		String pass = sc.next();
		boolean getnamepass = UserDao.getnamepass(name, pass);
		if(getnamepass) {
    
			System.out.println("Connexion réussie!!!");
		}else {
    
			System.out.println("Mauvais nom d'utilisateur ou mot de passe!!!");
		}

JDBCOpérations de contrôle

Description

1. Services:Une opération commerciale comportant plusieurs étapes.Si cette opération commerciale est gérée par transaction,Ces étapes sont soit réussies en même temps,Soit ils échouent en même temps.
2. Fonctionnement:
	1. Ouvrir la transaction
	2. Soumettre une transaction
	3. Opérations de rollback
3. UtiliserConnectionObjet pour gérer la transaction
	* Ouvrir la transaction:setAutoCommit(boolean autoCommit) :Appeler cette méthode pour définir les paramètres àfalse,C'est - à - dire que la transaction est ouverte
		* En courssqlAvant d'ouvrir la transaction
	* Soumettre une transaction:commit() 
		* Quand toutsqlToutes les transactions engagées ont été effectuées
	* Opérations de rollback:rollback() 
		* IncatchTransaction de ROLLBACK moyen

Réalisation

public class AccountDao {
    
    /* *  Modifier le solde de l'utilisateur spécifié  */
	public void updateBalance(Connection con, String name,double balance) {
    
		try {
    
			String sql = "UPDATE account SET balance=balance+? WHERE name=?";
			PreparedStatement pstmt = con.prepareStatement(sql);
			pstmt.setDouble(1,balance);
			pstmt.setString(2,name);
			pstmt.executeUpdate();
		}catch (Exception e) {
    
			throw new RuntimeException(e);
		}
	}
}



 public class Demo1 {
    
     /* * Démonstration de la méthode de transfert * Toutes les pairesConnectLes opérations deServiceTraitement effectué par la couche * Prends toutconnectionL'opération est cachée,Cela nécessite l'utilisation de gadgets personnalisés(day19_1) * */
     public void transferAccounts(String from,String to,double money) {
    
         //Opérations sur transactions
         Connection con = null;
        try{
    
             con = JdbcUtils.getConnection();
           con.setAutoCommit(false);
            AccountDao dao = new AccountDao();
            dao.updateBalance(con,from,-money);//Voilà.fromMoins le montant correspondant
           if (true){
    
                 throw new RuntimeException("Excusez - moi,Échec du transfert");
            }
             dao.updateBalance(con,to,+money);//Voilà.toPlus le montant correspondant
             //Soumettre une transaction
             con.commit();

       } catch (Exception e) {
    
             try {
    
                 con.rollback();
             } catch (SQLException e1) {
    
                 e.printStackTrace();
             }
             throw new RuntimeException(e);
         }
     }
     @Test
     public void fun1() {
    
         transferAccounts("zs","ls",100);
     }
 }


       }
             dao.updateBalance(con,to,+money);//Voilà.toPlus le montant correspondant
             //Soumettre une transaction
             con.commit();
 
         } catch (Exception e) {
    
             try {
    
                 con.rollback();
             } catch (SQLException e1) {
    
                 e.printStackTrace();
             }
             throw new RuntimeException(e);
         }
     }
     @Test
     public void fun1() {
    
         transferAccounts("zs","ls",100);
     }
 }
原网站

版权声明
本文为[* Night Star River ℡]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/163/202206121740109968.html