博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JDBC】day01_Java连接Oracle数据库过程及常用方法
阅读量:4305 次
发布时间:2019-05-27

本文共 5816 字,大约阅读时间需要 19 分钟。

【JDBC】day01_Java连接Oracle数据库过程及常用方法

1.JAVA连接数据库标准流程:

package day01;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * JDBC java数据库连接 * JDBC是java连接数据库的解决方案,其提供了一套用于连接数据库 * 的通用接口.不同的数据库提供商负责编写实现类来满足java连接该 * 数据库.数据库提供商会将这一组实现类打包成一个JAR包,我们也称 * 这个JAR包为该数据库的驱动包. * JDBC每个接口都定义了相关的抽象方法,无论连接哪个数据库,过程 * 都是一样的,并且我们只需要面向JDBC提供的几口即可.无需了解不同 * 数据库驱动包中的实现类. * * 连接数据库标准流程: * 1:注册驱动Class.forName() * 2:加载驱动建立数据库连接DriverManager * 3:通过连接创建执行SQL语句的对象Connection * 4:使用语句对象执行SQL Statement * 5:若是查询语句,则可以获取结果集 ResultSet * 6:使用完毕后关闭连接释放资源 */public class JDBCDemo1 {	public static void main(String[] args) {		/*		 * java.sql.Connection 是一个接口,表示与特定数据库		 * 的连接,不同的数据库驱动包中有该接口的实现类.		 */		Connection conn = null;		try{			/*			 *1 --注册驱动			 *将数据库厂商提供的jar包中JDBC要求的驱动类导入			 *环境中以便JVM可以执行它.			 *由于不同厂商的jar包中的目录结构和实现类的名字			 *不同,这里的字符串内容不一样.			 *			 *执行这句话时,可能出现:ClassNotFoundException			 *常见的两种情况:			 *1:字符串内容拼写有误			 *2:驱动jar包没有导入环境变量中(build path)			 */			Class.forName("oracle.jdbc.driver.OracleDriver");						/*			 * 2 --建立连接			 * 通过DriverManager加载驱动并与数据库建立连接,			 * 不同的数据库连接地址格式不一样.			 * 			 * 调用静态方法getConnection时需要传入3个参数:			 * 1:数据库URL jdbc:oracle:thin:@host:port:sid			 * 2:数据库用户名			 * 3:数据库密码			 */			conn = DriverManager.getConnection(					"jdbc:oracle:thin:@192.168.201.203:1521:orcl",					"openlab",					"open123"					);			System.out.println("数据库已连接!");						/*			 * 3 --Statement实例			 * 创建用于执行SQL语句的Statement实例			 * 同样的,Statement也是接口,驱动包中会有对应的实现类.			 * 不过我们不需要关心,只当它是Statement用即可			 */			Statement state = conn.createStatement();						/*			 * 执行SQL语句			 * Statement针对不同的SQL语句提供了不同的方法,常见方法:			 * --boolean execute(String sql)			 * 什么语句都可以执行,但DML,DQL由不同的方法执行,所以			 * 该方法普遍用来执行DDL.			 * 			 * --int executeUpdate(String sql)			 * 执行DML语句,返回值为影响数据库多少条数据.			 * 			 * --ResultSet executeQuery(String sql)			 * 执行DQL语句,返回值为查询的结果集.			 */			String sql = "SELECT empno,ename,job,sal,deptno FROM emp";						//执行查询语句使用executeQuery方法			ResultSet rs = state.executeQuery(sql);						/*			 * 结果集遍历方式:			 * 结果集默认指向第一条记录之上.			 * ResultSet遍历结果集常用方法:			 * 1:boolean next()			 * 	  该方法的作用是让结果集表示下一条记录,若结果集有			 *    下一条记录,则返回true,并表示该条记录,否则返回false.			 * 2:XXX getXXX(String colName)			 *    根据字段名返回当前记录中该字段的值,不同的字段类型要			 *    调用不同类型的方法,比如获取varchar类型要调用:			 *    String getString(String colName) 			 */			while(rs.next()){				int empno = rs.getInt("empno");				String ename = rs.getString("ename");				String job = rs.getString("job");				int sal = rs.getInt("sal");				int deptno = rs.getInt("deptno");				System.out.println(empno+","+ename+","+job+","+sal+","+deptno);			}					}catch(Exception e){			e.printStackTrace();		}finally{			if(conn!=null){				try{					conn.close();				}catch(SQLException e){					e.printStackTrace();				}			}		}	}}

2.常用方法:

1)boolean execute(String sql)

通常使用它来执行DDL语句,返回值若为true,说明执行该SQL后有结果集,由于用它执行DDL,所以返回值为false.

若SQL语句执行有误会抛异常!

package day01;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/** * 创建一张表 userinfo * 字段: * id NUMBER(6) 主键 * username VARCHAR2(30) 用户名 * password VARCHAR2(30) 密码 * email VARCHAR2(50) 邮箱 * account NUMBER(8) 余额 * */public class JDBCDemo4 {	public static void main(String[] args) {		Connection conn = null;		try{						Class.forName("oracle.jdbc.driver.OracleDriver");			conn = DriverManager.getConnection(					"jdbc:oracle:thin:@192.168.201.203:1521:orcl",					"openlab","open123");			Statement state = conn.createStatement();						String sql = "CREATE TABLE userinfo_qxl( " +							"id NUMBER(6), " +							"username VARCHAR2(30), " +							"password VARCHAR2(30), " +							"email VARCHAR2(50), " +							"account NUMBER(8) " +							")";			System.out.println(sql);						/*			 * boolean execute(String sql)			 * 通常使用它来执行DDL语句,返回值若为true,说明执行该SQL			 * 后有结果集,由于用它执行DDL,所以返回值为false.			 * 若SQL语句执行有误会抛异常!			 */			state.execute(sql);			System.out.println("表创建成功!");					}catch(Exception e){			e.printStackTrace();		}finally{			if(conn!=null){				try {					conn.close();				} catch (SQLException e) {					e.printStackTrace();				}			}		}	}}
2)int executeUpdate(String sql)

执行DML语句使用:int executeUpdate(String sql)

返回值为执行完毕后,影响了数据库多少条数据.
JDBC默认自动提交事务的,意思就是,每当我们执行一条DML 操作,就会自动commit!

3)void setAutoCommit(boolean auto)

JDBC默认是自动提交事务,在转账业务中,我们会进行两条UPDATE语句,只有两个更改都成立才应该认为转账成功,否则失败!

这时候需要自行控制事务Connection提供了一个方法:void setAutoCommit(boolean auto)
当参数传入false时,就关闭了自动提交事务.

package day01;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/** * 实现转账操作 * */public class JDBCDemo7 {	public static void main(String[] args) {		Connection conn = null;		try{						Class.forName("oracle.jdbc.driver.OracleDriver");			conn = DriverManager.getConnection(					"jdbc:oracle:thin:@192.168.201.203:1521:orcl",					"openlab","open123");						/*			 * JDBC默认是自动提交事务,在转账业务中,我们会进行两条UPDATE			 * 语句,只有两个更改都成立才应该认为转账成功,否则失败!			 * 这时候需要自行控制事务			 * Connection提供了一个方法:			 * void setAutoCommit(boolean auto)			 * 当参数传入法律色时,就关闭了自动提交事务.			 */			conn.setAutoCommit(false);						Statement state = conn.createStatement();									/*			 * ROSE转给JACK10000			 */			String sql1 = "UPDATE userinfo_qxl " +							"SET account=account-10000 " +							"WHERE username='ROSE'";			int n = state.executeUpdate(sql1);			if(n==0){				System.out.println("转出方查无此人!");				return ;			}						String sql2 = "UPDATE userinfo_qxl " +							"SET account=account+10000 " +							"WHERE username='jack'";			n = state.executeUpdate(sql2);			if(n==0){				System.out.println("转入方查无此人!");				//回滚事务				conn.rollback();			}else{				System.out.println("OVER");				conn.commit();			}										}catch(Exception e){			e.printStackTrace();		}finally{			if(conn!=null){				try {					conn.close();				} catch (SQLException e) {					e.printStackTrace();				}			}		}	}}

转载地址:http://sgews.baihongyu.com/

你可能感兴趣的文章
Hive语句是如何转化成MapReduce任务的
查看>>
Hive创建table报错:Permission denied: user=lenovo, access=WRITE, inode="":suh:supergroup:rwxr-xr-x
查看>>
Hive执行job时return code 2排查
查看>>
hive常用函数及数据结构介绍
查看>>
Hive面试题干货(亲自跟着做了好几遍,会了的话对面试大有好处)
查看>>
力扣题解-230. 二叉搜索树中第K小的元素(递归方法,中序遍历解决)
查看>>
力扣题解-123. 买卖股票的最佳时机 III(动态规划)
查看>>
Django 源码阅读:服务启动(wsgi)
查看>>
Django 源码阅读:url解析
查看>>
Docker面试题(一)
查看>>
第一轮面试题
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>
一、redis面试题及答案
查看>>
消息队列2
查看>>
C++ 线程同步之临界区CRITICAL_SECTION
查看>>
测试—自定义消息处理
查看>>
MFC中关于虚函数的一些问题
查看>>
根据图层名获取图层和图层序号
查看>>
规范性附录 属性值代码
查看>>