JDBC详解
MySQL只能识别SQL语句,我们用Java代码不能直接操作,而JDBC的出现就解决了这一难题。而JDBC在开发中出
现的身影是非常多的,比如我们目前最为常用的框架Mybatis,底层就是基于JDBC,所以我们必须要对JDBC有较深
的了解。
1,JDBC的步骤:
1,加载驱动。
2,获得连接。
3,获得执行者对象。
4,执行sql语句。
5,处理结果集。
6,释放资源。
原生的JDBC上面的6步缺一不可。
只不过针对于增删改而言,结果集只是一个int值,表示受影响的行数。
针对于查询来讲,结果集才有丰富的意义,表示我们查询到的所有的数据。
2,分步介绍:
2.1 Connection
Connection表示与特定数据库的连接,可以获取到数据库的一些信息,这些信息包括:其表信息,应该支持的
SQL语法,数据库内有什么存储过程,此链接功能的信息等等。
2.2 Statement
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
Statement 的功能在于根据传入的sql语句,将传入sql经过整理组合成数据库能够识别的sql语句(对于静态的sql语
句,不需要整理组合;而对于预编译sql语句和批量语句,则需要整理),然后传递sql请求,之后会得到返回的结
果。对于查询sql,结果会以ResultSet的形式返回。
要注意的是,针对于sql语句不同,我们用Statement调用的方法也是不一样的。executeQuery(String sql):该方
法只能用于查询,返回一个ResultSet的结果集。 executeUpdate(String sql):该方法可以用户增删改,返回一个
int,表示受影响的行数。除此之外,如果需要处理多条语句,还有一个批处理的功能。addBatch(String sql)。
但是要注意的是这个方法的sql语句顺序不能上下颠倒,sql语句先添加的先执行。
2.3 ResultSet
当Statement查询sql执行后,会得到ResultSet对象,ResultSet对象是sql语句查询的结果,作为数据库结果的映
射,其映射关系如下图所示。ResultSet对从数据库返回的结果进行了封装,使用迭代器的模式逐条取出结果集中
的记录。
三,具体实现案例:
需求:
利用JDBC查询employee表中所有的数据。
代码示例:
DBConnection {
static final String URL = "jdbc:mysql://127.0.0.1:3306:数据库1";
static final String USER_NAME ="username";
static final String PASSWORD = "password";
public static void main(String[] args) {
connectionTest();
} public static void connectionTest(){
Connection connection = null; Statement statement = null;
四,总结:
Connection connection = null; Statement statement = null;
ResultSet resultSet = null;
try {
//1.加载类,并注册驱动器(Driver会注册到DriverManager中)
//加载数据库驱动
Class.forName("mysql.jdbc.driver");
//2.根据特定的URL,返回可以接受此URL的数据库驱动对象
Driver driver = DriverManager.getDriver(URL);
Properties props = new Properties();
props.put("user", USER_NAME);
props.put("password", PASSWORD);
//3.使用数据库驱动创建数据库连接
Connection会话 connection = driver.connect(URL, props);
//4.获得Statement对象
statement = connection.createStatement();
//5.执行 sql语句,返回结果
resultSet = statement.executeQuery("select * from employees");
//6.处理结果,取出数据
while(resultSet.next()){
System.out.println(resultSet.getString(2));
} /
/7.关闭链接,释放资源
} catch (ClassNotFoundException e) {
System.out.println("加载Oracle类失败!"); e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}finally{
//使用完成后管理链接,释放资源,释放顺序应该是: ResultSet ‐>Statement ‐>Connection
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
} t
ry {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} t
ry {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
JDBC是Java提供的一个接口,在这些接口中规定了一些方法,但是这些方法中并没有给出具体的方法实现。而这些方法的实现是由数据库生成厂商自己提供的。这样,我们在学习的时候,只要学习一套Java提供的规范接口,就可以任意操作MySQL,oracle,SQLServer 等不同的数据库了,而不需要关心底层的实现细节。
|
|