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

JDBC

程序员文章站 2022-05-29 11:43:05
JDBC编码的步骤: 1、加载驱动并注册驱动 Class.forName("com.mysql.jdbc.Driver"); 说明:在加载Driver类时,它会自动创建自己的实例并向 DriverManager 注册该实例。 com.mysql.jdbc.Driver的源码: 2、获取与数据库的连接 ......

JDBC简介

JDBC

JDBC全称Java DataBase Connectivity即Java数据库连接技术,是Java语言和数据库之间的一座桥梁,它是一个规范而不是一个实现。简单来讲,我们可以通过Java代码对数据库进行操作管理。
JDBC其实就是一组接口,也是规范,让所有的数据库厂商按照该规范,去实现对外提供的这一组接口,因此数据库厂商提供符合jdbc规范的能够访问自家数据的一组程序(驱动)。
JDBC

JDBC常见接口和类

以下四个API都是sql包下的接口

接口(类)名 描述
DriverManager 驱动管理,实现与数据库的连接
Connection 与数据库的连接状态
Statement SQL语句执行,将SQL语句发往数据库执行
ResultSet 结果集,在数据库操作中查询的结果

JDBC快速入门

下载JDBC驱动

下载驱动 5.x版本 8.x版本下载链接
JDBC

JDBC连接步骤

创建java Project项目

右键项目–>创建目录(lib)–>将驱动粘贴到lib目录中–>右键jar文件–>build path–>add to path

步骤

    //1.注册驱动
	Class.forName("com.mysql.jdbc.Driver");
	//2.连接数据库
	Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo?useSSL=false", "root", "root");
	if(con!=null) {
		System.out.println("数据库连接成功");
	}else {
		System.out.println("数据库连接失败");
	}
	//3.创建SQL语句执行器
	Statement stat = con.createStatement();
	String sql="insert into course values(104,'大数据',3)";
	//发送sql数据库执行并返回结果
	int n = stat.executeUpdate(sql);
	if(n>0) {
		System.out.println("添加成功");
	}else {
		System.out.println("添加失败");
	}
	//4.资源释放
	stat.close();
	con.close();

代码详解

1.驱动注册

Class.forName("com.mysql.jdbc.Driver");   5.x版本
Class.forName("com.mysql.cj.jdbc.Driver"); 8.x版本

2.数据库连接

  jdbc:mysql://ip地址:端口号/要操作的数据库名称   5.x版本写法
  jdbc:mysql://ip地址:端口号/要操作的数据库名称?serverTimezone=UTC 8.x写法
  当在url中ip和端口分别为localhost:3306的时候可以省略

3.创建SQL语句执行器

Statement stat = con.createStatement();

4.ResultSet用于执行静态 SQL 语句并返回它所生成结果的对象

   ##当执行的SQL语句为DML语句的时候,需要调用executeUpdate(String sql)去执行,返回值为int,表示受影响的行数
   ##当执行的SQL语句为DQL的时候,需要调用executeQuery(String sql)执行,返回的ResultSet对象 

解决SQL注入攻击

API:
PreparedStatement SQL语句执行器
PreparedStatement 与 Statement为父子关系,Statement是父
表示预编译的 SQL 语句的对象,SQL 语句被预编译并存储在 PreparedStatement 对象中,所谓的预编译就是对要执行的sql先进行语法检测,固定语法结构,为了能够使sql语句正常通过sql语句的语法检测,值的部分用?替代。
代码示例

//1.注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		String driver="jdbc:mysql:///demo?useSSL=false&serverTimezone=UTC";
		Connection con = DriverManager.getConnection(driver, "root", "root");
		String sql="insert into user(uname,upwd)values(?,?)";
		//生成SQL语句执行器
		PreparedStatement ps = con.prepareStatement(sql);
		//给?赋值
		ps.setString(1, "小明");
		ps.setString(2, "666");
		int n = ps.executeUpdate();
		System.out.println(n);
		//释放资源
		ps.close();
		con.close();

封装

1.驱动注册只需要执行一次,因此放入静态代码块中(随着类的加载而执行,而且只执行一次)
2.将驱动类,url,用户名,密码提取出来,保存到文件中(.properties)
3.将连接数据与释放资源分别封装到两个方法中

	private static  String DRIVER;//驱动类
	private static  String URL;//连接路径
	private static  String USERNAME;//用户名
	private static  String PASSWORD;//密码
	
	static {
		try {
			//创建Properties对象
			Properties p = new Properties();
			p.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));
			DRIVER = p.getProperty("dbDriver");
			URL = p.getProperty("url");
			USERNAME = p.getProperty("username");
			PASSWORD = p.getProperty("password");
			System.out.println(DRIVER);
			Class.forName(DRIVER);//驱动注册
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//连接数据库的方法
	public static Connection getCon() {
		Connection con = null;
		try {
			con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return con;
	}
	//释放资源的方法
	public static void close(Connection con ,ResultSet rs,PreparedStatement ps) {
		try {
			if(rs!=null) {
				rs.close();
			}
			if(ps!=null) {
				ps.close();
			}
			if(con!=null) {
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
src下的db.properties
dbDriver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///demo?useSSL=false&serverTimezone=UTC
username=root
password=root
//使用
//连接数据库
Connection con = JdbcUtils.getCon();
//释放资源
JdbcUtils.close(con, null, ps);

本文地址:https://blog.csdn.net/weixin_44255355/article/details/111998748

相关标签: MySQL jdbc