JDBC编程——MySQL

来源:互联网 发布:好看的手机壁纸软件 编辑:程序博客网 时间:2024/06/10 05:34

JDBC编程——MySQL

现代应用大多会使用一款数据库来进行持久化存储,开源的MySQL无疑是一个很好的选择。那么Java如何去连接MySQL,并使用它来编写程序呢?

什么是JDBC

  • JDBC全称Java Database Connectivity,即Java数据库连接。
  • JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

JDBC的特点

  • 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。
  • 不必为访问MySQL数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问SQL Server数据库又编写另一个程序等等。
  • 将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

如何使用JDBC

JDBC的API介绍

JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中),主要包括:

  • DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。
  • Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。
  • Connection:数据库连接,负责进行与数据库间的通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
  • Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。
  • PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。
  • CallableStatement:用以调用数据库中的存储过程。
  • SQLException:代表在数据库连接的创建和关闭和SQL语句的执行过程中发生了例外情况(即错误)。

JDBC编程步骤

这里使用的是MySQL数据库,所以需要相应的驱动程序。可以到MySQL的官网去下载。这里我给出当前最新的驱动程序的下载链接, 百度云:http://pan.baidu.com/s/1o8hKSum 密码: 17e4。

  1. 加载驱动程序
    • 利用Class.forName()方法来加载JDBC驱动程序(Driver)至DriverManager:
    • Class.forName("com.mysql.jdbc.Driver");
  2. 获取数据库连接
    • 从DriverManager中,通过JDBC URL,用户名,密码来获取相应的数据库连接(Connection):
    • Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
    • 不同的JDBC驱动程序的URL是不同的,它永远以“jdbc:”开始,但后面的内容依照驱动程序类型不同而各异。
    • 如连接本地MySQL数据库:
    • URL="jdbc:mysql://127.0.0.1:3306/school?useSSL=true&useUnicode=true&characterEncoding=UTF-8";
  3. 创建Statement对象用以执行SQL语句。
    • Statement stmt = conn.createStatement();
    • ResultSet rs = stmt.executeQuery(sql);

简单遍历一张表的示例

package com.xk1995.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class MySQL {    public static void main(String[] args) throws ClassNotFoundException, SQLException {        // 1加载驱动        Class.forName("com.mysql.jdbc.Driver");        // 2获取连接        String url = "jdbc:mysql://localhost:3306/school?useSSL=true";        String user = "root";        String password = "";        Connection conn = DriverManager.getConnection(url, user, password);        // 3创建statement对象        Statement stmt = conn.createStatement();        // 4使用statement对象执行SQL语句        String sql = "select * from user";        ResultSet rs = stmt.executeQuery(sql);        while (rs.next()) {            System.out.print("id=" + rs.getInt("id") + " ");            System.out.print("username=" + rs.getString("username") + " ");            System.out.print("password=" + rs.getString("password"));            System.out.println();        }        rs.close();        stmt.close();        conn.close();    }}

Statement和PreparedStatement对象详解

Statement常用API

  • ResultSet executeQuery(String sql)
  • int executeUpdate(String sql)
  • void close()

PreparedStatement使用方法

String sql = "select * from user where id = ?";PreparedStatement stmt = conn.prepareStatement(sql);stmt.setInt(1, 2);      ResultSet rs = stmt.executeQuery();
  • ResultSet executeQuery(String sql)
  • int executeUpdate(String sql)
  • void close()
  • void setInt(int parameterIndex, int x)
  • void setString(int parameterIndex, String x)

在JDBC中所有的参数都被代表?符号,这是已知的参数标记。在执行SQL语句之前,必须提供值的每一个参数。

setXXX()方法将值绑定到参数,其中XXX表示希望绑定到输入参数值的Java数据类型。如果忘了提供值,将收到一个SQLException。

每个参数标记是由它的序号位置引用。第一标记表示位置1,下一个位置为2 等等。这种方法不同于Java数组索引,以0开始。

Statement与PreparedStatement区别

  1. PreparedStatement是预编译的,对于批量处理可以大大提高效率.也叫JDBC存储过程
  2. 使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
  3. Statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,preparedstatement支持批处理
  4. PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
    这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出它预编译的优越性。
  5. 执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
  6. 我们在企业应用程序中更喜欢使用PreparedStatement对象,那就是安全性。传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。

下表提供了每个接口的用途概要,了解决定使用哪个接口
这里写图片描述

0 0