JDBC
JDBC(Java DataBase Connection) java 访问的数据的技术,也称驱动。
一、JDBC的发展
1.发展
··JAVA-》 ODBC-》DB 桥连
JAVA-》 本地clientAPI-》DB 本地clientAPI 调用
JAVA-》DB 直连
JAVA-》server配置DB信息-》DB 连接池
2.JDBC包含的内容
两部分内容:
1) 接口部分:sun公司提供,在JDK的java.sql.* 和javax.sql.* 包中;
2)实现部分:数据库厂家提供,去官网下载
Ojdbc5.jar----JDK6.0
Ojdbc6.jar----JDK7.0+
3.Ojdbc.jar的使用
1)DOS编译:修改环境变量 CLASSPATH 为.;路径
2)IDE编译:jar包导入到JavaProject中
步骤1.在项目目录创建lib文件夹
步骤2.复制ojdbc.jar到lib目录
步骤3.右键ojdbc.jar->Build Path ->Add To Build Path
二、JDBC使用步骤【重点】
1个准备,6个步骤
1个准备:(导ojdbc.jar)
6个步骤:
// 1 注册驱动类
Class.forName("oracle.jdbc.OracleDriver");
// 2 创建连接
//url-连接数据库地址(协议 dbserver-IP port SID-数据库唯一标示)
//jdbc:oracle:thin:@localhost:1521:xe
String url="jdbc:oracle:thin:@localhost:1521:xe";
Connectioncon=DriverManager.getConnection("url","hr","hr");
// 3 创建Statement
Statement stm = con.createStatement();
// 4 执行SQL语句
//DML语句 — — int row = executeUpdate(sql)
// 返回int类型,代表影响的行数
String sql ="insert ";
int row = stm.executeUpdate(sql); // 向DBserver请求
System.out.println("添加了"+ row + "行数据!");
//DQL: ResultSet rs =stm.executeUpdate(sql)
// 返回Resultest类型,代表查询到的结果(虚表)
String sql ="select from accounts";
ResultSet rs = stm.executeUpdate(sql);// 向DBserver请求
// 5 处理查询结果--- 只对查询有用
//指针的初始位置在第一行数据的上方
//rs.next():下移一行,返回Boolean,代表是否有数据 返回true有 false无
while(rs.next()){
// 获取字段值
XXXX=rs.getxxx("字段名");
XXXX=rs.getxxx("1);//获取第一个字段值
}
// 6 关闭连接- 后创建的先关闭
if(rs !=null)
rs.close();
if(stm !=null)
stm.close();
if(con !=null)
con.close();
三、常见问题
1.oracle.jdbc.OracleDriver---抛异常 导包
2."jdbc:oracle:thin:@localhost:1521:xe"---localhost xe(监听被拒绝数据库SID) 容易出错
Io 异常
3."select * from accounts" 标识符无效 表或试图不存在 缺少from 关键字
第五步 字段名出错
四、执行带参数的SQL
1.使用statement执行带参SQL
存在的缺点:1)SQL语句拼接时,需要考虑数据类型,是字符串需要加”,麻烦;
2)存在安全隐患(SQL注入问题)。
2.使用preparedstatement 执行带参SQL[重点]
preparedstatement 是 statement的子接口。
使用:
// 1 注册驱动类
// 2 创建连接
// 3 创建preparedstatement
String sql ="insert…..value(seq.nextval,?,?,?)";//占位符
PreparedStatement pstm =con,prepareStatement(sql);
// 4 给?占位符设值,执行SQL语句
Pstm.setXxx(index,值);
Pstm.setString(1,“张三”);
int row =pstm.executeUpdate();//DML
ResultSet rs = Pstm.ewxecuteQuery(); //select 语句
// 5 处理查询结果
// 6 关闭连接
3.Statement 和PreparedStatement 的区别
PreparedStatement 是Statement 的子接口
4.Oracle中 SQL 语句的执行过程
4个步骤 : 1. 权限检查 2. 语法检查 3. SQL语转内部指令 4.执行内部命令
其中1-3 合称 编译。
PreparedStatement 在第一次执行时先编译 后执行;
以后次,直接执行(预编译的Sataement)
五. 日期的处理
数据库中的类型 JAVA中的类型
Number(m) Integer/Long
Number(m,n) Double/Float
Varchar2(m) String
Char(m) String
Date java.sql.Date
1.java.util.Date和java.sql.Date的关系
util.Date 是 sql.Date的父类
父类中的引用 指向 子类对象
Java.util.Date utilDate = res.getDate("字段名");
Java.sql.Date 的使用场景:在和DB 直接打交道时使用 sqlDate
2.添加/修改