本文共 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/