Java通过JDBC 进行MySQL数据库操作

13 篇文章 0 订阅
4 篇文章 1 订阅

一:前言

在测试工作中难免会和数据库打交道,可能大家对数据库语句都比较熟,比如常见的增删改查等,但是当我们在做自动化测试时,比如接口测试,大部分请求参数,可能都是从数据库中取值,并且接口返回值最后都会记录在数据库中,这样前提就需要和数据库建立连接,才能进行读写操作。


二:JDBC是什么

java提供了一个API也就是JDBC(Java Data Base Connectivity),可以为多种关系数据库提供统一访问和操作,它由一组用Java语言编写的类和接口组成。

  • 没有jdbc之前
    java开发人员需要维护不同的数据库的驱动程序,如果数据库的底层实现改变,驱动程序可能会随之改变!!

这里写图片描述

  • 有了jdbc之后:
    java开发人员只需维护java应用和一套规范,也就是jdbc接口。数据库厂商提供具体的java驱动程序,数据库厂商的底层实现改变,厂商随之更新驱动程序,而不影响java应用程序!!

这里写图片描述


三:实现步骤

  1. 导入数据包
    需要包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用 import java.sql.* 就可以了.

  2. 添加JDBC驱动程序包
    添加jar程序驱动包http://www.mysql.com/downloads/connector/j,初始化驱动程序,可以与数据库打开一个通信通道。

  3. 打开数据库连接
    需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接。

  4. 执行数据库操作
    需要使用类型声明的对象建立并提交一个SQL语句到数据库。

  5. 从结果集中提取数据
    要求使用适当的关于ResultSet.getXXX()方法来检索结果集的数据。

  6. 清理环境
    需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。

JDBCUtil类

  • 主程序
package com.jdbc;

//导入数据包
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * @author Charlie.chen
 *
 */

public class JDBCUtil{

    // 驱动包名和数据库url
    private static String url = null;
    private static String driverClass = null;
    // 数据库用户名和密码
    private static String userName = null;
    private static String password = null;

    /**
     * 初始化驱动程序
     * 静态代码块中(只加载一次)
     */
    static{
        try {
            //读取db.properties文件
            Properties prop = new Properties();

            /**
             * 使用类路径的读取方式
             *  / : 斜杠表示classpath的根目录
             *     在java项目下,classpath的根目录从bin目录开始
             *     在web项目下,classpath的根目录从WEB-INF/classes目录开始
             */
            InputStream in = JDBCUtil.class.getResourceAsStream("/db.properties");

            //加载文件
            prop.load(in);
            //读取信息
            url = prop.getProperty("url");
            driverClass = prop.getProperty("driverClass");
            userName = prop.getProperty("user");
            password = prop.getProperty("password");

            //注册驱动程序
            Class.forName(driverClass);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("驱程程序注册出错");
        }
    }


    /**
     * 打开数据库驱动连接
     */
    public static Connection getConnection(){
        try {
            Connection conn = DriverManager.getConnection(url, userName, password);
            return conn;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }



    /**
     * 清理环境,关闭连接(顺序:后打开的先关闭)
     */
    public static void close(Connection conn,Statement stmt,ResultSet rs){
        if(rs!=null)
            try {
                rs.close();
            } catch (SQLException e1) {
                e1.printStackTrace();
                throw new RuntimeException(e1);
            }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }



    public static void main(String[] args) {

       Connection conn = null;
       Statement stmt = null;
       ResultSet rs = null;


       conn=JDBCUtil.getConnection();
       try {
            stmt=conn.createStatement();
            //准备sql操作语句
            String sql= "SELECT id, first, last, age FROM YourDBName";
            rs = stmt.executeQuery(sql);

            //从结果集中提取数据
            while(rs.next()){
                 int id  = rs.getInt("id");
                 int age = rs.getInt("age");
                 String first = rs.getString("first");
                 String last = rs.getString("last");

                 System.out.print("ID: " + id);
                 System.out.print(", Age: " + age);
                 System.out.print(", First: " + first);
                 System.out.println(", Last: " + last);
            }
          } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }finally{
              JDBCUtil.close(conn, stmt, rs);
          }
     }
}
  • JDBC配置文件db.properties
url=jdbc:mysql://localhost/yourDBName
user=root
password=root
driverClass=com.mysql.jdbc.Driver

四:JDBC核心API

JDBC接口核心的API

  • java.sql.*
  • javax.sql.*

        |- Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。
            |- connect(url, properties):  连接数据库的方法。
                    url: 连接数据库的URL 
                        URL语法: jdbc协议:数据库子协议://主机:端口/数据库
                        user: 数据库的用户名
                        password: 数据库用户密码
        |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序
            |-registerDriver(driver)  : 注册驱动类对象
            |-Connection getConnection(url,user,password);  获取连接对象
    
        |- Connection接口: 表示java程序和数据库的连接对象。
                |- Statement createStatement() : 创建Statement对象
                |- PreparedStatement prepareStatement(String sql)  创建PreparedStatement对象
                |- CallableStatement prepareCall(String sql) 创建CallableStatement对象
    
        |- Statement接口: 用于执行静态的sql语句
                |- int executeUpdate(String sql)  : 执行静态的更新sql语句(DDL,DML)
                |- ResultSet executeQuery(String sql)  :执行的静态的查询sql语句(DQL)
    
            |-PreparedStatement接口:用于执行预编译sql语句
                    |- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)
                    |-ResultSet executeQuery()  : 执行预编译的查询sql语句(DQL)
    
            |-CallableStatement接口:用于执行存储过程的sql语句(call xxx)
                        |-ResultSet executeQuery()  : 调用存储过程的方法
    
    
        |- ResultSet接口:用于封装查询出来的数据
                |- boolean next() : 将光标移动到下一行
                |-getXX() : 获取列的值
    

五:常见的SQL执行语句

String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))";
//发送sql语句,执行sql语句,得到返回结果
int count = stmt.executeUpdate(sql);

String sql = "SELECT * FROM student";
//执行sql
ResultSet rs = stmt.executeQuery(sql);

String sql = "INSERT INTO student(NAME,gender) VALUES('李四','女')";
int count = stmt.executeUpdate(sql);

String sql = "UPDATE student SET NAME='"+name+"' WHERE id="+id+"";

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。
这里写图片描述

参考资料

http://www.yiibai.com/jdbc/jdbc-sample-code.html#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值