暴露的外部接口:
- getInstance()
- 唯一的初始化类的方法
- getLink()
- 获取Statement对象
- closeLink()
- 关闭数据库连接并将类置为null
- performQuerySql(String sql)
- 执行查询操作的sql
- performUpdateSql(String sql)
- 执行update操作的sql
创建JDBC链接的步骤:
1. 引入mysql包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
2. 加载驱动
// 注册JDBC驱动程序:需要初始化驱动程序,以便可以打开与数据库的通信通道。
Class.forName("com.mysql.jdbc.Driver").newInstance();
3. 创建链接
// 打开一个连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,它表示与数据库的物理连接。
Connection conn = DriverManager.getConnection(url,name,pwd);
4. 执行查询
// 执行查询:需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询。如下:
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);
Statement知识:Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句:Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。
5. 关闭资源
conn.close();
statement.close();
rs.close();
代码示例:
package com.an.learning.bean;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Anzepeng
* @title: MysqlLink
* @projectName learning
* @description: TODO
* @date 2020/8/14 0014下午 13:19
*/
public class MysqlLink {
private static MysqlLink mysqlLink = null;
private static final String url = "jdbc:mysql://" + "ip/库名" + "?useUnicode=true&characterEncoding=utf-8";
private static final String name = "root";
private static final String pwd = "";
private static Connection conn;
private static Statement statement;
private static ResultSet rs;
private MysqlLink(){
try {
// 注册JDBC驱动程序:需要初始化驱动程序,以便可以打开与数据库的通信通道。
Class.forName("com.mysql.jdbc.Driver").newInstance();
// 打开一个连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,它表示与数据库的物理连接。
conn = DriverManager.getConnection(url,name,pwd);
// 执行查询:需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询。如下:
statement = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @description: 执行查询sql
* @param ${String sql}
* @return List
* @throws
* @author Anzepeng
* @date 2020/8/14 0014 下午 15:12
*/
public static List performQuerySql(String sql){
List list = new ArrayList();
try {
rs = statement.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData(); //获得结果集结构信息,元数据
int columnCount = md.getColumnCount(); //获得列数
while (rs.next()) {
Map<String,Object> rowData = new HashMap<String,Object>();
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* @description: 执行update操作
* @param ${String sql}
* @return boolean
* @throws
* @author Anzepeng
* @date 2020/8/14 0014 下午 15:19
*/
public static boolean performUpdateSql(String sql){
try {
statement.executeUpdate(sql);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
/**
* @description: 获取MysqlLink对象
* @param ${tags}
* @return MysqlLink
* @throws
* @author Anzepeng
* @date 2020/8/14 0014 下午 15:14
*/
public static MysqlLink getInstance(){
if (mysqlLink == null){
mysqlLink = new MysqlLink();
}
return mysqlLink;
}
/**
* @description: 获取Statement对象
* @param ${tags}
* @return Statement
* @throws
* @author Anzepeng
* @date 2020/8/14 0014 下午 15:15
*/
public static Statement getLink(){
return statement;
}
/**
* @description: 关闭数据库连接
* @param ${tags}
* @return boolean
* @throws
* @author Anzepeng
* @date 2020/8/14 0014 下午 15:13
*/
public static boolean closeLink(){
try {
conn.close();
statement.close();
if (rs != null){
rs.close();
}
mysqlLink = null;
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
}