Connexion JAVA-JDBC et apprentissage associé

Connexion JAVA-JDBC et apprentissage associé

Méthode de connexion de base JDBC

Tout d'abord, préparez-vous à télécharger et à installer Mysql ou d'autres bases de données, puis importez mysql-connector-java-5.0.8-bin.jar ou d'autres packages tiers (pour le pilote)

Puis connectez:

	Connection connection = null;
	PreparedStatement preparedStatement = null;
	//第一步加载驱动;
Class.forName("com.mysql.jdbc.Driver");
 	//第二步获取连接;
// 建立与数据库的Connection连接
// 这里需要提供:
// 数据库所处于的ip:127.0.0.1 (本机)本地可以写local:
// 数据库的端口号: 3306 (mysql专用端口号)
// 数据库名称 weeklyreport
// 编码方式 UTF-8
//serverTimezone最好加一下,因为有时候会报错;
//useSSL=false
//MySQL在高版本需要指明是否进行SSL连接
//1.true 需要连接
//2.false 不需要连接
String url = "jdbc:mysql://localhost:3306/weeklyreport?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8";
			String user = "root";
			String password = "password";//自己的密码
			connection = DriverManager.getConnection(url, user, password);
	//创建statement或者preparedStatement,先用preparedStatement举例;
	String sql = "insert into users2(USER_NAME,USER_PASSWORD,USER_ENTRYDATE) VALUES(?,?,?)";
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setString(1, name);
			preparedStatement.setString(2, password2);
			preparedStatement.setString(3,date);
			preparedStatement.executeUpdate();
	//这就实现了一个插入注册信息的操作
	//最后一步要实现关闭connection和preparedStatement操作;
	connection.close();
	preparedStatement.close();

Le complet est

Connection connection = null;
PreparedStatement preparedStatement = null;
try {
    
    
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/weeklyreport?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8";
			String user = "root";
			String password = "password";//自己的密码
			connection = DriverManager.getConnection(url, user, password);
			String sql = "insert into users2(USER_NAME,USER_PASSWORD,USER_ENTRYDATE) VALUES(?,?,?)";
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setString(1, name);
			preparedStatement.setString(2, password2);
			preparedStatement.setString(3,date);
			preparedStatement.executeUpdate();
			}catch (ClassNotFoundException e) {
    
    
				 e.printStackTrace();
			} catch (SQLException e){
    
    
				 e.printStackTrace();
			} finally {
    
    
				try {
    
    
                    //一般preparedStatement关闭在connection关闭之后;
					connection.close();
					preparedStatement.close();
				} catch (SQLException e){
    
    
					 e.printStackTrace();
				}
			}
	}

Instruction SQL

1. SQL a de nombreuses autres opérations, telles que l'ajout, la suppression, la modification et la vérification

//增加
 String sql = "insert into users2(USER_NAME,USER_PASSWORD,USER_ENTRYDATE) VALUES(?,?,?)";
//删除 
 String sql = "delete from hero where id = 5";
//更改
 String sql = "update hero set name = 'name 5' where id = 3";

Pour d'autres opérations spécifiques, veuillez vous référer à l'utilisation spécifique des instructions dans le tutoriel débutant mysql

2. Le plus spécial est l'opération de requête;

public boolean finduser(String name2,String password2) {
    
    
		ResultSet result = null;
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		int i =0;
		try {
    
    
			Class.forName("com.mysql.cj.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/weeklyreport?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8";
			String user = "root";
			String password = "password";
			connection = DriverManager.getConnection(url, user, password);
			String sql = "select * from users2 where USER_NAME= ? and USER_PASSWORD= ?";
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setString(1, name2);
			preparedStatement.setString(2, password2);
            //特殊的就是要设置一个结果集ResultSet,把结果存放在结果集中,
			result =preparedStatement.executeQuery();
			while(result.next()) {
    
    
				i++;
			 }
            //这里实现的功能就是在登陆的时候验证账号和密码,如果正确,那查询得到的结果集就有内容并i++最后返回true;
			}catch (ClassNotFoundException e) {
    
    
				 e.printStackTrace();
			} catch (SQLException e){
    
    
				 e.printStackTrace();
			} finally {
    
    
				try {
    
    
					connection.close();
					preparedStatement.close();
					result.close();
                    //关闭结果集
				} catch (SQLException e){
    
    
					 e.printStackTrace();
				}
			}
		if (i == 0)
			return false;
		else 
			return true;
	}

Pour d'autres opérations spécifiques, veuillez vous référer à l'utilisation spécifique des instructions dans le tutoriel débutant mysql

La différence entre Statement et PreparStatement

1,

La déclaration nécessite une concaténation de chaînes, une lisibilité et une maintenabilité médiocres;

Réglages des paramètres PreparedStatement , lisibles, faciles à faire des erreurs;

			Statement s = connection.createStatement();
            PreparedStatement  preparedStatement= connection.prepareStatement(sql);
            // Statement需要进行字符串拼接,可读性和维修性比较差
            String sql0 = "insert into USERS1(null," + "'学生1'" + "," + "'123456'"+")";
            s.execute(sql0);
            String sql = "insert into USERS1(null,?,?,?)";
            // PreparedStatement 使用参数设置,可读性好,不易犯错
            // "insert into USERS1(null,?,?)";
            preparedStatement.setString(1, "学生1");
            preparedStatement.setString(2, "123456");
            preparedStatement.execute();

2. PreparedStatement dispose d'un mécanisme de pré-compilation, les performances sont plus rapides que Statement

La base de données pré-compile SQL avec?

À chaque exécution, il vous suffit de transférer les paramètres dans la base de données

  1. Le volume de transmission réseau est inférieur à Statement
  2. La base de données n'a pas besoin d'être compilée, la réponse est plus rapide

3. PreparedStatement empêche les attaques par injection SQL Par exemple, lorsque le mot de passe est ajouté à OR 1 = 1 lors de la connexion, il sera lu par SQL et connecté;

La différence entre execute et executeUpdate

1. Les similitudes entre execute et executeUpdate : les deux peuvent être ajoutés, supprimés et modifiés

preparedStatement.execute();
preparedStatement.executeUpdate();

2. Différent:
execute peut exécuter l'instruction de requête,
puis via getResultSet, le jeu de résultats est retiré et
executeUpdate ne peut pas exécuter l'instruction de requête.
Différent 2:
execute renvoie un type booléen , true signifie que l'instruction de requête est exécutée, false signifie insérer, supprimer, mettre à jour, etc. Attendez que
executeUpdate renvoie un entier , indiquant le nombre de données affectées

Affaires

  			connection.setAutoCommit(false);
  
            // 更改操作
            String sql1 = "update hero set hp = hp +1 where id = "xuesheng1"";
            statement.execute(sql1);
  
         
           //第二个更新操作 
           // 不小心写错写成了 updata(而非update)
            String sql2 = "updata users1 set score = score -1 where name = "xuesheng2"";
            statement.execute(sql2);
  
            // 手动提交
            connection.commit();

Alors mettez

connection.setAutoCommit (false);

connection.commit ();

Tant qu'il y a une erreur dans la transaction entre une opération, elle ne se poursuivra pas, de manière à garantir que l'erreur ne se produise pas;

SERPENT

En fait, il s'agit de créer un objet dont les propriétés permettent de stocker un enregistrement dans la base de données puis d'étendre l'opération;

ORM = Mappage de la base de données des relations d'objets

Mappage d'objets et de bases de données relationnelles

En termes simples, un objet correspond à un enregistrement dans la base de données ;

DAO

En fait, l'idée ORM est utilisée pour encapsuler les opérations liées à la base de données dans cette classe, et le code JDBC ne peut pas être vu ailleurs.

Pool de connexion à la base de données

Créez plusieurs connexions à l'avance et attendez que les threads les utilisent. S'ils sont tous utilisés, les threads inutilisés attendront que les connexions se terminent et reviennent au pool de connexions à la base de données; et ces connexions ne seront pas fermées, mais seront continuellement recyclées, donc Gagnez du temps pour démarrer et fermer la connexion.

package jdbc;
  
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
  
public class ConnectionPool {
    
    
  
    List<Connection> cs = new ArrayList<Connection>();
  
    int size;
  
    public ConnectionPool(int size) {
    
    
        this.size = size;
        init();
    }
  
    public void init() {
    
    
          
        //这里恰恰不能使用try-with-resource的方式,因为这些连接都需要是"活"的,不要被自动关闭了
        try {
    
    
            Class.forName("com.mysql.jdbc.Driver");
            for (int i = 0; i < size; i++) {
    
    
                Connection c = DriverManager
                        .getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin");
  
                cs.add(c);
  
            }
        } catch (ClassNotFoundException e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  
    public synchronized Connection getConnection() {
    
    
        while (cs.isEmpty()) {
    
    
            try {
    
    
                this.wait();
            } catch (InterruptedException e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        Connection c = cs.remove(0);
        return c;
    }
  
    public synchronized void returnConnection(Connection c) {
    
    
        cs.add(c);
        this.notifyAll();
    }
  
}
//代码来自how2j网站


Je suppose que tu aimes

Origine blog.csdn.net/jnh1234/article/details/109425961
conseillé
Classement