Recommandations d'apprentissage associées : bases de Java
Connexion JDBC au fonctionnement de la base de données
Vous pouvez l'encapsuler dans une classe pour simplifier le code lors de l'écriture.
(1) Charger le pilote de base de données JDBC-MySQL
try { Class.forName("com.mysql.cj.jdbc.Driver");}catch (Exception e){ }
(2) Se connecter à la base de données
Connection con = null;//声明要连接数据库的对象comString uri = "jdbc:mysql://localhost:3306/数据库名?useSSL=true &characterEncoding=utf-8"; //连接地址String user = "root"; //连接数据库的用户名String password = "123456"; //连接数据库的密码try { con = DriverManager.getConnection(uri,user,password); //连接代码}catch(SQLException e){ }
(3) Écrire du code pour exploiter les données dans la base de données
2. Opération de requête
1. Étapes spécifiques de l'opération de requête
(1) Envoyer une instruction SQL à la base de données :
Statement sql;try{ sql = con.createStatement();}catch (SQLException e){ }
Déclarez d'abord l'objet d'instruction SQL, puis laissez l'objet de connexion créé appeler la méthode createStatement()
pour créer cet objet d'instruction SQL.
(2) Traitement des résultats de la requête
Avec l'objet instruction SQL, cet objet peut appeler les méthodes correspondantes pour implémenter diverses opérations sur les tables de la base de données, où les résultats de la requête sont stockés dans un objet déclaré par la classe ResultSet. Autrement dit, l'instruction de requête SQL renvoie un objet ResultSet à l'opération de requête de base de données. Le ResultSet est composé de lignes de données organisées par « colonnes » (champs).
rs = sql.executeQuery("select * from 表的名称");//读取表中的所有列,*为通配符rs = sql.executeQuery("select 行1字段名,行2字段名... from 表的名称");//读取表中特定的列
L'objet ResultSet ne peut voir qu'une seule ligne de données à la fois, utilisez la méthode next() pour passer à la ligne suivante. Les objets ResultSet peuvent obtenir des valeurs de colonne via getXxx(int columnIndex)
et des valeurs de colonne en passant des noms de colonne getXxx(String columnName)
.
(3) Fermez la connexion
con.close(); //关闭con所连接的数据库
Remarque : la base de données est étroitement liée à l'objet de connexion et vous devez fermer la base de données après l'avoir utilisée.
2, contrôlez le curseur
La position initiale du curseur dans l'ensemble de résultats est devant la première ligne de l'ensemble de résultats. L'ensemble de résultats appelle le next(). méthode pour déplacer le curseur vers le bas (retour). Renvoie vrai si le déplacement est réussi et faux si le déplacement échoue. Si vous souhaitez vous déplacer dans l'ensemble de résultats et afficher plusieurs enregistrements, vous devez renvoyer un ensemble de résultats défilant. La méthode est la suivante :
Statement stmt = con.createStatement(int type,int concurrency);//获得一个Statement对象,根据参数的值,stmt返回相应类型的结果集:ResultSet re = stmt.executeQuery(SQL语句);type的取值:决定滚动方式: ResultSet.TYPE_FORWARD_ONLY 结果集的游标只能向下滚动 ResultSet.TYPE_SCROLL_INSENSITIVE 游标可以上下移动,数据库变化时,结果集不变 ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,数据变化时,结果集同步改变 Concurrency取值:决定是否可以用结果集更新数据库 ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表 ResultSet.CONCUR_UPDATABLE 能用结果集更新数据库中的表 滚动查询常用的ResultSet的方法:public boolean previous() 将游标向上移动,当移动到结果集第一行之前时返回falsepublic void beforeFirst() 将游标移动到结果集的初始位置,第一行之前public void afterLast() 将游标移动到结果集的最后一行之后public void first() 将游标移动到第一行public void last() 将游标移动到最后一行public boolean isAfterLast() 判断游标是否在最后一行之后public boolean isBeforeFirst() 判断游标是否在第一行游标之前public boolean isFirst() 判断游标是否指向第一行public boolean isLast() 判断游标是否指向最后一行public int getRow() 得到当前游标所指向的行号,行号从1开始,如果结果集没有行,返回0public boolean absolute(int row) 将游标移动到参数row指定的行(参数取负数即倒数)
(3) Requête de condition et de tri
où sous-instruction : select 字段 from 表明 where 条件
(1)字段值与固定值比较 select * from table where name='张三'(2)字段值在某个区间 select * from table where number>5 and number<10 and name!='李四'(3)使用某些特殊的日期函数(Data:year-month-day)select * from table where year(表明日期的字段名)<1980 and month(表面日期的字段名)<=10select * from table where year(表明日期的字段名) between 2002 and 2021(4)使用某些特殊的时间函数(hour,minute,second) select * from timelist where second(表明时间的字段名)=36(5)用操作符like进行模式匹配,使用%代替0个或多个字符,用一个下划线_代替一个字符。 select * from table where name like'%欧%' //查询name字段有“欧”字的记录
ordre par instruction : peut être utilisé en combinaison avec l'instruction Where
select * from table order by height select * from table where name like '%王%' order by name
3 Opérations de mise à jour, d'ajout et de suppression
Appels d'objets d'instruction public int executeUpdate(String sqlStatement);
pour mettre à jour, ajouter et supprimer des enregistrements dans la table de base de données. en spécifiant des paramètres.
(1)更新 update 表名 set 字段 = 新值 where <条件子句>(2)添加 insert into 表 values (对应具体的记录)(3)删除 delete from 表名 where <条件子句>
4. Utiliser des instructions préparées
Java fournit un mécanisme de fonctionnement de base de données plus efficace, qui est l'objet PreparedStatement, c'est-à-dire l'objet d'instruction préparée. Traitez l'instruction SQL dans l'instruction sous-jacente de la base de données, puis transmettez-la à la base de données.
Utiliser des caractères génériques : lors du prétraitement SQL, vous pouvez utiliser le caractère générique ? pour remplacer la valeur du champ. Définissez simplement la valeur spécifique représentée par le caractère générique avant d'exécuter l'instruction préparée :
String str = "select * from 表名 where 字段1 < ? and 字段2 = ?";PreparedStatement sql = con.prepareStatement(str);sql.setXxx(int parameterIndex,Type x);//该方法设置?代表的值,parameterIndex代表第几个?,x代表要替换的值。
5. .Requête générale
Écrivez une classe de requête générale. Les utilisateurs peuvent transmettre le nom de la base de données et l'instruction SQL à l'objet de cette classe, puis l'objet utilisera un tableau bidimensionnel pour renvoyer l'enregistrement de la requête. .
L'écriture d'une classe de requête générale nécessite de connaître le nom et le nombre de colonnes (champs) de la table de la base de données. Une méthode courante consiste à utiliser l'objet ResultSet rs pour appeler la méthode getMetaData()
pour renvoyer un objet ResultSetMetaData :
ResultSetMetaData metaData = rs.getMetaData();
Ensuite, l'objet metaData appelle la méthode getColumnCount()
pour renvoyer le nombre de colonnes dans rs, juste call getColumnName(int i)
Renvoie le nom de la i-ième colonne dans l'ensemble de résultats rs.
6. Transactions
1. Transactions et traitement
Une transaction est constituée d'un ensemble d'instructions SQL. Ce que l'on appelle le traitement des transactions signifie que le programme d'application garantit que soit toutes les instructions SQL de la transaction sont exécutées, soit aucune d'entre elles n'est exécutée. Le traitement des transactions est un mécanisme important pour garantir l'intégrité et la cohérence des données dans la base de données.
2, traitement des transactions JDBC
Utilisez la méthode setAutoCommit(boolean b) pour désactiver le mode automatique :
Autrement dit, désactivez l'efficacité immédiate de l'instruction SQL . Les deux opérations associées ne doivent modifier les données de la base de données qu'une fois toutes les exécutions terminées. La méthode consiste à laisser l'objet de connexion appeler cette méthode avant d'obtenir l'objet sql :
con.setAutoCommit(false);
Utilisez la méthode commit() pour traiter la transaction :
Après avoir désactivé le mode automatique, laissez l'objet sql se soumettre plusieurs instructions SQL (c'est-à-dire la même transaction), ces instructions ne prendront pas effet immédiatement, mais prendront effet jusqu'à ce que l'objet de connexion appelle la méthode :
con.commit();
L'utilisation de la méthode rollback() pour traiter la transaction échoue :
C'est-à-dire annuler l'opération de la transaction. Lorsque con appelle la méthode commit() pour le traitement des transactions, tant qu'une instruction SQL n'est pas exécutée avec succès, l'exécution de la transaction échoue et une exception SQLException est levée. À ce stade, con doit appeler la méthode rollback() pour annuler toutes les opérations qui entraînent des modifications de données :
con.rollback();
Recommandations d'apprentissage gratuites associées : vidéo mysql tuto
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!