欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDBC(操作数据库)

程序员文章站 2024-03-21 18:11:28
...

JDBC

简介:

Java database connectivity java数据库连接
通过Java代码访问关系型数据库。

类和接口

DriverManager,Connection,Statement,ResultSet
首先通过DriverManager连接驱动获取Connection,连接后通过Statement执行sql语句,结果通过ResultSet获取

  • DriverManager
    管理一组JDBC驱动程序的基本服务
    作为初始化的一部分,DriverManger类会尝试加载在“jdbc.drivers”系统属性中引用的驱动程序类。

    方法:
    JDBC(操作数据库)

    主要API
    JDBC(操作数据库)

  • Connection
    与特定数据库的连接(回话)。在连接上下文中执行SQL语句并且返回结果。
    JDBC(操作数据库)

    字段
    JDBC(操作数据库)

    方法:
    JDBC(操作数据库)

    主要API
    createStatement();

  • Statement
    用于执行静态SQL语句并且放回它所生产的结果。

    字段
    JDBC(操作数据库)

    方法:
    JDBC(操作数据库)

    重要API
    executeQuery(String sql);

  • ResultSet
    表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
    ResultSet对象具有指向其当前数据行为的光标。next方法将光标移动到下一行。

    方法:
    JDBC(操作数据库)

    重要API
    JDBC(操作数据库)
    JDBC(操作数据库)

JDBC操作步骤:

  1. 加载数据库驱动
    DriverManager > registerDriver(Driver drive);
  2. 创建与数据库的连接
    DriverManager > getConnection(String url,String user.String password);
  3. 编写sql语句
  4. 执行sql语句
    Statement > executeQuery(String sql);
  5. 释放资源(关闭连接)

通过JDBC查询Mysql数据库

具体操作逻辑:
JDBC(操作数据库)
注意变更:
JDBC(操作数据库)

JDBC释放资源

Statement相关API:
JDBC(操作数据库)
Connection相关API:
JDBC(操作数据库)
具体做法
JDBC(操作数据库)

JDBC增删改

  • 增加
    JDBC(操作数据库)

  • 删除
    JDBC(操作数据库)

  • 修改
    JDBC(操作数据库)

JDBC封装

配置文件:
JDBC(操作数据库)
相关代码

package com.itheima.jdbcdemo;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtils {
	private static String driver;
	private static String url;
	private static String username;
	private static String password;
	
	static{
		//加载配置文件信息
		Properties properties = new Properties();
		try {
			properties.load(new FileInputStream("jdbc.properties"));
			driver = properties.getProperty("driver");
			url = properties.getProperty("url");
			username = properties.getProperty("username");
			password  = properties.getProperty("password");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 释放资源的工具方法
	 * @param resultSet 结果集
	 * @param statement 
	 * @param connection 链接
	 */
	public static void releaseResource(ResultSet resultSet, Statement statement, Connection connection) {
		try {
			if(resultSet!=null){
			resultSet.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(statement!=null){
			statement.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(connection!=null){
			connection.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 从配置文件中获取链接信息 简介到mysql服务端返回一个connection对象
	 * @return 代表链接的connection 对象
	 */
	public static Connection getConnection() {
		try {
			Class.forName(driver);
			 Connection connection = DriverManager.getConnection(url,username,password);
			 return connection;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

JDBC登录案例以及SQL注入处理

package com.itheima.jdbcdemo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class LoginDemo {
	public static void main(String[] args) {
		boolean isLogin = login("zhangsan' or '1==1", "asdfadsf");
//		boolean isLogin = login("zhangsan", "123");
		System.out.println(isLogin?"登陆成功":"登陆失败");
	}

	public static boolean login(String username,String password){
		//获取链接
		Connection connection = JDBCUtils.getConnection();
		Statement statement = null;
		try {
			 statement = connection.createStatement();
			String sql = "select id from users where username =? and password = ?";
			PreparedStatement preparedStatement = connection.prepareStatement(sql);
			//第一个? 用username去替换
			preparedStatement.setString(1, username);
			//第二个? 用password去替换
			preparedStatement.setString(2, password);
			ResultSet resultSet = preparedStatement.executeQuery();
			 //"select id from users where name ='zhangsan' and password = '123'";
			 //"select id from users where name ='zhangsan' or '1==1' and password = 'asdfadsf'";
			//String sql = "select id from users where username = '"+username+"' and password = '"+password+"'";
			//ResultSet resultSet = statement.executeQuery(sql);
			//通过preparedStatement处理后变成了 select id from users where username ='zhangsan\' or \'1==1' and password = 'asdfadsf'
			return resultSet.next();
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}
}

JDBC(操作数据库)
需要用到的mysql jdbc jar包