转自: http://blog.csdn.net/tobetheender/article/details/52772157
Java通过JDBC 进行MySQL数据库操作
一:前言
在测试工作中难免会和数据库打交道,可能大家对数据库语句都比较熟,比如常见的增删改查等,但是当我们在做自动化测试时,比如接口测试,大部分请求参数,可能都是从数据库中取值,并且接口返回值最后都会记录在数据库中,这样前提就需要和数据库建立连接,才能进行读写操作。
二:JDBC是什么
java提供了一个API也就是JDBC(Java Data Base Connectivity),可以为多种关系数据库提供统一访问和操作,它由一组用Java语言编写的类和接口组成。
- 没有jdbc之前
java开发人员需要维护不同的数据库的驱动程序,如果数据库的底层实现改变,驱动程序可能会随之改变!!
- 有了jdbc之后:
java开发人员只需维护java应用和一套规范,也就是jdbc接口。数据库厂商提供具体的java驱动程序,数据库厂商的底层实现改变,厂商随之更新驱动程序,而不影响java应用程序!!
三:实现步骤
-
导入数据包
需要包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用 import java.sql.* 就可以了. -
添加JDBC驱动程序包
添加jar程序驱动包http://www.mysql.com/downloads/connector/j,初始化驱动程序,可以与数据库打开一个通信通道。 -
打开数据库连接
需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接。 -
执行数据库操作
需要使用类型声明的对象建立并提交一个SQL语句到数据库。 -
从结果集中提取数据
要求使用适当的关于ResultSet.getXXX()方法来检索结果集的数据。 -
清理环境
需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。
JDBCUtil类
- 主程序
1 package com.jdbc; 2 3 //导入数据包 4 import java.io.InputStream; 5 import java.sql.Connection; 6 import java.sql.DriverManager; 7 import java.sql.ResultSet; 8 import java.sql.SQLException; 9 import java.sql.Statement; 10 import java.util.Properties; 11 12 /** 13 * @author Charlie.chen 14 * 15 */ 16 17 public class JDBCUtil{ 18 19 // 驱动包名和数据库url 20 private static String url = null; 21 private static String driverClass = null; 22 // 数据库用户名和密码 23 private static String userName = null; 24 private static String password = null; 25 26 /** 27 * 初始化驱动程序 28 * 静态代码块中(只加载一次) 29 */ 30 static{ 31 try { 32 //读取db.properties文件 33 Properties prop = new Properties(); 34 35 /** 36 * 使用类路径的读取方式 37 * / : 斜杠表示classpath的根目录 38 * 在java项目下,classpath的根目录从bin目录开始 39 * 在web项目下,classpath的根目录从WEB-INF/classes目录开始 40 */ 41 InputStream in = JDBCUtil.class.getResourceAsStream("/db.properties"); 42 43 //加载文件 44 prop.load(in); 45 //读取信息 46 url = prop.getProperty("url"); 47 driverClass = prop.getProperty("driverClass"); 48 userName = prop.getProperty("user"); 49 password = prop.getProperty("password"); 50 51 //注册驱动程序 52 Class.forName(driverClass); 53 } catch (Exception e) { 54 e.printStackTrace(); 55 System.out.println("驱程程序注册出错"); 56 } 57 } 58 59 60 /** 61 * 打开数据库驱动连接 62 */ 63 public static Connection getConnection(){ 64 try { 65 Connection conn = DriverManager.getConnection(url, userName, password); 66 return conn; 67 } catch (SQLException e) { 68 e.printStackTrace(); 69 throw new RuntimeException(e); 70 } 71 } 72 73 74 75 /** 76 * 清理环境,关闭连接(顺序:后打开的先关闭) 77 */ 78 public static void close(Connection conn,Statement stmt,ResultSet rs){ 79 if(rs!=null) 80 try { 81 rs.close(); 82 } catch (SQLException e1) { 83 e1.printStackTrace(); 84 throw new RuntimeException(e1); 85 } 86 if(stmt!=null){ 87 try { 88 stmt.close(); 89 } catch (SQLException e) { 90 e.printStackTrace(); 91 throw new RuntimeException(e); 92 } 93 } 94 if(conn!=null){ 95 try { 96 conn.close(); 97 } catch (SQLException e) { 98 e.printStackTrace(); 99 throw new RuntimeException(e); 100 } 101 } 102 } 103 104 105 106 public static void main(String[] args) { 107 108 Connection conn = null; 109 Statement stmt = null; 110 ResultSet rs = null; 111 112 113 conn=JDBCUtil.getConnection(); 114 try { 115 stmt=conn.createStatement(); 116 //准备sql操作语句 117 String sql= "SELECT id, first, last, age FROM YourDBName"; 118 rs = stmt.executeQuery(sql); 119 120 //从结果集中提取数据 121 while(rs.next()){ 122 int id = rs.getInt("id"); 123 int age = rs.getInt("age"); 124 String first = rs.getString("first"); 125 String last = rs.getString("last"); 126 127 System.out.print("ID: " + id); 128 System.out.print(", Age: " + age); 129 System.out.print(", First: " + first); 130 System.out.println(", Last: " + last); 131 } 132 } catch (SQLException e) { 133 // TODO Auto-generated catch block 134 e.printStackTrace(); 135 }finally{ 136 JDBCUtil.close(conn, stmt, rs); 137 } 138 } 139 }
- JDBC配置文件db.properties
-
1 url=jdbc:mysql://localhost/yourDBName 2 user=root 3 password=root 4 driverClass=com.mysql.jdbc.Driver
四:JDBC核心API
JDBC接口核心的API
- java.sql.*
-
javax.sql.*
-
1 |- Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。 2 |- connect(url, properties): 连接数据库的方法。 3 url: 连接数据库的URL 4 URL语法: jdbc协议:数据库子协议://主机:端口/数据库 5 user: 数据库的用户名 6 password: 数据库用户密码 7 |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序 8 |-registerDriver(driver) : 注册驱动类对象 9 |-Connection getConnection(url,user,password); 获取连接对象 10 11 |- Connection接口: 表示java程序和数据库的连接对象。 12 |- Statement createStatement() : 创建Statement对象 13 |- PreparedStatement prepareStatement(String sql) 创建PreparedStatement对象 14 |- CallableStatement prepareCall(String sql) 创建CallableStatement对象 15 16 |- Statement接口: 用于执行静态的sql语句 17 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) 18 |- ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL) 19 20 |-PreparedStatement接口:用于执行预编译sql语句 21 |- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML) 22 |-ResultSet executeQuery() : 执行预编译的查询sql语句(DQL) 23 24 |-CallableStatement接口:用于执行存储过程的sql语句(call xxx) 25 |-ResultSet executeQuery() : 调用存储过程的方法 26 27 28 |- ResultSet接口:用于封装查询出来的数据 29 |- boolean next() : 将光标移动到下一行 30 |-getXX() : 获取列的值
五:常见的SQL执行语句
-
1 String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))"; 2 //发送sql语句,执行sql语句,得到返回结果 3 int count = stmt.executeUpdate(sql); 4 5 String sql = "SELECT * FROM student"; 6 //执行sql 7 ResultSet rs = stmt.executeQuery(sql); 8 9 String sql = "INSERT INTO student(NAME,gender) VALUES('李四','女')"; 10 int count = stmt.executeUpdate(sql); 11 12 String sql = "UPDATE student SET NAME='"+name+"' WHERE id="+id+""; 13 14 String sql = "DELETE FROM student WHERE id="+id+"";
六:补充
数据库url制定
当加载的驱动程序,可以建立程序中使用DriverManager.getConnection()方法的连接。为方便参考,让列出了三个重载DriverManager.getConnection()方法:
getConnection(String url)
getConnection(String url, Properties prop)
getConnection(String url, String user, String password)
在这里,每个表单需要一个数据库URL。数据库的URL是指向数据库地址。
制定一个数据库URL是大多数用在建立连接相关。
如图列出了下来流行的JDBC驱动程序名和数据库的URL。参考资料