mysql数据库驱动的类全名_【Java学习】JDBC的学习(了解
CLass等)
JDBC是什么?
JDBC是⼀个Java API,⽤中⽂可以通俗的解释为,使⽤Java语⾔访问访问数据库的⼀套接⼝集合。这是调⽤者(程序员)和实⾏者(数据库⼚商)之间的协议,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC(java database connection)
既然JDBC也是由Java类和接⼝组成,那么⾸先要学习的是,它属于哪个包下⾯。
在JDBC中包含了两个包:java.sql和javax.sql
java.sql:基本功能,这个包中的类和接⼝主要针对基本的数据库编程服务,如⽣成连接、执⾏语句以及准备语句和运⾏批处理查询等。同时也有⼀些⼉⾼级的处理,⽐如批处理更新、事务隔离和可滚动结果集等。
javax.sql:扩展功能。它主要为数据库⽅⾯的⾼级操作提供了接⼝和类。如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引⼊了容器管理的连接池、分布式事务和⾏集等。
JDBC结构概述
可以看出JDBC在图中的位置,前⽂说过是程序员与数据库⼚商之间的协议。⾸先Java提拱了JDBC的接⼝,服务器⼚商提供了JDBC的驱动,这样我们通过JDBC Driver Manager来进⾏管理数据库。
主要接⼝和类
DriverManager: 这个类管理数据库驱动程序的列表。
确定内容是否符合从Java应⽤程序使⽤的通信⼦协议正确的数据库驱动程序的连接请求。
识别JDBC在⼀定⼦协议的第⼀个驱动器将被⽤来建⽴数据库连接。
Driver: 此接⼝处理与数据库服务器通信。
很少直接直接使⽤驱动程序(Driver)对象,⼀般使⽤DriverManager中的对象,dw网页设计位置1
它⽤于管理此类型的对象。它也抽象与驱动程序对象⼯作相关的详细信息
Connection : 此接⼝与接触数据库的所有⽅法。
连接对象表⽰通信上下⽂,即,与数据库中的所有的通信是通过此唯⼀的连接对象。
Statement : 可以使⽤这个接⼝创建的对象的SQL语句提交到数据库。
⼀些派⽣的接⼝接受除执⾏存储过程的参数。
ResultSet: 这些对象保存从数据库后,执⾏使⽤Statement对象的SQL查询中检索数据。
它作为⼀个迭代器,可以通过移动它来检索下⼀个数据。
SQLException: 这个类⽤于处理发⽣在数据库应⽤程序中的任何错误。
JDBC编程(以mysql为例)
git阮一峰教程
注册驱动(有三种⽅式)
①Class.forName("sql.jdbc.Driver");Java规范中明确规定,所有的驱动程序必须在静态初始代码块中将驱动注册到驱动程序的管理器中,
static{
try{
Class.forName(driver);
}
catch(Exception ex){
ex.printStackTrace();
}
}
这样做的好处是,再类被加载到⼯程时就被执⾏了,⽽且之执⾏⼀次,数据库驱动只要加载⼀次就可以了。
【知识点】 Class类
在这⾥⾯我们看到了,这个⾥⾯有⼀个Class类,它调⽤了⼀个forName()⽅法,那么这个Class类是个什么东西呢?
Class类是在java.lang包下的,所以不⽤⼿动的导⼊。
看⼀下Class的构造⽅法[1]
private Class(ClassLoader loader){
classLoader = loader;
}
不⽤去管什么ClassLoader,看了⼀眼private关键字,应该就知道了,当private修饰构造⽅法的时候,说明该类是不能在类的外⾯进⾏实例化的。所以Class类不能像普通的类⼀样,以new Xxx()的形式进⾏创建对象,它的对象只能由JVM创建。[2]
Class类到底是什么呢?不妨我们通俗的说⼀下,Java程序在运⾏的时候,我们会让它创建⼀些对象,系统通过RTTI对所有的对象进⾏运⾏时类型表⽰。
【知识点】RTTI
RTTI(runtime type Identification),通过运⾏时类型信息程序能够使⽤基类的指针或引⽤来检查这些指针或引⽤所指的对象的实际派⽣类型。
我们把它叫成运⾏时类型信息,或许更加的好理解。这个是Java语⾔中很强⼤的机制。
⾸先要知道的运⾏时都会存在哪些类型信息呢?如果⼀个类继承⾃另⼀个类,在创建⼦类的对象时,需要RTTI存储这些关系,他会有typeid 操作符,返回指针和引⽤所指的实际类型,typeid函数等等,我们简要的理解为Java的RTTI⾥⾯就是记录着各种类型的信息。
以下是⼀些常⽤的⽅式。
A = (A)b;向下转型
我们可以针对于基类来编程,从⽽降低程序的耦合度,以Java来说常常通过继承的⽅式,来达到这种效果。
public class Demo {
public static void main(String[] args) {
Animal [] animals = new Animal[2];
animals[0] = new Tiger();
animals[1] = new fish();
for (Animal animal : animals) {
animal.breath();
}
}
}
abstract class Animal {
isreplace什么意思abstract void breath();
}
class Tiger extends Animal{
@Override
void breath() {
// TODO Auto-generated method stub
}
}
汇编语言是谁发明的class fish extends Animal{
@Override
void breath() {
/
/ TODO Auto-generated method stub
}
}
像这种继承关系,之所以能够编译通过,是因为Tiger和FIsh都会向上转为基类,他们⾃⾝的类型信息会丢失,但是程序运⾏的时候,当我们调⽤animal.breath();它们却能准确的到所属类型的⽅法进⾏调⽤,这是为什么呢?这就是运⾏时绑定(动态绑定)机制。
进⼀步分析,RTTI⾥⾯就是存储着程序运⾏时类型的⽅法列表,继承结构等等信息。
load class(类的装载过程)
类从被加载到卸载,他的⽣命周期包括:加载 验证 准备 解析 初始化 使⽤ 和卸载七个阶段
⽽类的加载阶段有:加载 验证 准备 解析 初始化。
重点说⼀下加载阶段:类只有在要运⾏的时候才会被加载进JVM,编译后的class⽂件现在还没有加载到jvm,当我们命令⾏输⼊java
xxx.class,这个时候类才开始加载到虚拟机,⼀般来说⼀个class只会被加载⼀次,下⼀次就会从Jvm的class缓存中获取,不会再去⽂件系统中获取了。具体的过程是:java这个命令是进⾏的,到jre,再到JRE中的jvm.dll,这个就是Java 虚拟机,这个时候虚拟机启动,它⾸先就加载了第⼀个类加载器--Bootstrap Loader,这个BootstrapLoader⼜加载了第⼆个类加载器ExtClassLoader,设定parent为null(本质上是bootstraploader,但是它是由C++编写的,⽆法到这个实例)这个BootstrapLoader⼜加载了最后⼀个类加载器APPClassLoader,设定它的parent为ExtClassLoader。
类的类class of classes
Class类原理:当各类被实例化后,JVM会⾃动创建该类的Class对象,或者通过类加载器defineClass()⽅法⽣成。
所有的类都继承⾃Object类,Object类有⼀个getClass()⽅法,这个⽅法可以获取某个对象的Class引⽤,这个引⽤就是指向的是Class类的对象。
因为是针对类的关系⽽⾔,所以⼀个Class对象对应多个类的实例化。
获取Class对象:
通过类名来获取:
public class Hello{}
Class hello = Class.forName("Hello");
通过对象来获取。
public class Hello{}
Hello h = new Hello();
Class hello = h.getClass();
通过类字⾯量来获取
public class Hello{}
Class hello = Hello.class;
【注】使⽤第三种⽅法来获取Class对象,Jvm不会加载类,也就不会初始化,⽽其他两种⽅法,会⾃动加载并初始化类。
回到正题。第⼆种注册数据库驱动的⽅法是。
②
Driver drv = new oracle.jdbc.driver.OracleDriver();
③ 编译时在虚拟机中加载驱动
java -D jdbc.drivers = 驱动全名 类名
例如: javac -D jdbc.drivers = oracle.jdbc.driver.OracleDrvier xxx.java
【问题】以下是知乎的问题
JDBC注册数据库驱动,啥意思?
Class.forName("sql.jdbc.Driver")不是反射么,得到这个类的信息,和注册数据库驱动有啥关系?
答:
作者:⽊⼥孩
来源:知乎mysql面试题 知乎
著作权归作者所有。商业转载请联系作者获得授权,⾮商业转载请注明出处。
创建连接
创建⼀个Connection对象,建⽴物理连接
static final String USER = "XXX";
static final String PASSWORD = "xxx";
System.out.println("database is connecting");
Connection conn = Connection("jdbc:oracle:thin:@192.168.0.23:1521:tarena",USER,PASSWORD);
回想之前的结构图,我们可以知道,通过DriverManager可以操作数据库的驱动,从⽽进⾏数据库的相关操作。
这⾥Connection连接就是通过DriverManager的静态⽅法getCOnnection()来得到的,这个⽅法的实质是把参数传到实际的Driver中的connect()⽅法来忽的数据库的连接的。
下⾯是⼀些格式的补充:
Oracle URL的格式:jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端⼝号):XXXXXX(所使⽤的库名)
MySql URL:jdbc:mysql://192.168.8.21:3306/test
SQLServer URL 的写法 jdbc:microsoft:sqlserver://192.168.8.21:1433
获取Statement对象
通过Connection对象createStatement()来创建Statement对象
Statement stm = ateStatement();
执⾏SQL语句
通过Statement来执⾏滑动轴承示意图
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论