怎么做快递网站的分点,下载官方网站app下载,产品研发,高端品牌羽绒服前十名什么是JDBC#xff1f; Java数据库连接#xff08;Java Database Connectivity#xff0c;简称JDBC#xff09;是Java提供的一种API#xff0c;允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口#xff0c;开发者可以利用这些接口执行SQL语句、处理结果集…什么是JDBC Java数据库连接Java Database Connectivity简称JDBC是Java提供的一种API允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口开发者可以利用这些接口执行SQL语句、处理结果集以及管理数据库连接。通过JDBCJava应用程序能够轻松地进行增删改查操作CRUD使得数据库操作变得简单而高效。
下载JDBC驱动
MySQL :: Download Connector/J
以MySQL为例 下载对应压缩包 找到合适的路径进行解压解压后找到如下的 jar 包 IDEA引入驱动
1.新建一个项目在项目下新建一个 lib 文件夹将找到的 jar 包 复制进去 2.放进去jar包之后右键lib选择 add as library 3.找到下面的文件打开 4.复制内容用于进行注册 Class.forName(com.mysql.cj.jdbc.Driver);
下面先看一个例子
package com.ffyc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class jdbctest {public static void main(String[] args) {final String USERNAMEroot;final String PASSWORD 123456;final String URL jdbc:mysql://localhost:3306/kingdom_db?useSSLtrueuseUnicodetruecharacterEncodingutf-8serverTimezoneAsia/Shanghai;Connection conn null;Statement statement null;try {//注册驱动Class.forName(com.mysql.cj.jdbc.Driver);//获取连接conn DriverManager.getConnection(URL, USERNAME, PASSWORD);//创建statement对象statement conn.createStatement();String sql INSERT INTO dept_tab VALUES (6, 教学部, 102);;//执行sql语句statement.executeUpdate(sql);System.out.println(数据插入成功);} catch (Exception e) {throw new RuntimeException(e);}finally {//关闭资源try {if (statement ! null) statement.close();if (conn ! null) conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}
s
URL的构成部分 jdbc:mysql: jdbc是Java数据库连接的协议前缀指明这是一个JDBC类型的连接。mysql表示使用MySQL数据库。 localhost: localhost指的是数据库服务器的地址。在这里它表示数据库安装在本地计算机上。如果您要连接远程数据库可以替换为相应的IP地址或主机名。 :3306: 3306是MySQL默认的端口号。它告诉JDBC在这个端口与MySQL数据库进行连接。如果您的MySQL数据库使用了不同的端口请相应地更改此值。 /kingdom_db: /kingdom_db是您要连接的数据库的名称。在这个例子中试图连接名为kingdom_db的数据库。 ?useSSLtrue: ?用于开始查询参数。这部分包含了一些用于配置连接行为的选项。useSSLtrue指示JDBC驱动程序在连接时使用SSL加密。这对于保护数据传输是一个安全措施。 useUnicodetrue: 用于分隔多个查询参数。useUnicodetrue表示使用Unicode字符编码确保对于包含多语言字符的数据能够正确地处理和存储。 characterEncodingutf-8: characterEncodingutf-8指定了字符编码为UTF-8。UTF-8是一种广泛使用的字符编码方式它支持多种语言字符的表示。这样可以避免字符乱码问题。 serverTimezoneAsia/Shanghai: serverTimezoneAsia/Shanghai设置了数据库服务器时区。此参数对于处理日期和时间数据是很重要的确保在进行时区转换时能够准确。 只需要修改一下 2 3 4的写法其他基本都是固定写法用的时候上网搜一下即可不需要记住 。 这个URL提供了与MySQL数据库连接所需的详细信息包括服务器位置、端口号、数据库名称以及一系列连接参数。正确地配置这些参数有助于确保您的应用程序能够稳定、高效地与数据库交互同时提高安全性和数据的一致性。
JDBC中的常用方法及解释 注册驱动 Class.forName(com.mysql.cj.jdbc.Driver); 这行代码用于加载MySQL的JDBC驱动在使用JDBC时必须先注册相应的数据库驱动。 获取连接 Connection conn DriverManager.getConnection(URL, USERNAME, PASSWORD); 通过DriverManager获取到数据库的连接这样才能进行后续的SQL操作。 创建预编译语句 PreparedStatement pst conn.prepareStatement(sql); 预编译语句主要用于执行SQL语句其具有参数占位符使得插入的值更安全 可防止SQL注入攻击。 执行更新或查询 pst.executeUpdate(); 和 ResultSet rs pst.executeQuery(); 这两个方法用于执行SQL语句前者用于执行更新如插入、删除、更新后者用于查询并返回结果集。 关闭连接 在操作完成后应及时关闭连接以释放资源。 PreparedStatement vs. Statement
Statement 使用Statement时SQL语句及参数是拼接在一起的这意味着开发者需要手动构建整个SQL字符串。Statement在执行前不会进行预编译因此每次执行SQL时都会重新解析并编译SQL语句这会影响性能。 示例代码
String username user;
String password pass123;
String sql SELECT * FROM user_tab WHERE username username AND user_password password ;
Statement stmt conn.createStatement();
ResultSet rs stmt.executeQuery(sql);PreparedStatement PreparedStatement使用占位符?来表示参数SQL语句是通过预编译的这可以有效提升性能减少数据库的负担。PreparedStatement可以防止SQL注入因为参数是在执行时传递给SQL的JDBC会自动进行转义处理。 示例代码
String sql SELECT * FROM user_tab WHERE username ? AND user_password ?;
PreparedStatement pst conn.prepareStatement(sql);
pst.setString(1, username); // 设置第一个参数
pst.setString(2, password); // 设置第二个参数
ResultSet rs pst.executeQuery();SQL注入漏洞
SQL注入是一种常见的安全攻击手段攻击者可以通过在输入字段中插入恶意SQL代码来操纵数据库。例如在使用Statement的情况下以下拼接 SQL 的方式就容易受到SQL注入攻击
String unsafeUsername OR 11; // 攻击者输入的用户名
String sql SELECT * FROM user_tab WHERE username unsafeUsername ;
ResultSet rs stmt.executeQuery(sql);在这个例子中如果unsafeUsername被设置为 OR 11那么SQL语句实际上变成了
SELECT * FROM user_tab WHERE username OR 11这个查询会返回user_tab表中的所有用户因为OR 11始终为真。
相比之下使用PreparedStatement可以有效防止这样的攻击。例如
String sql SELECT * FROM user_tab WHERE username ? AND user_password ?;
PreparedStatement pst conn.prepareStatement(sql);
pst.setString(1, unsafeUsername); // 输入的用户名
pst.setString(2, password);
ResultSet rs pst.executeQuery();在这种情况下unsafeUsername的值不会被直接当作SQL代码执行而是只作为参数处理。因此即使攻击者输入了恶意的SQL片段也不会改变原有SQL的结构防止了SQL注入的发生。
这就是为什么要用PreparedStatement而不用Statement
简单封装 由于每次连接数据库都有一些重复的代码要写所以我们对它进行简单的封装下面的例子展示了如何封装JDBC操作以便于日后的使用
JdbcUtil 类
package com.util;import java.sql.*;/*** static*/
public class JdbcUtil {static final String USERNAME root;static final String PASSWORD 123456;static final String URL jdbc:mysql://localhost:3306/kingdom_db?useSSLtrueuseUnicodetruecharacterEncodingutf-8serverTimezoneAsia/Shanghai;static Connection conn;static PreparedStatement pst;static ResultSet rs;static{registry();}/*** 注册驱动*/private static void registry(){try {Class.forName(com.mysql.cj.jdbc.Driver);}catch (Exception e){e.printStackTrace();}}public static void connect(){try {conn DriverManager.getConnection(URL, USERNAME, PASSWORD);} catch (SQLException e) {throw new RuntimeException(e);}}/*** 预编译sql语句*/public static void prepareStatement(String sql,Object ... vals){try {pst conn.prepareStatement(sql);for(int i0;ivals.length;i){pst.setObject(i1, vals[i]);}} catch (SQLException e) {throw new RuntimeException(e);}}/*** 增删改sql语句*/public static void executeUpdate(){try {pst.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}}/*** 查询sql语句*/public static ResultSet executeQuery(){try {rs pst.executeQuery();} catch (SQLException e) {throw new RuntimeException(e);}return rs;}public static void close(){try {if(rs!null) rs.close();if(pst!null) pst.close();if(conn!null) conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}
}DeptDemo类
package com.ffyc;import com.util.JdbcUtil;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;public class DeptDemo {public static void main(String[] args) throws SQLException {JdbcUtil.connect();String sql null;ResultSet rs null;Scanner sc new Scanner(System.in);System.out.println(1. 添加部门信息\t2.查询所有部门信息);System.out.println(3. 根据部门名称查询);System.out.print(请选择: );String choice sc.nextLine();switch (choice) {case 1:System.out.print(请输入部门名称: );String name sc.nextLine();System.out.print(请输入部门位置: );String loc sc.nextLine();sql INSERT INTO dept_tab(dept_name, dept_loc) VALUES(?,?);JdbcUtil.prepareStatement(sql, name,loc);JdbcUtil.executeUpdate();System.out.println(添加成功);break;case 2:sql SELECT * FROM dept_tab;JdbcUtil.prepareStatement(sql );rs JdbcUtil.executeQuery();while(rs.next()){System.out.print(rs.getObject(dept_id));System.out.print(-rs.getObject(dept_name));System.out.print(-rs.getObject(dept_loc));System.out.println();}break;case 3:System.out.print(请输入部门的名称: );String nName sc.nextLine();sql SELECT * FROM dept_tab WHERE dept_name LIKE ?;JdbcUtil.prepareStatement(sql,%nName%);rs JdbcUtil.executeQuery();while(rs.next()){System.out.print(rs.getObject(dept_id));System.out.print(-rs.getObject(dept_name));System.out.print(-rs.getObject(dept_loc));System.out.println();}break;default:System.out.println(输入不合法..);}JdbcUtil.close();}
}代码解释
以上面这个例子。我对必要的地方做出解释说明
1.数据库连接
String sql INSERT INTO dept_tab(dept_name, dept_loc) VALUES(?,?);
JdbcUtil.prepareStatement(sql, name, loc);
JdbcUtil.executeUpdate();JdbcUtil.connect();通过 JdbcUtil 类的 connect 方法连接到数据库。
2.用户交互
Scanner sc new Scanner(System.in);
System.out.println(1. 添加部门信息\t2.查询所有部门信息);
System.out.println(3. 根据部门名称查询);使用 Scanner 类从控制台获取用户输入提示用户选择要执行的操作。
3.添加部门信息
String sql INSERT INTO dept_tab(dept_name, dept_loc) VALUES(?,?);
JdbcUtil.prepareStatement(sql, name, loc);
JdbcUtil.executeUpdate();重点是要对JdbcUtil这个封装类的方法理解这是我们自定以的封装类
JDBC的优缺点
优点
平台独立性作为 Java 的一部分JDBC 具有平台无关性可以在任何支持 Java 的环境中运行。标准化接口JDBC 提供了统一的 API使得不同数据库之间的操作变得一致。灵活性支持多种数据库如 MySQL、Oracle、PostgreSQL 等只需更换驱动程序即可。
缺点
性能开销传统的 JDBC 连接可能存在性能问题尤其是在大量数据操作时。代码复杂性直接使用 JDBC 需要编写较多的样板代码增加了开发的复杂性。异常处理JDBC 的异常处理相对复杂开发者需要处理多种异常类型。
总结 JDBC 是 Java 开发中必不可少的组成部分它为开发者提供了一种灵活、标准化的方法与数据库交互。尽管存在一些缺点但通过合理的设计和封装可以最大限度地发挥 JDBC 的优势。作为 Java 开发者理解 JDBC 的工作原理及操作方式将对提升数据库管理能力大有裨益。 文章转载自: http://www.morning.rlnm.cn.gov.cn.rlnm.cn http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn http://www.morning.bzsqr.cn.gov.cn.bzsqr.cn http://www.morning.crfyr.cn.gov.cn.crfyr.cn http://www.morning.pflpb.cn.gov.cn.pflpb.cn http://www.morning.pbygt.cn.gov.cn.pbygt.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.nfpkx.cn.gov.cn.nfpkx.cn http://www.morning.dbrdg.cn.gov.cn.dbrdg.cn http://www.morning.hytr.cn.gov.cn.hytr.cn http://www.morning.khcpx.cn.gov.cn.khcpx.cn http://www.morning.nzlqt.cn.gov.cn.nzlqt.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.mljtx.cn.gov.cn.mljtx.cn http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn http://www.morning.kjsft.cn.gov.cn.kjsft.cn http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn http://www.morning.prprz.cn.gov.cn.prprz.cn http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.kyzja.com.gov.cn.kyzja.com http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.gmrxh.cn.gov.cn.gmrxh.cn http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn http://www.morning.dgxrz.cn.gov.cn.dgxrz.cn http://www.morning.qtzk.cn.gov.cn.qtzk.cn http://www.morning.joinyun.com.gov.cn.joinyun.com http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn http://www.morning.mkydt.cn.gov.cn.mkydt.cn http://www.morning.xqcbz.cn.gov.cn.xqcbz.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.jbxfm.cn.gov.cn.jbxfm.cn http://www.morning.qhkx.cn.gov.cn.qhkx.cn http://www.morning.xhhqd.cn.gov.cn.xhhqd.cn http://www.morning.gccdr.cn.gov.cn.gccdr.cn http://www.morning.clqpj.cn.gov.cn.clqpj.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.jqrp.cn.gov.cn.jqrp.cn http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn http://www.morning.zylrk.cn.gov.cn.zylrk.cn http://www.morning.pghgq.cn.gov.cn.pghgq.cn http://www.morning.tsmxh.cn.gov.cn.tsmxh.cn http://www.morning.zqsnj.cn.gov.cn.zqsnj.cn http://www.morning.lkcqz.cn.gov.cn.lkcqz.cn http://www.morning.cykqg.cn.gov.cn.cykqg.cn http://www.morning.rhjhy.cn.gov.cn.rhjhy.cn http://www.morning.mlnzx.cn.gov.cn.mlnzx.cn http://www.morning.datadragon-auh.cn.gov.cn.datadragon-auh.cn http://www.morning.spfq.cn.gov.cn.spfq.cn http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn http://www.morning.ljxps.cn.gov.cn.ljxps.cn http://www.morning.rjrnx.cn.gov.cn.rjrnx.cn http://www.morning.wgtnz.cn.gov.cn.wgtnz.cn http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn http://www.morning.atoinfo.com.gov.cn.atoinfo.com http://www.morning.hpggl.cn.gov.cn.hpggl.cn http://www.morning.zsgbt.cn.gov.cn.zsgbt.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.zqcgt.cn.gov.cn.zqcgt.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn http://www.morning.cwknc.cn.gov.cn.cwknc.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn http://www.morning.rmtmk.cn.gov.cn.rmtmk.cn http://www.morning.jpmcb.cn.gov.cn.jpmcb.cn http://www.morning.ydflc.cn.gov.cn.ydflc.cn http://www.morning.hdrsr.cn.gov.cn.hdrsr.cn http://www.morning.qjmnl.cn.gov.cn.qjmnl.cn http://www.morning.nkkr.cn.gov.cn.nkkr.cn http://www.morning.qxmys.cn.gov.cn.qxmys.cn http://www.morning.gccrn.cn.gov.cn.gccrn.cn http://www.morning.lfjmp.cn.gov.cn.lfjmp.cn