一.概念
jdbc的本质是一套操作所有关系型数据库的规则,即接口,只需导入数据库驱动jar包,就可以使用这套接口对数据库进行操作
二.基本步骤
1.导入驱动jar包 mysql-connector-java-5.1.37-bin.jar(注意:若mysql版本在8以上,就导入8以上的jar包),将jar包导入到web/WEB-INF/lib目录下
jar包的下载和详细说明.
2.注册驱动
Class.forName(“com.mysql.jdbc.Driver”);
3.获取数据库连接
Connectionconn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/db1”,“root”,“password”);
4.定义sql语句
String sql = “”;
5.获取执行sql语句的对象Statement或者PreparedStatement
(1)Statement中提供了三个方法执行sql
1.executeQuery():用于产生单个结果集的语句,若select语句
2.executeUpdate():用于执行insert,update,delete语句以及sql的DDL语句(如:create table和drop table),返回值是受影响的行数
3.execute():用于返回多个结果集,多个更新计数,或二者组合的语句
(2)PreparedStatement继承了Statement对象,可以防止sql注入等安全问题,且三个方法的作用于Statement一致
6.使用上述方法执行sql语句
7.释放资源
三.详解各个对象
1.DriverManager:驱动管理对象
*功能:
(1)注册驱动:高索程序该使用哪一个数据库驱动jar包
Class.forName(“com.mysql.cj.jdbc.Driver”);
(2)获取数据库连接
static Connection getConnection(String url,String user,String
password)参数:
1.url:指定的连接路径:jdbc:mysql://ip地址:端口号(3306)/数据库名称
2.user:用户名 password:密码
2.Connection:数据库连接对象
(1)功能:
*获取执行sql的对象Statement或者PreparedStatement
*管理事务:开启,提交,回滚
3.ResultSet:结果集对象,封装查询结果
*boolean next():游标向下移动一行,判断当前行是否是最后一行末尾(即判断是否有数据),如果是最后一行,则返回 false,否则返回 true
*getXxx(参数):获取数据 (1)Xxx:代表数据类型,如getInt(),getString() (2)参数:
1.int:代表列的编号,从1开始,如:getString(1)
2.String:代表名称,如:getDouble(“balance”)
例子:获取ResultSet对象rs中的数据
while(rs.next()){
int id = rs.getInt(1);
String name = rs.getString("name");
double balance = rs.getDouble(3);
}
四.jdbc工具类
由于jdbc的操作过程需要好几行代码且都需要重复,所以可以从中抽取出冗余代码编写成一个工具类
*代码实现:
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
*/
static{
//读取资源文件,获取值。
try {
//1. 创建Properties集合类。
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
System.out.println(path);///D:/IdeaProjects/itcast/out/production/day04_jdbc/jdbc.properties
//2. 加载文件
// pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04_jdbc\\src\\jdbc.properties"));
pro.load(new FileReader(path));
//3. 获取数据,赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}