一、JDBC释义
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。
二、JDBC连接Oracle数据库的流程及原理
1)在开发环境中加载指定数据库的驱动程序。
本例使用的开发环境是Eclipse(Luna),数据库是Oracle,Oracle支持JDBC的驱动在下载时已经自带,在本地的安装位置\product\11.2.0\dbhome_1\jdbc\lib中,文件名为ojdbc14.jar。
2)在Java程序中加载驱动程序。
使用Class.forName("指定数据库的驱动程序")方法加载上述步骤添加的驱动程序。
示例: Class.forName("oracle.jdbc.driver.OracleDriver");
3)创建数据连接对象。
通过DriverManager类创建数据库连接对象connection。DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,通过它的getConnection()方法,根据数据库的URL、用户名和密码,创建一个JDBC Connection对象。
示例: Connection connection = DriverManager.getConnection("URL","用户名","密码");
其中 URL = 协议名 + IP地址(域名) + 端口 + 数据库名称;
如: URL = jdbc:oracle:thin:@localhost:1521:orcl;
4)创建Statement对象。
Statement类用于执行静态SQL语句并返回它所生成的结果。通过Connection接口中的createStatement()方法可以创建一个Statement对象。
示例: Statement statement = connection.createStatement();
5)调用Statement对象方法执行SQL语句。
execuUpdate()方法用于数据更新,包括插入、删除等操作。
示例: statement.execuUpdate("INSERT INTO table(column1(,column2,...))" + "VALUES(‘x‘(,‘y‘,z,...))");
通过调用Statement对象的executeQuery()方法查询数据,查询结果会返回到ResultSet对象,ResultSet对象是执行查询数据库后返回的数据的集合,它具有可以指向当前数据行的指针,通过ResultSet对象的next()方法使得指针指向下一行,然后将数据以列号或者字段名取出。如果next()方法返回null,则表明下一行中没有数据存在。
示例: ResultSet resultset = statement.executeQuery("SELECT * FROM table (WHERE)(ORDER BY)");
6)关闭数据库连接。
使用完数据库或者不需要访问数据库时,通过Connection的close()方法及时关闭数据连接。
三、JDBC应用示例
1)在Eclipse中创建一个新Java项目,创建好包和类。
2)在项目上右键Properties,左栏选择Java Build Path,右栏上侧选择Libraries,然后点击Add External JARS...选择Oracle安装路径\product\11.2.0\dbhome_1\jdbc\lib中的ojdbc14.jar加载。
3)连接数据库的程序示例如下:
package zapp; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.ResultSetMetaData; public class App { //定义成员变量 private String user; private String password; private String url; private static Connection conn; private ResultSet rs; private Statement sm; /** * 构造函数获得数据库用户名和密码 * @param user * @param password */ public App(String user , String password){ this.user = user; this.password = password; /*url="[连接方式jdbc]:[连接到oracle]:[采用瘦模式(无需oracle客户端)]: [连接本机:端口1521:数据库名为orcl]"*/ this.url = "jdbc:oracle:thin:@localhost:1521:orcl"; } /** * 创建连接数据库方法 * @return */ public Connection createConnection(){ try{ //初始化驱动包 Class.forName("oracle.jdbc.driver.OracleDriver"); //根据数据库连接字符、用户名和密码给conn赋值 conn = DriverManager.getConnection(url,user,password); }catch (Exception e) { e.printStackTrace(); } //测试是否成功连接oracle数据库 if (conn == null){ System.out.println("与Oracle数据库连接失败!"); }else{ System.out.println("Oracle数据库已连接!"); } return conn; } /** * 关闭数据库 * @param conn */ public void closeConnection(Connection conn){ try{ if (conn != null){ conn.close(); System.out.println("数据库已关闭!\n"); } }catch(Exception e){ System.out.println("数据库关闭失败!"); e.printStackTrace(); } } /** * 插入数据 * @param insert * @return */ public int insert(String insert){ int re = 0; try{ conn.setAutoCommit(false); sm = conn.createStatement(); re = sm.executeUpdate(insert); if (re < 0){ //插入失败 conn.rollback(); sm.close(); return re; } else { System.out.println("数据成功写入!"); } }catch (Exception e){ e.printStackTrace(); } return 0; } /** * 删除数据 * @param delete */ public int delete(String delete){ int re = 0; try{ sm = conn.createStatement(); re = sm.executeUpdate(delete); if (re < 0){ conn.rollback(); sm.close(); closeConnection(conn); return re; } else { System.out.println("数据成功删除!"); } }catch (Exception e){ e.printStackTrace(); } return 0; } /** * 查询语句 * 返回结果集 * @param select * @return */ public ResultSet selectSql(String select){ try{ sm = conn.createStatement(); rs = sm.executeQuery(select); return rs; }catch (Exception e){ e.printStackTrace(); } return null; } /** * 根据结果集输出 * @param rs */ public void printRs(ResultSet rs){ int columnsCount = 0; boolean f = false; try{ if (!rs.next()){ return; } ResultSetMetaData rsmd = rs.getMetaData(); columnsCount = rsmd.getColumnCount(); //根据集的列数 System.out.println("数据库查询结果如下:"); for (int i = 0 ; i < columnsCount ; i++ ){ System.out.print(rsmd.getColumnLabel(i+1)+" "); //输出列名 } System.out.println(); while (!f){ for (int i = 0; i < columnsCount ; i++ ){ System.out.print(rs.getString(i+1)+" "); } System.out.println(); if (!rs.next()){ f = true; } } rs.close(); }catch (Exception e){ e.printStackTrace(); } } /*主方法*/ public static void main(String[] args){ //实例化对象aJDBC,传递用户名和密码 App JDBC = new App("用户名","密码"); conn = JDBC.createConnection(); //向salary(已存在)表中插入数据 String insert = "INSERT INTO salary(empid,empname,empsalary,hiredate,job) " + "VALUES(5,‘Jack‘,2300.64,to_Date(‘19920523‘,‘YYYYMMDD‘),‘teacher‘)"; String delete = "DELETE FROM salary WHERE empid=5"; String select = "SELECT * FROM salary"; //查询新增数据后的表 JDBC.insert(insert); JDBC.printRs(JDBC.selectSql(select)); //查询删除数据后的表 JDBC.delete(delete); JDBC.printRs(JDBC.selectSql(select)); JDBC.closeConnection(conn); } }