jdbc标准和原理

1.什么是JDBC
JDBC( Java DataBase Connectivity,java 数据库连接 )是一种用于执行 SQL 语句的 Java API , 可
以为多种关系数据库提供统一访问 , 它由一组用 Java 语言编写的类和接口组成。
JDBC API 是 SUN 公司提出的访问数据库的接口标准,是访问数据库的通用API。

2.为什么要使用JDBC?
有了 JDBC API , 就不必为访问不同的数据库编写不同的程序 , 程序员可以使用相同的一套 API 访问不同的数据库 。
作为 API , JDBC 为程序开发提供标准的接口 , 并为数据库厂商及第三方中间件厂商实现不同数据库的连接提供了标准方法。
简单地说 , JDBC 可做三件事:与数据库建立连接、发送操作数据库的语句、返回处理结果。而不同的数据库如何处理sql语句,如何返回处理结果不需要程序员关注,由数据库厂商实现。
标准

jdbc实现原理
原理

实现解析:
导入jdbc jar包(下面的例子是连接Oracle获取数据的所以用Oracle提供的Java包)
把连接Oracle数据库所需要的 jar 包(驱动包)导入到项目
中。接口的实现类 ojdbc6.jar是Oracle 公司为 Oracle
数据库提供的接口实现类 , 相应的还有 MySQL、
SqlServer 等数据库提供的接口实现类。

1.Driver接口及驱动类加载
要使用JDBC接口,需要先将对应数据库的实现部分(驱动)加载进来。

驱动类加载方式(Oracle):
Class.forName(“oracle.jdbc.driver.OracleDriver”);
这条语句的含义是:利用反射的方式,通过类全限定名加载驱动类,以实现在 DriverManager 中的“自动注册”。

2.Connection接口

Connection接口负责应用程序对数据库的连接,在加载驱动之后,使用url、username、password三个参数,创建到具体数据库的连接。

Class.forName(“oracle.jdbc.OracleDriver”)
//根据url连接参数,找到与之匹配的Driver对象,调用其方法获取连接
Connection conn = DriverManager.getConnection(
“jdbc:oracle:thin:@127.0.0.1:1521:xe”,
“system”,“123456”);
需要注意的是:Connection只是接口,真正的实现是由数据库厂商提供的驱动包完成的。

3.连接 Oracle 数据库必要数据

  1. Ip( Oracle 数据库所在服务器的 ip 地址 ) 127.0.0.1( 本机安装有Oracle数据库 )
  2. sid( Oracle 数据库的唯一标识号 ) xe
  3. port( Oracle 数据库的默认端口号 ) 1521
  4. dbUser/dbPassword( 数据库的访问帐号 ) scott/tiger

Oracle连接url参数:
jdbc:oracle:thin:@127.0.0.1:1521:xe //参照具体数据库环境

扫描二维码关注公众号,回复: 4956202 查看本文章

4.Statement接口

Statement接口用来处理发送到数据库的SQL语句对象,通过Connection对象创建。主要有三个常用方法:
Statement stmt=conn.createStatement();
//1.execute方法,如果执行的sql是查询语句且有结果集则返回true,如果是非查询语句或者没有结果集,返回false
boolean flag = stmt.execute(sql);
//2.执行查询语句,返回结果集
ResultSet rs = stmt.executeQuery(sql);
//3.执行DML语句,返回影响的记录数
int n = stmt.executeUpdate(sql);

5.ResultSet接口
执行查询SQL语句后返回的结果集,由ResultSet接口接收。

常用处理方式:遍历 / 判断是否有结果。
String sql = “select * from emp”;
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getInt(“id”)+",“
+rs.getString(“name”) );
}
查询的结果存放在ResultSet对象的一系列行中
指针的最初位置在行首,使用next()方法用来在行间移动
getXXX()方法用来取得字段的内容。

6、JDBC使用过程总结:

  1. 在项目加入数据库的驱动(jar 包)
    连接不同的数据库 , 需要加入不同的数据库的 jar 包
  2. 必须有要连接的数据库的参数
    不同的数据库 , 连接字符串不一样。
  3. 连接字符串
    oracle 的连接字符串: jdbc: oracle: thin: @ip: port: sid
  4. 构造对数据库的连接并操作
    构造 Connection(会话,连接)对象
    DriverManager.getConnection( url , dbUser , dbPassword ) ;
    While( rs.next() ){
    int id = rs.getInt(“id”) ;
    }
  5. 关闭资源
    if (rs != null) rs.close() ;
    if (stmt != null) stmt.close() ;
    if (conn != null) stmt.close() ;
    构造 Statement(语句)对象: 操作数据库的对象
    stmt = conn.createStatement() ;
    如果执行的是查询语句 , 使用 executeQuery 方法 , 返回结果集 , 标识查询结果:
    ResultSet rs = stmt.executeQuery(“select * from emp_xxx”) ; //执行查询

实现源码:
package cn.lyc.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import cn.lyc.entity.Emp;

public class EmpDao {
private static String url = “jdbc:oracle:thin:@localhost:1521:xe”;//数据库连接地址
private static String cname = “sys”;//登陆数据库的用户名
private static String password = “1234”;//登陆数据库的用户密码
private static String driver = “oracle.jdbc.driver.OracleDriver”;//驱动 1.7后可以学加载驱动的Java语句:jdk会自动适配的
public static void main(String[] args) {
List lsemp = new ArrayList();
ResultSet rs = null;
Statement statement = null;
Connection connect = null;
try {
//加载驱动
Class.forName(driver);
//获取连接对象
connect = DriverManager.getConnection(url, cname, password);//连接对象 url数据库地址,用户名,密码
//获取语句操作对象
statement = connect.createStatement();
String sql = “select * from emp”;//sql查询语句
//返回结果集
rs = statement.executeQuery(sql);
//遍历结果集:转换成Java对象
while(rs.next()){
Emp emp = new Emp();
emp.setEmp_no(rs.getInt(“emp_no”));
//rs.getInt(“emp_no”)获取数据库查询视图中出现的列 emp_no对象列的字段
emp.setEmp_name(rs.getString(“emp_name”));
emp.setEmp_hiredate(rs.getDate(“emp_hiredate”));
emp.setSal(rs.getDouble(“emp_sal”));
lsemp.add(emp);//把对象添加到集合中
}
System.out.println(lsemp);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
//关闭资源:释放资源
rs.close();
statement.close();
connect.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

常见错误
注意:一般的 SQLException 都是因为操作数据库时出错了 , 要么 Sql 语句写错了 , 要么数据库中
的表或数据出错了,要么是配置数据库连接参数出错。

1、登录被拒绝
e1
错误原因:
程序中的登录账户/密码参数设置错误,没有oracle用户或者密码不是1234

2、SID不正确
e2
错误原因:
SID是oracle数据库的唯一标识,与本地的oracle数据库环境有关,如果配置错误,会出SQLException

3、列名错误
e3
错误原因:
要查找的表与查找的列名不匹配,该表下没有此列

4、无效字符
在这里插入图片描述
错误原因:
SQL语句语法错误,语句结尾不能有";"

猜你喜欢

转载自blog.csdn.net/qq_42902470/article/details/86149180