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

posted @ 2018-09-14 19:21  MKN  阅读(508)  评论(0编辑  收藏  举报