zoukankan      html  css  js  c++  java
  • JDBC概述及JDBC完成对Oracle的增删改查

    什么是JDBC
     JDBC(Java Data Base Connectivity,Java数据库连接),是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问。它由一组用Java语言编写的类和接口组成。

    JDBC API
     提供者:Sun公司
     内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如
    DriverManager类 作用:管理各种不同的JDBC驱动
    - Connection接口
    - Statement接口
    - ResultSet接口
    JDBC驱动
    提供者:数据库厂商
    作用:负责连接各种不同的数据库
    JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。

    三方关系
    SUN公司是规范制定者,制定了规范JDBC(连接数据库规范)
    数据库厂商微软、甲骨文等分别提供实现JDBC接口的驱动jar包
    程序员学习JDBC规范来应用这些jar包里的类。

    JDBC连接数据库最简单的方式
    一:拿到jar包,【这里是用Oracle进行了连接测试】
    jar包位置:Oracle的安装的路径下去找或者直接百度对应的版本jar包即可。

    二:导入jar包到Java项目里

    导入jar包截图步骤:

    三、写代码:【6步骤】
    // 1.加载一个driver驱动
    Class.forName("oracle.jdbc.OracleDriver");

    // 2.创建数据库连接(Connection)
    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger");
    // 3.创建SQL命令发送器Statement--由连接connection来创建sql命令发送器
    Statement statement = connection.createStatement();
    // 4.通过Statement发送SQL命令并得到结果(测试添加数据)
    String sql = "insert into emp values(1007,'zhangsan','student',7788,'09-10月-2018',5000,3000,10)";
    // 5.处理结果--返回int 底层直接实现了commit
    int commit =statement.executeUpdate(sql);
    //6.关闭数据库资源--先开的资源后关
    statement.close();
    connection.close();
    详细代码:

     1 package boom;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.SQLException;
     6 import java.sql.Statement;
     7 
     8 /**Oracle连接JDBC
     9  * 1.导入jar包
    10  * 2.写jdbc
    11  * @author Administrator
    12  *
    13  */
    14 public class JDBC_test01 {
    15     
    16     public static void main(String[] args) throws ClassNotFoundException, SQLException {
    17         // 1.加载一个driver驱动
    18         Class.forName("oracle.jdbc.OracleDriver");
    19         // 2.创建数据库连接(Connection)
    20         Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger");
    21         // 3.创建SQL命令发送器Statement--由连接connection来创建sql命令发送器
    22         Statement statement = connection.createStatement();
    23         // 4.通过Statement发送SQL命令并得到结果(测试添加数据)
    24         String sql = "insert into emp values(1007,'zhangsan','student',7788,'09-10月-2018',5000,3000,10)";
    25         // 5.处理结果--返回int 底层直接实现了commit
    26         int commit =statement.executeUpdate(sql);
    27         // 判断
    28         if(commit>0){
    29             System.out.println("JDBC_test01.main(测试添加数据成功)");
    30         }else{
    31             System.out.println("JDBC_test01.main(测试添加数据失败)");
    32         }
    33         // 6.关闭数据库资源--先开的资源后关
    34         statement.close();
    35         connection.close();
    36     }
    37 
    38 }
    View Code

    测试结果:

    小结:
    JDBC访问数据库步骤
    1:加载一个Driver驱动
    2:创建数据库连接(Connection)
    3:创建SQL命令发送器Statement
    4:通过Statement发送SQL命令并得到结果
    5:处理结果(select语句)
    6:关闭数据库资源
    JDBC语法小结:
    1.加载驱动
    加载JDBC驱动是通过调用方法java.lang.Class.forName(),下面列出常用的几种数据库驱动程序加载语句的形式 : 
    Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驱动程序 
    Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱动程序 
    Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驱动程序 
    Class.forName("com.mysql.JDBC.Driver");//使用MySql的JDBC驱动程序
    2.创建数据库连接
    与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法
    String url="jdbc:oracle:thin:@localhost:1521:XE";
    String user=“scott";
    String password=“tiger";
    3.创建Statement并发送命令
    Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句
    有三种 Statement对象:
     Statement:用于执行不带参数的简单SQL语句;
     PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;
     CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。

    完善JDBC代码,达到规范的写法,实现增删改查操作:【遵循六大步骤】
    1:驱动名,URL,用户名,密码提取到代码的前面
    2:处理抓取异常信息
    3:实现JDBC对数据库的增删改操作
    获取当前日期封装成了util类:

    public class MyUtil {
    	/**
    	 * 获取当前的系统日期,字符串类型
    	 * @return newdatestr
    	 */
    	public static String GetSysTime(){
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    				String newdatestr = sdf.format(new Date());
    				return newdatestr;
    	}
    }
    

    详细代码:

     1 package boom;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.SQLException;
     6 import java.sql.Statement;
     7 
     8 import boom.util.MyUtil;
     9 import oracle.net.aso.s;
    10 
    11 /**Oracle连接JDBC
    12  * 提取:驱动名,URL,用户名,密码
    13  * 处理异常信息
    14  * 实现建增删改
    15  * @author Administrator
    16  *
    17  */
    18 public class JDBC_test02 {
    19     
    20     public static void main(String[] args){
    21         // 声明参数
    22         String driver="oracle.jdbc.driver.OracleDriver";
    23         String url = "jdbc:oracle:thin:@localhost:1521:XE";
    24         String userName="scott";
    25         String userPwd="tiger";
    26         
    27         // 声明连接,初始化为空
    28         Connection connection = null;
    29         Statement statement = null;
    30         
    31         try {
    32             // 1.加载驱动
    33             Class.forName(driver);
    34             // 2.创建连接
    35             connection = DriverManager.getConnection(url, userName, userPwd);
    36             // 3.创建SQL命令发送器
    37             statement = connection.createStatement();
    38             // 4.发送SQL获取结果
    39             // 添加
    40             String add = "insert into emp values(9999,'李四','MANAGER',7788,to_date('"+MyUtil.GetSysTime()+"','yyyy-mm-dd'),9000,1000,10)";
    41             // 删除
    42             String delete = "delete from emp where empno=9999"; 
    43             // 修改
    44             String update = "update emp set sal=sal+8000,comm=comm+520 where empno=9999"; 
    45             
    46             // 相当于事务的提交更新commit
    47             int commit = statement.executeUpdate(delete);
    48             // 5.处理结果
    49             if(commit>0){
    50                 System.out.println("JDBC_test02.main(测试数据成功)");
    51             }else{
    52                 System.out.println("JDBC_test02.main(测试数据失败)");
    53             }
    54         } catch (ClassNotFoundException e) {
    55             // TODO Auto-generated catch block
    56             e.printStackTrace();
    57         } catch (SQLException e) {
    58             // TODO Auto-generated catch block
    59             e.printStackTrace();
    60         }finally{
    61             // 6.关闭资源 【先开后关】
    62             try {
    63                 if(statement !=null){                    
    64                     statement.close();
    65                 }
    66             } catch (SQLException e) {
    67                 // TODO Auto-generated catch block
    68                 e.printStackTrace();
    69             }
    70             try {
    71                 if(connection !=null){                    
    72                     connection.close();
    73                 }
    74             } catch (SQLException e) {
    75                 // TODO Auto-generated catch block
    76                 e.printStackTrace();
    77             }
    78         }
    79     }
    80 
    81 }
    View Code

    JDBC对Oracle进行查询操作

     1 package boom;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 import java.sql.Statement;
     8 import java.util.Date;
     9 
    10 import boom.util.MyUtil;
    11 import oracle.net.aso.s;
    12 
    13 /**
    14  * 查询
    15  * @author Administrator
    16  *
    17  */
    18 public class JDBC_test03 {
    19     
    20     public static void main(String[] args){
    21         // 声明参数
    22         String driver="oracle.jdbc.driver.OracleDriver";
    23         String url = "jdbc:oracle:thin:@localhost:1521:XE";
    24         String userName="scott";
    25         String userPwd="tiger";
    26         
    27         // 声明连接,初始化为空
    28         Connection connection = null;
    29         Statement statement = null;
    30         ResultSet result = null;
    31         
    32         try {
    33             // 1.加载驱动
    34             Class.forName(driver);
    35             // 2.创建连接
    36             connection = DriverManager.getConnection(url, userName, userPwd);
    37             // 3.创建SQL命令发送器
    38             statement = connection.createStatement();
    39             // 4.发送SQL获取结果
    40             // 查询
    41             String select = "select * from emp where comm is not null order by sal desc";
    42             result = statement.executeQuery(select);
    43             // 5.处理结果-遍历结果集需要用到while
    44             while(result.next()){
    45                 // 遍历循环表字段
    46                 int empno = result.getInt("EMPNO");
    47                 String ename = result.getString("ENAME");
    48                 String job = result.getString("JOB");
    49                 int mgr = result.getInt("MGR");
    50                 Date hiredate = result.getDate("HIREDATE");
    51                 double sal = result.getDouble("SAL");
    52                 double comm = result.getDouble("COMM");
    53                 int deptno = result.getInt("DEPTNO");
    54                 //输出
    55                 System.out.println(empno+"	"+ename+"	"+job+"	"+mgr+"	"+hiredate+"	"+sal+"	"+comm+"	"+deptno);
    56             }
    57         } catch (ClassNotFoundException e) {
    58             // TODO Auto-generated catch block
    59             e.printStackTrace();
    60         } catch (SQLException e) {
    61             // TODO Auto-generated catch block
    62             e.printStackTrace();
    63         }finally{
    64             // 6.关闭资源 【先开后关】
    65             try {
    66                 if(result!=null){
    67                     result.close();
    68                 }
    69             } catch (SQLException e) {
    70                 // TODO Auto-generated catch block
    71                 e.printStackTrace();
    72             }
    73             try {
    74                 if(statement !=null){                    
    75                     statement.close();
    76                 }
    77             } catch (SQLException e) {
    78                 // TODO Auto-generated catch block
    79                 e.printStackTrace();
    80             }
    81             try {
    82                 if(connection !=null){                    
    83                     connection.close();
    84                 }
    85             } catch (SQLException e) {
    86                 // TODO Auto-generated catch block
    87                 e.printStackTrace();
    88             }
    89         }
    90     }
    91 
    92 }
    View Code

    效果图为查询有奖金的员工所有信息

    逆序查询:
    关闭结果集正序遍历并设置只读
     statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 

    // 把结果集的指针移到最后
    result.afterLast();
    // 遍历结果集向上遍历
    result.previous()
    详细代码:

     1 package boom;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 import java.sql.Statement;
     8 import java.text.SimpleDateFormat;
     9 import java.util.Date;
    10 /**
    11  * 
    12  * @author 查询--逆向遍历
    13  *
    14  */
    15 public class JDBC_test04 {
    16     public static void main(String[] args) {
    17         // 声明参数
    18         String driver = "oracle.jdbc.driver.OracleDriver";
    19         String url = "jdbc:oracle:thin:@localhost:1521:XE";
    20         String username = "scott";
    21         String userpwd = "tiger";
    22 
    23         // 声明连接
    24         Connection connection = null;
    25         Statement statement = null;
    26         ResultSet result = null;
    27         try {
    28             // 1:加载驱动
    29             Class.forName(driver);
    30             // 2:创建连接
    31             connection = DriverManager.getConnection(url, username, userpwd);
    32             // 3:创建sql命令发送器
    33             statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    34             // 4:发送sql获取结果
    35             // 查询
    36             String select = "select empno,ename,job from emp where sal>=2000 order by ename";
    37             result = statement.executeQuery(select);
    38             // 把结果集的指针移到最后
    39             result.afterLast();
    40 
    41             // 5:处理结果-遍历结果集需要用到while
    42             // 遍历结果集向上遍历
    43             while(result.previous()){
    44                 // 遍历循环表字段
    45                 int empno = result.getInt("EMPNO");
    46                 String ename = result.getString("ENAME");
    47                 String job = result.getString("JOB");
    48                 //输出
    49                 System.out.println(empno+"	"+ename+"	"+job+"	");
    50             }
    51         } catch (ClassNotFoundException e) {
    52             // TODO Auto-generated catch block
    53             e.printStackTrace();
    54         } catch (SQLException e) {
    55             // TODO Auto-generated catch block
    56             e.printStackTrace();
    57         } finally {
    58             // 关闭资源--先开后关
    59             try {
    60                 if (result != null) {
    61                     result.close();
    62                 }
    63             } catch (SQLException e) {
    64                 // TODO Auto-generated catch block
    65                 e.printStackTrace();
    66             }
    67 
    68             try {
    69                 if (statement != null) {
    70                     statement.close();
    71                 }
    72             } catch (SQLException e) {
    73                 // TODO Auto-generated catch block
    74                 e.printStackTrace();
    75             }
    76 
    77             try {
    78                 if (connection != null) {
    79                     connection.close();
    80                 }
    81             } catch (SQLException e) {
    82                 // TODO Auto-generated catch block
    83                 e.printStackTrace();
    84             }
    85 
    86         }
    87 
    88     }
    89 }
    View Code

    效果图是按姓名逆序输出

    Oracle里是升序:select empno,ename,job from emp where sal>=2000 order by ename

  • 相关阅读:
    Ubuntu安装mysql
    Java源码分析:关于 HashMap 1.8 的重大更新(转载)
    idea 设置光标回到上一次位置的快捷键
    2016年总结及2017年计划
    Mac搭建Hadoop源码阅读环境
    Spark sql 在yarn-cluster模式下找不到表
    SecureCRT 无法删除字符
    Flume整合Spark Streaming
    Hbase资料汇总
    maven使用阿里云仓库
  • 原文地址:https://www.cnblogs.com/cao-yin/p/9768632.html
Copyright © 2011-2022 走看看