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+"\t"+ename+"\t"+job+"\t"+mgr+"\t"+hiredate+"\t"+sal+"\t"+comm+"\t"+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+"\t"+ename+"\t"+job+"\t");
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

转载于:https://www.cnblogs.com/cao-yin/p/9768632.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值