【Java EE】JDBC数据库编程基础
来源:互联网 发布:淘宝上没有燕尾型材了 编辑:程序博客网 时间:2024/05/29 07:11
JDBC概述
JDBC概述
- JDBC(Java Database Connectivity):Java数据库连接,它是一种Java程序与数据库系统通信的标准API
- JDBC是Java操作数据库的规范,由一组用Java语言编写的类和接口组成,它对数据库的操作提供了基本方法,但对于数据库的细节操作由数据库厂商进行实现
- 使用JDBC可以实现通过同一的语法对多种关系数据库进行访问,而不用担心不同数据库之间操作语言的差异
JDBC体系结构
- JDBC Driver Interface:驱动程序管理器接口
- JDBC API
JDBC优缺点
- 优点:
- JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方
- JDBC支持不同的关系数据库,这使得程序的可移植性大大加强
- JDBC API是面向对象的,可以让用户把常用的方法封装为一个类,以备后用
- 缺点:
- 使用JDBC访问数据记录的速度会受到一定程度的影响
- JDBC结构中包含不同厂家的产品,这就给更改数据源带来了很大的麻烦
- 优点:
JDBC核心接口与类
- JDBC核心类库包含在java.sql包中
- 类:
- DriverManager:负责管理JDBC驱动程序,使用JDBC驱动程序之前,必须先将驱动程序加载并注册后才可以使用,同时提供方法来建立与数据库的连接
- SQLException:与数据库操作相关的异常
- 接口:
- Connection:特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果
- PreparedStatement:表示预编译的SQL语句的对象
- Statement:用于执行静态SQL语句并返回它所产生结果的对象
- ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
- CallableStatement:用于执行SQL存储过程的接口
创建JDBC应用
JDBC连接数据库的过程
- 找到驱动程序文件:
- 各数据库厂商均提供对JDBC的支持,即提供数据库连接使用的驱动程序文件
- Oracle数据库的驱动程序文件路径:
<Oracle安装路径>\product\<版本号>\db_1\jdbc\lib\<任一jar包>
- 载入JDBC驱动程序:
- 将驱动程序文件粘贴到IDE里需要使用JDBC的工程根目录下,然后右键jar包,选择Build Path下的Add to Build Path,将jar包解压到工程项目中
- 注册数据库驱动:
- Class类中提供加载驱动程序的方法:
// forName()方法的作用是将指定字符串名的类加载到JVM中public static Class forName(String className) throws ClassNotFoundException{...} // className:表示类的描述符的字符串
- Oracle驱动的类描述符为:
oracle.jdbc.driver.OracleDriver
- 加载数据库驱动,注册到驱动管理器:
Class.forName("oracle.jdbc.driver.OracleDriver");
- Class类中提供加载驱动程序的方法:
- 定义连接URL:
- Oracle数据库的url格式为:JDBC协议+IP地址或域名+端口+数据库名称
jdbc:oracle:thin:@<主机名或IP>:<端口号>:<数据库名>/** * 示例: * jdbc:oracle:thin:@localhost:1521:orcl */
- Oracle数据库的url格式为:JDBC协议+IP地址或域名+端口+数据库名称
- 获取Connection对象,建立连接:
- Connection接口位于java.sql包中,是与特定数据库的连接会话,只有获得特定数据库的连接对象,才能访问数据库,操作数据库中的数据表、视图和存储过程
- DriverManager类主要作用于用户及驱动程序之间,它是JDBC中的管理层,通过DriverManager类可以管理数据库厂商提供的驱动程序,并建立应用程序与数据库之间的连接
返回值类型 方法 说明 static ConnectiongetConnection(String url)试图建立到给定数据库 URL 的连接static ConnectiongetConnection(String url,Properties info)试图建立到给定数据库 URL 的连接static ConnectiongetConnection(String url,String userName,String password)试图建立到给定数据库 URL 的连接// 示例Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
- 找到驱动程序文件:
数据库驱动程序分类
- JDBC-ODBC桥:把JDBC API调用转换成ODBC API调用,然后ODBC API调用针对供应商的ODBC驱动程序来访问数据库,即利用JDBC-ODBC桥通过ODBC来存储数据源
- 本地API驱动:直接把JDBC调用转变为数据库的标准调用再去访问数据库,这种方法需要本地数据库驱动代码通讯
- 网络协议驱动:使用一种与具体数据库无关的协议将数据库请求发送给一个中间服务器
- 本地协议驱动:直接把JDBC调用转换为符合相关数据库系统规范的请求,通常开发中多采用这种驱动
- 执行效率高:本地协议驱动不需要吧JDBC调用传给ODBC、本地数据库接口或中间层服务器
- 平台独立性:本地协议驱动完全由Java实现,写的应用也可以直接和数据库服务器通讯
执行SQL语句的接口
Statement接口
- Statement接口中封装了JDBC通过调用SQL语句对数据库进行的操作
- Statement接口提供了执行语句和获取查询结果的基本方法
- 当在实际开发过程中,需要将程序中的变量作为SQL语句的条件参数时,使用Statement接口进行操作过于繁琐,而且存在安全方面的缺陷
PreparedStatement接口
- PreparedStatement接口继承于Statement接口,同时针对带有参数SQL语句的执行操作进行了扩展
- 应用于PreparedStatement接口中的SQL语句,可以使用占位符“?”来代替SQL语句中的参数,然后再通过setInt()等方法对其进行赋值(动态设置参数)
- 使用PreparedStatement对象对SQL语句的占位符参数赋值,其参数的下标值是从1开始
- 在实际开发过程中,如果涉及向SQL语句传递参数,最好使用PreparedStatement接口实现,不仅可以提高SQL的执行效率,还可以避免SQL语句的注入式攻击
ResultSet接口
- 在JDBC API中,使用ResultSet对象接收执行SQL语句的查询语句后返回的查询结果集
- ResultSet接口位于java.sql包中,封装了数据查询的结果集
- ResultSet对象包含了符合SQl语句的所有行,针对Java中的数据类型提供了一套getXXX()方法,通过这些方法可以获取每一行中的数据
- ResultSet接口提供了光标的功能,通过光标可以自由定位到某一行中的数据(boolean absolute(int row) throws SQLException)
SQL数据类型与Java数据类型对照表
SQL数据类型 Java数据类型 CHARStringVARCHARStringLONGVARCHARStringNUMERICjava.math.BigDecimalDECIMALjava.math.BigDecimalBITbooleanTINYINTbyteSMALLINTshortINTEGERintBIGINTlongREALfloatFLOATdoubleDOUBLEdoubleBINARYbyte[]VARBINARYbyte[]LONGVARBINARYbyte[]DATEjava.sql.dateTIMEjava.sql.TimeTIMESTAMPjava.sql.TimestampJDBC日期时间处理
- 对于数据库种不同的时间类型,要分别采用与之相对应的Java包装类来存取:
- 日期类型用java.sql.Date,getDate()只能取出年月日
- 时间类型用java.sql.Time,getTime()只能取出时分秒
- 日期/时间类型用java.sql.Timestamp,getTimestamp()可以把年月日时分秒都取出来
- JDBC的日期/时间类型转换为字符串
Timestamp timeStamp = result.timestamp;// 通过数据库访问获取到数据result.timestampSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(timeStamp);
- java.sql.Timestamp与java.util.Date之间的相互转换
- java.sql.Timestamp是java.util.Date的子类,不需要做任何转换直接赋值即可
- java.util.Date转换为java.sql.Timestamp:
java.sql.Timestamp ts; java.util.Date utilDate; ts.setTime(utilDate.getTime());
- 对于数据库种不同的时间类型,要分别采用与之相对应的Java包装类来存取:
0 0
- 【Java EE】JDBC数据库编程基础
- java学习--数据库编程(JDBC基础概念)
- Java EE JSP编程基础
- 【JAVA】JDBC编程基础
- JDBC Java数据库编程
- Java数据库编程---JDBC
- [Java]JDBC数据库编程
- Java EE之JDBC
- JAVA EE-JDBC
- Java EE编程技术学习笔记(4)-JDBC
- java基础---->jdbc数据库操作
- Java基础-JDBC访问数据库
- Java基础 JDBC操作数据库
- JDBC与Java数据库编程
- JDBC 与JAVA 数据库编程
- JAVA连接数据库编程 JDBC
- java连接数据库--JDBC编程
- JDBC与JAVA数据库编程
- 关于如何进行SQL优化的一些方法和准则
- 一致性哈希算法(consistent hashing)
- Oracle相关压缩技术
- 修改Spring中MaxUploadSizeExceededException返回提示
- python学习:zip函数
- 【Java EE】JDBC数据库编程基础
- Mybatis学习之Mapper工具实践
- 双栈排序练习
- C# 时间格式
- mysql 表设计,约束条件,索引
- linux c之((void *) - 1)是啥意思
- 如何理解 RxJS?
- 怎样写权利要求书(转)
- Pentester Lab学习计划之From SQL Injection to Shell II