JDBC的工作流程:(图片来自:https://blog.csdn.net/caihuangshi/article/details/51265324)
JDBC全称Java Database Connectivity 是一种可用于执行SQL语句的java接口,位于java.sql,javax.sql包下,主要工作流程其实上图已经说明:包括1.加载驱动程序;2.建立链接;3.向数据库发送SQL语句;4.处理返回结果;5.关闭链接。
JDBC中的常用接口和类如下图:(图片来自:https://blog.csdn.net/caihuangshi/article/details/51265324)
1.DriverManager类:用于管理数据库中的所有驱动程序,java中使用Class类的静态方法实现forName(String className)加载需要链接的数据库的驱动程序。常用的方法:
加载posgresql数据库的语句如下:
try{
Class.forName("org.postgresql.Driver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
2.Connection 接口:
与特定数据库的连接(会话)。 执行SQL语句并在连接的上下文中返回结果。
常用方法:
3.Statement接口:用于在已经建立链接的基础上向数据库发送SQL命令。
主要方法:
try{
Statement stmt=con.createStatement();
}catch(SQLException e){
e.printStackTrace();
}
4.PreparedStatement接口
PreparedStatement用来执行动态SQL语句
5.CallableStatement接口
用来执行数据库中的存储过程。
主要方法:get+数据类型():以java中指定类型的形式获取指定的JDBC中相应类型参数的值。
set+数据类型():以指定参数为java中指定数据类型的值。
我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后执行,而存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。----关于存储过程的调用摘自https://www.cnblogs.com/Qian123/p/5349884.html#_label1
6.ResultSet接口:
类似于一个临时表,用来暂时存放数据库操作所获得的结果集。
实例:
package com_jdbc_test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcTest {
public static void main(String[] args) {
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.postgresql.Driver");
c = DriverManager.getConnection("jdbc:postgresql://xxxxxxx:xxxx/postgres", "xxxx", "xxxx");
c.setAutoCommit(false); // 把自动提交
// System.out.println("Opened database successfully");
// String sql="select ss();";
// stmt = c.createStatement();
// stmt.executeQuery(sql);
CallableStatement cc=c.prepareCall("{call ss()}");
CallableStatement cs=c.prepareCall("{call fangwen2()}");
cc.execute();
cs.execute();
ResultSet re=cc.getResultSet();
ResultSet re2=cs.getResultSet();
while(re2.next()) {
System.out.println("执行结果为:"+re2.getString(1));
}
System.out.println("执行成功");
stmt.close();
c.commit();
c.close();
}catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
}
}