JDBC------编程步骤
-
前言
数据库:对数据进行持久化,终端
UI界面—JDBC----->数据库
数据库—JDBC------>显示UI界面
why?解决面向对象的编程语言如何统一操作关系型数据库。
Oracle,mySql,Sql Server…
what?Java DataBase Connectivity
JDBC是制定统一方式操作关系型数据库的标准,学习API。
how?学习JDBC编程的六大步骤
学习JDBC的API -
ODBC,JDBC
ODBC:采用统一的方式操作不同的关系型数据库
用C语言编写
是Microsoft提出的数据库访问接口标准.
JDBC:采用统一的方式操作不同的关系型数据库
用JAVA语言编写
由sun公司提供的 -
JDBC API
学习JDBC就是学习JDBC的API
JDBC API是定义访问关系型数据库中数据的标准,是Java编程语言的类和接口的集合。
两部分:
1)提供给Java开发者的一组独立于数据库的API:
对任何数据库的操作,都可以用这组API来进行。
是一个标准。由sun公司提供的。java.sql包中。
那要把这些通用的API翻译成特定数据库能懂的"指令",就要由JDBC Driver来实现了;2)提供给JDBC驱动程序开发商的编程接口:
它会把我们通过JDBC API发给数据库的通用指令翻译给他们自己的数据库。
由数据库厂商提供驱动,必须实现java.sql.Driver接口,是具体的实现。
导包:ojdbc14.jarJDBC驱动的四种类型:
a)JDBC-ODBC桥驱动:
把c语言转化成java语言,效率很低
b)部分java实现的本地驱动:
把c语言转化成java语言,效率很低 ,必须安装客户端
c)纯java实现的网络驱动
使用数据库特殊的协议
d)纯java实现的本地驱动
采用TCP/IP协议进行通信Oracle只支持第二,四类驱动
现在Oracle采用第四类驱动:thin -
工作原理流程:
装载驱动程序---->
获得数据库连接---->
使用Statement执行SQL语句---->
返回执行的结果---->
关闭相关的连接 -
URL:如何去标识一个唯一的数据库。
可以安装一个数据库,可以配置多个数据库系统。
URL由数据库厂商提供的。
针对Oracle的URL:
jdbc:oracle:thin:@localhost:1521:XE
针对Mysql的URL:
jdbc:mysql://host:port/DB -
JDBC的编程步骤:
-
注册驱动:告诉应用程序连接什么数据库
驱动程序:ojdbc14.jar或者ojdbc5.jar
三种方式:
a) 使用类加载(常用)Class.forName(driverName);
b) 创建driver对象
Driver driver=new driverName(); DriverManager.registerDriver(driver);
c) 使用jdbc.drivers的属性
-Djdbc.drivers=oracle.jdbc.driver.OracleDriver
-
获取与数据库的连接,Connection对象
两种方式:
a)常用DriverManager.getConnection(url,user,passwd);
b)必须和第一步的第二种方式连用
Driver对象.connect(url,properties)
-
创建发送sql语句的对象(Statement)
Statement
a)执行异构的sql语句,效率更高
b)创建对象和执行sql语句
createStatement();
execute***(sql);
c)动态sql语句使用字符串拼接的方式
d)不会进行预编译PreparedStatement
a)执行同构的sql语句,效率更高
b)创建对象和执行sql语句
prepareStatement(sql);
execute***();
c)动态sql语句使用?. 执行sql之前给?赋值
d)会进行预编译,传入的内容是真正的字符串
CallableStatement:执行pl/sql的语句 -
执行sql语句
boolean execute(sql):执行任何sql语句。主要执行没有结果的sql语句
返回是否有结果集
效率低
ResultSet executeQuery(sql):执行查询sql语句
返回结果集
int executeUpdate(sql):执行DMLsql语句
返回受影响行数,insert,update,delete -
处理结果(针对查询语句)
ResultSet:结果集,最开始返回所有数据最前面while(rs.next()){ //处理每一条数据getType() } getType(序列号|字段名字):序列号从1开始
Type是数据类型。
getInt(1),getString(2) getInt("id"),getString("last_name")
为某一个字段赋值:
setType===>setInt()
-
关闭资源,close()
先开的后关,后开的先关
一旦Connection关闭,其他的资源取不到。