JDBC
概念:Java Data Base Connectivity(Java数据库连接):是java访问数据库的标准规范
作用:JDBC是用于执行SQL语句的Java API(Java语言通过JDBC可以操作数据库)
扩展:项目里创建文件,
lib文件夹作用是存放驱动包文件
bean文件夹作用是存放封装类,封装数据
utils文件夹作用是存放工具类,一般在工具类类名后面加上Utils
文件名.properties文件是存放配置
Ø 首先:导入数据库驱动包
在modules创建一个文件夹:lib
把jar包拷贝粘贴到lib文件夹
在jar包上右键–>Add as Library—[设置在为在当前Module里使用,起一名称],确定
四个核心对象
1.DriverManager:用于注册驱动
2.Connection: 表示与数据库创建的连接
3.Statement: 执行SQL语句的对象
4.ResultSet: 结果集或一张虚拟表
DriverManager 驱动管理器
注册驱动(优化了加载驱动类)
获得连接
Connection 连接对象, 操作都是基于这个连接的
创建执行sql语句对象Statement
Statement 执行SQL语句对象
excuteQuery(String sql) 执行查询
excuteUpdate(String sql) 执行增删改
ResultSet 结果集对象
next() 调用一次, 光标向下移动一行, 返回boolean类型
get类型(String 列名); 根据列名获得数据
使用步骤:(重要)
1.注册驱动
2.获取连接
3.创建预编译SQL语句对象
4.设置参数,执行SQL语句
5.释放资源
1.注册驱动
概述:我们java程序需要通过数据库驱动才能连接到数据库,因此需要注册驱动MySQL的驱动的入口类是:com.mysql.jdbc.Driver
DriverManager 类用于注册驱动,
方法:static void registerDriver(Driver driver);向DriverManager 注册给定驱动程序
使用:DriverManager.registerDriver(驱动对象);传入对应参数即可
注册驱动语句
Class.forName(“com.mysql.jdbc.Driver”); // 后期可以将"com.mysql.jdbc.Driver"字符串写在文
件中.
2.获取连接
DriverManager 类用于连接
方法:static Connection getConnection(String url, String user, String password);连接到给定数据库URL,并返回连接
参数说明:
-
String url: 连接数据库的URL,用于说明连接数据库的位置
-
String user:数据库的账号
-
String password: 数据库的密码
URL地址格式:协议名:子协议://服务器名或IP地址:端口号/数据库名?参数=参数值 MySQL写法:jdbc:mysql://localhost:3306/day24 本地服务器 简写:jdbc:mysql:///day24
使用:DriverManager.getConnertion(url,user,password); 传入对应参数即可
获取连接语句
// 连接到MySQL
// url: 连接数据库的URL
// user: 数据库的账号
// password: 数据库的密码
String url="jdbc:mysql://localhost:3306/day24 ";
String uesrname="root";
String password="root";
Connection conn = DriverManager.getConnection(url,uesrname,password);
3.创建预编译SQL对象 和 4.创建参数,执行SQL语句
获取Statement 对象介绍
在 Connection 接口中 获取 Statement 对象
//创建执行sql语句对象
Statement statement=connection.createStatement();
statement 接口
方法:
ResultSet executeQuery(String sql);只能执行MySQL查询(select)语句,返回结果的集合
int executeUpdate(String sql); 执行的DML((添加)INSERT、(更新)UPDATE、(删除DELETE)语句,返回受影响的行数
注意:在MySQL中,只要不是查询就是修改。 executeUpdate:用于执行增删改 executeQuery:用于 执行查询
preparedStatement 是statement 子接口
概述:预编译对象
特点:性能要高,会把SQL语句先编译,格式固定好,SQL语句中的参数会发生变化,过滤掉用户输入的关键字(or)
用法:通过connection 对象创建
方法:prepareStatement(String sql); 表示预编译的sql语句,如果sql语句有参数通过?来占位
String sql="select * from user where username=? and password=?";
setxxx(int i, Obj obj);(xxx是类型 int、String、Long) i指的就是问号的索引(指第几个问号,从1开始)
ResultSet 接口
概述:是select语句执行查询的结果集对象,里边封装了查询的所有结果数据。相当于是一张二维表。如果想要获取ResultSet里的数据,就需要对这个对象进行循环遍历:得到其中每一行的每一个字段的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
• 获取任意类型的数据
• getObject(int index)
• getObject(string columnName)
• 获取指定类型的数据,例如:
• getString(int index)
• getString(String columnName)
l ResultSet还提供了对结果集进行滚动的方法:
• next():移动到下一行
• Previous():移动到前一行
• absolute(int row):移动到指定行 [row从1开始计算]
• beforeFirst():移动resultSet的最前面。
• afterLast() :移动到resultSet的最后面。
创建预编译语句
String sql="select * from user where username=? and password=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//设置参数,执行sql语句
prepareStatement.setString(1,root);//给第一个?赋值,给用户名赋值
prepareStatement.setString(2,root);//给第二个?赋值,给密码赋值
ResultSet resultSet=prepareStatement.executeQuery();
User user=null;
while(resultSet.next()){
user=new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setNickname(resultSet.getString("nickname"));
}
5.释放资源
释放资源(先创建的后关闭)
if(resultSet !=null){
resultSet.close();
}
if(statement !=null){
statement.close();
}
if(connection !=null){
connection.close();
}
案例:
package com.lin.jdbcAn;
import com.lin.utils.JdbcUtils;
import com.mysql.jdbc.Driver;
import java.sql.*;
public class JdbcAnLi {
public static void main(String[] args) throws Exception {
//调用方法注册驱动,获得连接
Connection connection = JdbcUtils.getConnection();
//创建执行SQL语句对象
Statement statement = connection.createStatement();
//执行sql语句,处理结果
String select="select * from student";
ResultSet resultSet = statement.executeQuery(select);
while (resultSet.next()){
System.out.println(resultSet.getObject("id"));
}
//释放资源
JdbcUtils.release(connection,statement,null);
}
}
//静态方法类,注册驱动,获得连接、释放资源
package com.lin.utils;
import com.mysql.jdbc.Driver;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
public static String driver;
public static String url;
public static String username;
public static String password;
static {
try {
//读取db.properties
InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
//创建properties对象
Properties properties=new Properties();
//关联流
properties.load(is);
//获得配置文件的内容,根据键找值
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
//注册驱动
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
//获得连接
public static Connection getConnection() throws Exception {
//获得连接
Connection connection = DriverManager.getConnection(url, username, password);
return connection;
}
//释放资源
public static void release(Connection connection, Statement statement, ResultSet resultSet){
if(resultSet!=null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!=null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}