JDBC学习笔记

120 阅读4分钟

JDBC(Java Data Base Connectivity) 是 Java 访问数据库的标准规范.是一种用于执行SQL语句的Java API,可以为 多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范

JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需 要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。 

JDBC使用

  1. 注册驱动
  2. 获得连接
  3. 获取语句执行平台 获取Statement对象
  4. 处理结果集(只在查询时处理)
  5. 释放资源

注册驱动

  • JDBC规范定义驱动接口: java.sql.Driver
  • MySql驱动包提供了实现类: com.mysql.jdbc.Driver

加载注册驱动   Class.forName(数据库驱动实现类)

获得连接

  • Connection 接口,代表一个连接对象 ,具体的实现类由数据库的厂商实现
  • 使用 DriverManager类的静态方法,getConnection可以获取数据库的连接

获取连接的静态方法   Connection getConnection(String url, String user, String password)

获取语句执行平台

  • 通过Connection 的 createStatement方法 获取sql语句执行对象

创建 SQL语句执行对象   Statement createStatement()

  • Statement : 代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结 果的对象。 

执行insert update delete语句 返回受影响的行数    int executeUpdate(String sql) 

执行select语句, 返回ResultSet结果集对象    ResultSet executeQuery(String sql)

处理结果集

  • 只有在进行查询操作的时候, 才会处理结果集

ResultSet接口

  • 封装数据库查询的结果集,对结果集进行遍历,取出每一条记录 集合

boolean next()  游标向下一行  还有下一条记录,返回 true,否则返回 false

xxx getXxx( String or int)    通过列名,参数是 String 类型   通过列号,参数是整数

释放资源

  • 需要释放的对象:ResultSet 结果集,Statement 语句,Connection 连接
  • 先开的后关,后开的先关。ResultSet ==> Statement ==> Connection

JDBC工具类

  • 可以把几个字符串定义成常量:用户名,密码,URL,驱动类

  • 得到数据库的连接:getConnection()

  • 关闭所有打开的资源

    public class DBUtils { public static DataSource dataSource; public static String DRIVERNAME = ""; public static String URL = ""; public static String USER = ""; public static String PASSWORD = ""; static { try { // 注册驱动 Class.forName(DRIVERNAME); } catch (Exception e) { e.printStackTrace(); } } // 获取链接 public static Connection getConnection() { Connection connection = null; try { connection = DriverManager.getConnection(URL, USER, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } return connection; } // 关闭资源 public static void close(Connection con, Statement statement, ResultSet resultSet){ if(con != null && statement != null && resultSet != null){ try { resultSet.close(); statement.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

预处理对象 

PreparedStatement

PreparedStatement 是 Statement 接口的子接口,继承于父接口中所有的方法。它是一个预编译的 SQL 语句对象

预编译: 是指SQL 语句被预编译,并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句

PreparedStatement 特点

  • 因为有预先编译的功能,提高 SQL 的执行效率
  • 可以有效的防止 SQL 注入的问题,安全性更高

PreparedStatement对象使用

PreparedStatement prepareStatement(String sql)   指定预编译的 SQL 语句  SQL 语句中使用占位符 ? 创建一个语句对象

int executeUpdate()   执行insert update delete语句

ResultSet executeQuery()   执行select语句. 返回结果集对象 Resulet

PreparedStatement的步骤

编写 SQL 语句,未知内容使用?占位

"SELECT * FROM jdbc_user WHERE username=? AND password=?"; 

获得 PreparedStatement 对象

Connection connection = JDBCUtils.getConnection()
Statement statement = connection.createStatement()

void setXxx(int parameterIndex, Xxx x)  将指定参数设置为给定 Xxx 类型的值

数据库连接池

实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池

用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的 close()方法也不会真的关闭Connection,而是把Connection“归还”给池

用数据库连接池

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口

常见的连接池有 DBCP连接池, Druid连接池

DBCP连接池

public class DBCPUtils {
  public static final String DRIVERNAME = "";
  public static final String URL = "";
  public static final String USERNAME = "";
  public static final String PASSWORD = "";

  public static BasicDataSource dataSource = new BasicDataSource();

  static{
    dataSource.setDriverClassName(DRIVERNAME);
    dataSource.setUrl(URL);
    dataSource.setUsername(USERNAME);
    dataSource.setPassword(PASSWORD);
  }

}

Druid连接池

导入配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000

public class DruidUtils {
  public static DataSource dataSource;
  static{
    try {
      Properties p = new Properties();
      InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
      p.load(inputStream);
      dataSource = DruidDataSourceFactory.createDataSource(p);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

常见配置项

driverClassName       数据库驱动名称

url                              数据库地址

username                  用户名

password                   密码

maxActive                  最大连接数量

maxIdle                      最大空闲连接

minIdle                       最小空闲连接

initialSize                    初始化连接

JavaBean组件

JavaBean 就是一个类, 开发中通常用于封装数据

  • 需要实现序列化接口, Serializable
  • 提供私有字段: private 类型 变量名;
  • 提供 getter 和 setter
  • 提供 空参构造