JDBC与Java数据库编程基础
一、JDBC 概述
1、什么是JDBC
称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用同一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。
2、JDBC优缺点
优点:
JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。
JDBC支持不同的关系数据库,这使得程序的可移植性大大加强。
JDBC API是面向对象的,可以让用户把常用的方法封装为—个类,以备后用
缺点:
使用JDBC,访问数据记录的速度会受到一定程度的影响。
JDBC结构中包含不同厂家的产品,这就给更改数据源带来了很大的麻烦。
3、JDBC核心接口与类
JDBC核心类库包含在java.sql包中。
类
DriverManager:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并注册后才可以使用,同时提供方法来建立与数据库的连接。
SQLException-有关数据库操作的异常
接口:
Connection:特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。
PreparedStatement:表示预编译的 SQL 语句的对象。
Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
ResultSet :表示数据库结果集的数据表,通常通过执行查询数据库的语句生成 。
CallableStatement :用于执行 SQL 存储过程的接口。
二、创建 JDBC应用
1、创建JDBC应用程序的步骤
1.载入JDBC驱动程序
2.定义连接URL
3.建立连接
4.创建Statement对象
5.执行查询或更新
6.结果处理
7.关闭连接
2、JDBC连接Mysql
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Test5 { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/scott"; String username = "root"; String password = "root"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //1、加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2、获得连接 conn = DriverManager.getConnection(url, username, password); //3、创建sql语句 String sql = "select * from dept where loc = ?"; //4、创建PreparedStatement pstmt = conn.prepareStatement(sql); //第一个参数指索引,第二个参数要作为查询语句的一部分 pstmt.setString(1, "New YORK"); //5、执行查询 rs = pstmt.executeQuery(); //6、遍历结果集 while(rs.next()){ System.out.println(rs.getString("dname")); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //7、关闭流 if(rs != null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(pstmt != null){ try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
3、JDBC连接Oracle
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import java.util.Date; public class JdbcTest{ publicstatic void main(String[] args) { String driver = "oracle.jdbc.OracleDriver"; //驱动标识符 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; //链接字符串 // url ="jdbc:oracle:thin:@10.0.30.64:1521:orcl"; // 连接远程的数据库可以这么写 String user = "scott"; //数据库的用户名 String password = "tiger"; //数据库的密码 Connection con = null; PreparedStatement pstm = null; ResultSet rs = null; boolean flag = false; try { Class.forName(driver); con = DriverManager.getConnection(url,user, password); String sql = "select * from emp"; pstm =con.prepareStatement(sql); rs = pstm.executeQuery(); while(rs.next()) { int empno = rs.getInt("empno"); String ename =rs.getString("ename"); double sal = rs.getDouble("sal"); Date hiredate =rs.getDate("hiredate"); int deptno = rs.getInt(("deptno")); System.out.println(empno +"\t"+ ename +"\t"+ sal +"\t"+ hiredate +"\t"+ deptno); } flag = true; } catch(ClassNotFoundException e) { e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } finally { if(rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } // 关闭执行通道 if(pstm !=null) { try { pstm.close(); } catch (SQLException e) { e.printStackTrace(); } } // 关闭连接通道 try { if(con != null &&(!con.isClosed())) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } catch (SQLException e) { e.printStackTrace(); } } if(flag) { System.out.println("执行成功!"); } else { System.out.println("执行失败!"); } } }
4、ResultSet接口的getXxx 方法
5、JDBC日期时间处理
对于数据库种不同的时间类型,要分别采用与之相对应的Java
(1)包装类来存取:
日期类型用java.sql.Date
时间类型用java.sql.Time
日期/时间类型用java.sql.Timestamp;
getTimestamp()可以把年月日时分秒都取出来,getDate()只能取出年月日,getTime()只能取出时分秒。
(2)JDBC的日期/时间类型转换为字符串
Timestamp timeStamp = //通过数据库访问获取到该数据
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(timeStamp);
(3)java.sql.Timestamp如何转换为java.util.Date
java.sql.Timestamp是java.util.Date的子类,不需要做任何转换直接赋值即可:
java.sql.Timestamp ts;
java.util.Date utilDate;
utilDate = ts;
java.util.Date如何转换为java.sql.Timestamp
java.util.Date是java.sql.Timestamp的父类,要这样转换:
java.sql.Timestamp ts;
java.util.Date utilDate;
ts.setTime(utilDate.getTime());
6、JDBC API:
DriverManager
Connection
Statement
ResultSet
SQLException