<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
JDBC笔记
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC为开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够使用java API编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。
JDBC为我们提供了java连接数据库的驱动。而这个驱动也是由Java开发出来的,我们只需要将这个驱动放进项目中,通过这个驱动,我们就可以用Java连接数据库,进行数据库的管理操作。
了解:JDBC与ODBC的区别
二者皆可以实现对数据库的操作(连接、增删改查、建库建表)。
<!--[if !supportLists]-->l <!--[endif]-->JDBC是SUN开发的java连接数据库的标准
<!--[if !supportLists]-->l <!--[endif]-->ODBC是微软开发的,C语言的
1、准备工作
1.0 数据操作步骤
<!--[if !supportLists]-->l <!--[endif]-->注册驱动(只做一次)
<!--[if !supportLists]-->l <!--[endif]-->建立数据库连接
<!--[if !supportLists]-->l <!--[endif]-->创建执行SQL的语句(Statement)
<!--[if !supportLists]-->l <!--[endif]-->执行SQL语句
----如果是查询,需要处理执行的结果(如:接收查询数据)
<!--[if !supportLists]-->l <!--[endif]-->释放资源(千万不要漏了)
1.1 创建java工程
项目名的命名规范:项目名全部小写。创建一个java工程:jdbcproject。
1.2 导入jar包
使用JDBC操作数据库,需要导入JDBC的驱动包:mysql-connector-java-5.1.39.jar。
在项目下面创建一个文件夹:lib,将驱动包复制到lib下面,并将jar包加载到项目中,如下图所示:
<!--[if !supportLists]-->l <!--[endif]-->新建lib文件夹:
<!--[if !supportLists]-->l <!--[endif]-->将jar包复制到lib文件夹下面:
<!--[if !supportLists]-->l <!--[endif]-->选中jar包,单击右键,在弹出的窗口中选择“Add to Build Path” ,将jar包加载到项目中:
这时,我们可以在项目的引用包中看到我们引用的jar包:
2、JDBC连接数据库
经过上面的准备工作,我们就可以开始使用Java连接数据库了。
2.1 加载JDBC驱动
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。
try { // 加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStackTrace(); } |
成功加载后,会将Driver类的实例注册到DriverManager类中。
加载驱动时,如果我们项目中没有导入驱动包或者驱动的名字不对,会出现驱动加载失败的异常。异常信息:
|
2.2 提供JDBC连接的参数
连接数据库时,需要下面几个参数:
url=jdbc:mysql://localhost:3306/database_name username=root password=1111
//这个可以解决中文乱码,在最后面可以设置编码,这里设的是utf-8 url = "jdbc:mysql://localhost:3306/yunlian??autoReconnect=true&autoReconnectForPools=true&useUnicode=true&characterEncoding=utf-8"; |
其中,username和password是连接数据库的用户名和密码,一般默认的用户名是root,密码是安装MySQL时的密码。url是连接数据库的地址。
当我们访问的是本机的数据库的时候,url的值也可以为“jdbc:mysql:///database_name”
2.3 创建数据库的连接
通过DriverManager类创建数据库连接对象Connection。DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名和密码,创建一个JDBC Connection 对象。
try { //试图建立到给定数据库 URL 的连接 Connection con = DriverManager.getConnection(url, username, password); } catch (SQLException e) { System.out.println("数据库连接失败!"); e.printStackTrace(); } |
上面需要导入的包都是java.sql的包,如下所示:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; |
在连接数据库时,如果数据库不存在,或者用户名、密码错误,会出现连接数据库失败的异常
用户名或者密码错误:
当我们的url中的数据库不存在的时候:
当URL中的IP或者主机连不上的时候,就会出现连接超时的异常:
当数据库端口号写错的时候,会出现连接被拒绝:
3、数据库操作
数据库操作分为更新和查询两种操作。
我们想要执行SQL语句,就必须要创建一个java.sql.Statement对象,Statement对象可以将SQL语句发送到数据库,并返回一个执行结果(如:添加数据时会返回数据库的影响行数)。
Statement实例分为以下3种类型:
<!--[if !supportLists]-->l <!--[endif]-->执行静态SQL语句。通常通过Statement实例实现
<!--[if !supportLists]-->l <!--[endif]-->执行动态SQL语句。通常通过PreparedStatement实例实现
<!--[if !supportLists]-->l <!--[endif]-->执行数据库存储过程。通常通过CallableStatement实例实现(Oracle会讲)
3.0 Statement与PreparedStatement
Statement与PreparedStatement两者都可以把SQL语句从Java程序发送到指定数据库,并执行SQL语句,但是他们也具有如下区别:
<!--[if !supportLists]-->l <!--[endif]-->Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出;
<!--[if !supportLists]-->l <!--[endif]-->PreparedStatement会形成预编译的过程,对于多次重复执行的语句,PreparedStatement的效率要高一些,而且适合批处理数据(批量添加);
<!--[if !supportLists]-->l <!--[endif]-->最重要的是,PreparedStatement能有效防止危险自负的注入,即SQL注入问题。
根据比较结果可知,我们需要选用PreparedStatement更好、更快速、更安全。因此,在以后的JDBC操作中,建议使用PreparedStatement。
Statement接口提供了两种常用的执行SQL语句的方法:executeQuery 、executeUpdate。executeUpdate一般用于添加、删除、修改数据;executeQuery一般用于查询数据。
PreparedStatement接口继承自Statement。PreparedStatement在sql语句中通过使用占位符?来代替常量字段值,setXXX方法来填充字段值,取代掉占位符,形成完整的可执行的sql语句。
3.1 添加数据
<!--[if !supportLists]-->l <!--[endif]-->静态SQL添加
// connection.createStatement(): // 创建一个 Statement 对象来将 SQL 语句发送到数据库。 statement = connection.createStatement(); // executeUpdate(String sql):执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 // DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。 // 添加数据 String sql = "insert into test(id,username,birthday) values('15','张三','1999-09-09')"; int rows = statement.executeUpdate(sql);//返回的结果是受影响的行数 System.out.println(rows+"行"); |
<!--[if !supportLists]-->l <!--[endif]-->动态SQL添加
String sql = "insert into user(username,password) values(?,?)"; ps = connection.prepareStatement(sql); ////给占位符赋值 ////setNString(int parameterIndex, String value) // //将指定参数设置为给定 String 对象。 ////位置编号从 1 开始,不是从零开始 ps.setString(1, "王五");//setString 表示的是该位置的参数需要字符串,对应数据库字段类型 ps.setString(2, "我是密码"); ////执行SQL int rows = ps.executeUpdate(); System.out.println(rows+"行"); |
3.2 修改数据
<!--[if !supportLists]-->l <!--[endif]-->静态SQL修改
|
<!--[if !supportLists]-->l <!--[endif]-->动态SQL修改
|
3.3 删除数据
<!--[if !supportLists]-->l <!--[endif]-->静态SQL删除
|
<!--[if !supportLists]-->l <!--[endif]-->动态SQL删除
|
4、释放资源
据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
5、小结
<!--[if !supportLists]-->l <!--[endif]-->连接数据库时用到的三个类
<!--[if !supportLists]-->l <!--[endif]-->静态SQL与动态SQL的区别
<!--[if !supportLists]-->l <!--[endif]-->熟练使用动态SQL实现添加、修改、删除数据的功能
相关推荐
以下是常见的C++笔试面试题及其核心知识点解析,帮助您系统复习
计算机短期培训教案.pdf
计算机二级Access笔试题库.pdf
下是一份关于C++毕业答辩的心得总结,内容涵盖技术准备、答辩技巧和注意事项,供参考
内容概要:本文档详细介绍了英特尔为苹果公司构建的基于智能处理单元(IPU)的Cassandra集群的技术验证(PoC)。主要内容涵盖IPU存储用例、已建存储PoC、MEV到MMG400的过渡、苹果构建IPU-Cassandra集群的动机以及PoC开发进展。文档还探讨了硬件配置、软件环境设置、性能调优措施及其成果,特别是针对延迟和吞吐量的优化。此外,文档展示了六节点Cassandra集群的具体架构和测试结果,强调了成本和复杂性的降低。 适合人群:对分布式数据库系统、NoSQL数据库、IPU技术感兴趣的IT专业人员和技术管理人员。 使用场景及目标:适用于希望了解如何利用IPU提升Cassandra集群性能的企业技术人员。主要目标是展示如何通过IPU减少服务器部署的成本和功耗,同时提高数据处理效率。 其他说明:文档中涉及的内容属于机密级别,仅供特定授权人员查阅。文中提到的技术细节和测试结果对于评估IPU在大规模数据中心的应用潜力至关重要。
计算机二级考试C语言题.pdf
计算机发展史.pdf
计算机仿真技术系统的分析方法.pdf
yolo编程相关资源,python编程与YOLO算法组成的坐姿检测系统,功能介绍: 一:实时检测学生错误坐姿人数 二:通过前端阿里云平台显示上传数据,实现数据可视化
办公室网安全监控uptime-kuma,docker镜像离线压缩包
计算机课程设计-网络编程项目源码.zip
将该dll包放入项目并引用,可以操作打印机
杰奇2.3内核淡绿唯美小说网站源码 PC+手机版 自动采集 全站伪静态,送10.1版本关关采集器
计算机辅助教学.pdf
内容概要:本文详细介绍了如何利用天文相机和其他相关硬件设备搭建一套高画质、高帧率的流星监控系统,以及针对红色精灵闪电这一特殊自然现象的捕捉方法。文中不仅涵盖了硬件的选择标准如CMOS靶面尺寸、量子效率等重要参数,还提供了基于Python和OpenCV实现的基本监控代码示例,包括亮度突变检测、运动检测算法等关键技术点。此外,对于安装位置的选择、供电方式、成本控制等方面也有具体的指导建议。 适用人群:对天文摄影感兴趣的爱好者,尤其是希望捕捉流星和红色精灵闪电等瞬时天文现象的专业人士或业余玩家。 使用场景及目标:适用于希望搭建个人天文观测站,用于科学研究或个人兴趣爱好的场景。目标是能够稳定可靠地捕捉到流星和红色精灵闪电等难以捉摸的天文现象,为研究提供高质量的数据资料。 其他说明:文中提到的一些技术和方法虽然较为复杂,但对于有一定编程基础和技术动手能力的人来说是非常实用的参考资料。同时,文中提供的省钱技巧也为预算有限的用户提供了一些有价值的建议。
时间序列分析-基于R(第2版)习题数据
内容概要:本文详细介绍了如何使用LabVIEW通过网口读取阿特拉斯PM4000控制器的扭矩值。主要内容涵盖开放式通讯协议的理解、阿特拉斯调试软件和测试软件的应用、LabVIEW程序的具体实现步骤,包括初始化网络连接、发送读取扭矩值命令、接收并解析扭矩值数据,以及关闭网络连接。文中还提供了多个调试技巧和注意事项,如硬件接线配置、数据解析方法、常见错误及其解决办法,以及性能优化建议。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些需要集成阿特拉斯设备并与之进行数据交互的专业人士。 使用场景及目标:适用于需要实时监控和采集阿特拉斯PM4000控制器扭矩值的工业应用场景,旨在提高数据采集效率和准确性,确保设备运行状态的良好监测。 其他说明:文中提供的代码片段和调试经验有助于快速定位和解决问题,提升开发效率。此外,还强调了数据解析过程中需要注意的细节,如字节序问题和超时设置等。
计算机二级VB重点知识点解析.pdf
计算机二级c语言(操作题105套其余参考).pdf