一、什么是JDBC?JDBC的本质是什么?
JDBC(Java Database Connectivity):java数据库连接
本质就是一个普通的java类,数据库厂商提供的驱动jar包,来实现sun公司提供一套"应用程序接口规范"
java.sql.Drvier 驱动接口
java.sql.DriverManager:驱动管理类(管理jdbc的驱动服务)
java.sql.Connection:与特定数据库的一种会话连接
java.sql.Statement:执行静态sql语句 (执行对象,操作数据库)
二、JDBC的七大操作步骤(百度百科为五大步骤,没有获得执行对象和执行语句)
jdbc原生七大操作步骤:(入门)
0)导包
1)注册驱动 Class.forname(com.mysql.cj.jdbc.Driver);
2)获取数据库连接对象 Connection cnt =
DriverManager.getConnection("jdbc:mysql://localhost:3306/包名","用户名","密码");
3)获取数据库的执行对象 Statement stmt = cnt.createStatement();
4)准备sql语句 String sql = "SQL语句";
5)数据库执行对象去操作数据库 int i =stmt.executeUpdate(sql);
6)输出返回结果 System.out.println("影响了"+i+"行");
7)释放资源 stmt.close(); cnt.close();
三、JDBC的statement执行对象及DQL语句
DDL语句:execute(); 返回值为Boolean;
DML语句:executeUpdate(); DQL语句:executeQuery();
ResultSet结果集:next()向下跳一行; previous()向上跳一行;
getxxx(列数,或者列名); getObject();
/*sql1:sql执行语句 statement:执行对象
executeQuery:查询函数 ResultSet :结果返回集*/
查询语句:ResultSet query = statement.executeQuery(sql1);
/*query.next():使得数据光标挪至下一行,若下一行还有数据则返回结果为真;
query.getInt(所需要获得数据的列数) 或者 query.getInt(“所需要获得数据的名称”)
query.getString(所需要获得数据的列数) 或者 query.getString(“所需要获得数据的名称”)*/
while(query.next()){
int id = query.getInt(1);
String name = query.getString(2);
String gender = query.getString("gender");
String address = query.getString("address");
System.out.println(id+"\t\t"+name+"\t\t"+gender+"\t\t"+address);
studentList.add(new Student(id,name,gender,address));
}
package com.jdbcutils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class JUTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Connection connection = JDBCUtils.getConnection();
Statement statement = connection.createStatement();
String sql1 = "select * from student";
ResultSet query = statement.executeQuery(sql1);
List<Student> studentList = new ArrayList<>();
while(query.next()){
int id = query.getInt(1);
String name = query.getString(2);
String gender = query.getString("gender");
String address = query.getString("address");
System.out.println(id+"\t\t"+name+"\t\t"+gender+"\t\t"+address);
studentList.add(new Student(id,name,gender,address));
}
studentList.forEach(a-> System.out.println(a));
JDBCUtils.close(query,statement,connection);
}
}
四、自定义JDBC工具类
package com.qf;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils2 {
private static String url;
private static String username;
private static String password;
private static String driverClassName;
static {
Properties properties = new Properties();
//获得properties文件数据流,并装载到properties对象中,
InputStream inputStream = JDBCUtils2.class.getClassLoader().getResourceAsStream("Jdbc.properties");
try {
properties.load(inputStream);
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
driverClassName = properties.getProperty("driverClassName");
//加载或注册驱动
Class.forName(driverClassName);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public JDBCUtils2() {
}
//获得直接调用获得代理对象
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection(url, username, password);
return connection;
}
//关闭获得对象
public static void close(ResultSet rs, Statement st, Connection conn) {
if (rs != null) {
try {
rs.close();
System.out.println("结果集已关闭");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (st != null) {
try {
st.close();
System.out.println("执行对象已关闭");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
conn.close();
System.out.println("连接对象已关闭");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
public static void close(Statement st, Connection conn) {
close(null, st, conn);
}
}