JDBC的连接

JDBC

JDBC 是什么?

Java DateBase Connectivity (Java语言连接数据库)

JDBC的本质是什么?

  • JDBC是SUN公司制定的一套接口(interface)
  • 接口都有调用者和实现者
  • 面向接口编程调用,面向接口写实现类,这些都属于面向接口编程
角色分类

服务器 (db):

  • 接收 sql
  • 执行 sql
  • 返回结果

客户端 (java):

  • 接收数据
  • 组装sql
  • 发送SQL(与数据库建立联系)
  • 分析结果
面向接口编程

为什么要面向接口编程?

  • 解耦合:降低程序的耦合度,提高程序的扩展力

java 制定标准 ,不同的数据库厂商实现 接口即可。java 中提供的接口 java.sql.* 包下,常用接口如下:

接口名称作用
java.sql.Connection连接
java.sql.Statement静态处理块
java.sql.PreparedStatement预处理块
java.sql.ResultSet结果集
java.sql.ResultSetMetaData结果集元信息

oracle 厂商实现接口 (jar)

D:\oracleexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar 视安装路径而定

处理块

静态处理块 Statement

Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连 接的基础上,向数据库发送要执行的 SQL 语句。Statement 对象,用于执行不带参数 的简单 SQL 语句。

执行静态 SQL 语句并返回它所生成结果的对象。

**特点:**处理 不变的静态的 sql 语句

优点: 直接查看sql ,方便处理错误

缺点:性能不高 拼接 sql 麻烦 可能存在 sql 注入

预处理块 PreparedStatement

PreparedStatement 接口继承了 Statement,并与之在两方面有所不同:有人

主张,在 JDBC 应用中,如果你已经是稍有水平开发者,你就应该始终以

PreparedStatement 代替 Statement.

也就是说,在任何时候都不要使用 Statement。

由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement

对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。

特点** :处理 不变的静态的 sql 语句 |可变的 sql 语句 带 ? 的 sql

优点:性能高,方便编写sql 不存在sql注入 安全

缺点:不能直接打印sql语句 不方便处理错误

JDBC实现步骤

前提: 先去Oracle数据库安装路径下,获取到ojdbc6.jar 拿到项目中,新建一个资源文件夹,objc6.java放进去,点击右键build path->add to build path

  • 1.加载驱动
    • 硬编码: new oracle.jdbc.driver.OracleDriver();
    • 软编码: class.forName(“oracle.jdbc.driver.OracleDriver”) 通过反射加载驱动,不用创建对象,在配置文件中设置属性,代码更加灵活 —>推荐使用
  • 2.获取连接
  • 3.准备sql
  • 4.获取处理块 (打包发送)
  • 5.执行完毕得到结果,接收结果集
  • 6.处理数据
  • 7.关闭
package com.shsxt.jdbc01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCSimpleDemo01 {
	 public static void main(String[] args) throws ClassNotFoundException, SQLException {
		 //1.加载驱动(选择哪一个数据库)
		 Class.forName("oracle.jdbc.OracleDriver");
		 //2.获取连接(与数据库连接上)
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SCOTT", "TIGER");
		 //3.准备sql 
		 String sql="select empno,ename from emp";  //注意:sql语句后面不要添加分号;
		 //4.获取处理块 (打包发送)
		 Statement state=conn.createStatement();
		 //5.执行完毕得到结果,接收结果集
		 ResultSet result=state.executeQuery(sql);
		 //6.处理数据
		 while(result.next()){
			 int i=result.getInt(1);
			 String name=result.getString("ename");
			 System.out.println(i+"-->"+name);
		 }
		 //7.关闭
		 result.close();
		 state.close();
		 conn.close();
	}
}
/*
	连接到数据库后查询到的结果:
                            7369-->SMITH
                            7499-->ALLEN
                            7521-->WARD
                            7566-->JONES
                            7654-->MARTIN
                            7698-->BLAKE
                            7782-->CLARK
                            7839-->KING
                            7844-->TURNER
                            7900-->JAMES
                            7902-->FORD
                            7934-->MILLER

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值