JAVA-JDBC基础(Mysql版本)
前言:
官方定义:
JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。 JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个 数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即 可,数据库驱动由数据库厂商提供。
个人理解:
可以理解为,java公司制定了一个操作关系型数据库的统一规范。要想让你的关系型数据库被java语言使用,就得按照这个标准去写具体的实现类。也就是在使用之前我们需要把具体数据库厂商的驱动jar包导入到项目里,jar包里就是具体实现类。下面会以Mysql为例来操作,如何导入jar包和如何使用jdbc的公共接口去获取到具体的数据库连接对象。然后通过具体的数据库连接对象,获取SQL执行对象。最后调用SQL执行对象,来执行具体的SQL语句。
目录
依赖说明:
Jar包
JDBC 的核心 API
JDBC操作步骤:
1.导入驱动jar包
1.0新建目录
1.1复制到自己新建的项目目录
1.2 使用 ADD AS Lirary(添加到项目中)
2.注册驱动
手动加载
Class.forName("com.mysql.jdbc.Driver");//手动把mysql实现类加载进内存,不需要返回值。
3.使用DriverManager类的getConnection方法获取连接对象
参数:
URL地址格式:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
4.定义SQL语句
4.1 PreparedStatement对象方式定义SQL语句
//定义SQL语句(使用?号做位占位符)
String sql="select * from user where username=? and password= ?";
4.2 Statement 对象方式定义SQL语句
String sql="select * from user where username=-'"+username+"' and password='"+password+"'";
5.获取SQL语句执行对象(Statement SQL语句拼接方式的SQL执行对象 或者 PreparedStatement 参数化的SQL执行对象)
5.1Statement
Statement statement = connection.createStatement();
5.2PreparedStatement(和Statement的区别是在创建的时候就需要把SQL语句传进去,之后调用具体的方法就不需要SQL语句了。但是需要对参数进行赋值)
PreparedStatement prepareStatement(String sql)
6.执行SQL语句(ResultSet resultSet =null; 获取结果集对象)
6.1Statement执行SQL语句并获取结果
resultSet = statement.executeQuery(sql);
6.2PreparedStatement执行SQL语句并获取结果
statement = connection.prepareStatement(sql);
//6.2.1添加参数
statement.setString(1,username);
statement.setString(2,password);
resultSet= statement.executeQuery();
7.处理结果
if(resultSet.next()){
String username1 = resultSet.getString("username");
System.out.println("姓名"+"----"+username1);
result=true;
}
8.释放资源
if(stmt!=null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
JDBC登录实例演示:
main方法代码
//1.键盘输入,用户名,密码
Scanner sr= new Scanner(System.in);
//输入用户名
System.out.println("请输入用户名:");
String username=sr.next();
//输入密码
System.out.println("请输入密码:");
String password=sr.next();
//2.调用方法
boolean zhangsan = new JDBCLogin().login2(username, password);
if(zhangsan){
System.out.println("登录成功!");
// break;//登录成功跳出循环
}else {
System.out.println("登录失败!");
}
配置文件:
url=jdbc:mysql:///login
user=root
password=root
driver=com.mysql.jdbc.Driver
工具类:
package cn.itcast.util;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* @program: JavaWeb
* @description: jdbc助手类
* @author: 康世行
* @create: 2021-01-05 20:00
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
*@Description: 文件读取,读取配置文件
*@Param:
*@return:
*@Author: 康世行
*@date: 2021/1/5
*/
static {
try {
//读取资源文件的值
//1.创建Properties集合类,读取配置文件
Properties pro=new Properties();
//获取src路径下的文件的路径---》classLoader
Class<JDBCUtils> jdbcUtilsClass = JDBCUtils.class;
ClassLoader classLoader = jdbcUtilsClass.getClassLoader();//通过类对象获取类加载器
//类加载器可以获取到src下的文件路径
URL resource = classLoader.getResource("jdbc.properties");
//通过resourec的getpath获取文件路径
String path = resource.getPath();
//2.加载配置文件
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();
}
}
/**
*@Description: 获取连接对象
*@Param: 无
*@return: 返还连接对象
*@Author: 康世行
*@date: 2021/1/5
*/
public static Connection getConnection(){
Connection conn=null;
try {
conn= DriverManager.getConnection(url,user,password);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return conn;
}
/**
*@Description: 释放资源
*@Param: 执行SQL语句对象,连接对象
*@return: 无
*@Author: 康世行
*@date: 2021/1/5
*/
public static void close(Statement stmt,Connection conn){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
/**
*@Description: 释放资源
*@Param: 执行SQL语句对象,连接对象,数据集
*@return: 无
*@Author: 康世行
*@date: 2021/1/5
*/
public static void close(Statement stmt, Connection conn, ResultSet rs){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
Login方法代码
/**
*@Description: 登录方法(使用PreparedStatement实现)
*@Param: 用户名,密码
*@return: 是否登录成功
*@Author: 康世行
*@date: 2021/1/6
*/
public boolean login2(String username,String password){
boolean result=false;
//判断用户名和密码是否为空
if(username==null||password==null){
result=false;
}
Connection connection=null;
PreparedStatement statement =null;
ResultSet resultSet =null;
try {
//1.获取数据库连接
connection = JDBCUtils.getConnection();
//2.定义SQL语句(使用?号做位占位符)
String sql="select * from user where username=? and password= ?";
//3.获取执行SQL的对象
statement = connection.prepareStatement(sql);
//3.1添加参数
statement.setString(1,username);
statement.setString(2,password);
//4.执行SQL获取结果
resultSet= statement.executeQuery();
//5.处理结果
if(resultSet.next()){
String username1 = resultSet.getString("username");
System.out.println("姓名"+"----"+username1);
result=true;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
//释放资源
JDBCUtils.close(statement,connection,resultSet);
}
return result;
}