1. JDBC基础笔记

1.JDBC概述

1.1 JDBC的概念

  • JDBC: Java Database Connectivity sun公司为了简化和统一java连接数据库,定义的一套规范。
  • JDBC和数据库驱动的关系:类似接口和接口的实现类, 通过驱动程序,java应用程序可与数据库进行通信。

1.2 为什么要使用JDBC

  1. 没有JDBC如下
    在这里插入图片描述
  2. 有JDBC
    在这里插入图片描述

2. 第一个jdbc程序

2.1 数据库

create table user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	nickname varchar(20)
);

INSERT INTO `USER` VALUES(null,'zhangsan','123','张三');
INSERT INTO `USER` VALUES(null,'lisi','1234','李四');
INSERT INTO `USER` VALUES(null,'wangwu','12345','王五');

2.2 代码实现

package com.freedom.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;

public class JdbcDemo {

	@Test
	public void testQuery() throws ClassNotFoundException, SQLException {
		// 1. 注册驱动驱动
		// 加载字节码文件,获取的字节码对象, 将字节码文件加载到jvm中
		Class.forName("com.mysql.jdbc.Driver");

		// 2.建立连接
		String url = "jdbc:mysql://localhost:3306/javaweb";
		String user = "root";
		String password = "258369";
		Connection connection = DriverManager.getConnection(url, user, password);

		// 3.获取一个执行SQL的对象
		Statement statement = connection.createStatement();

		// 4.执行sql
		String sql = "select * from user";
		ResultSet rs = statement.executeQuery(sql);

		// 5.获取结果处理结果
		while (rs.next()) {
			System.out.println(rs.getObject(1));
			System.out.println(rs.getObject(2));
			System.out.println(rs.getObject(3));
			System.out.println(rs.getObject(4));
			System.out.println("===");
		}

		// 6.关闭资源
		rs.close();
		statement.close();
		connection.close();
	}

}

3. JDBC API详解

在这里插入图片描述

3.1 java.sql.Drivermanager

作用: 主要是用于加载驱动,并且创建和数据库的连接

  • java.sql.DriverManager.registerDriver(new Driver()),这种方式会两次new Driver();
  • Class.forName(“com.mysql.jdbc.Driver”);推荐这种写法
  • getConnection(String url, String user, String password) ;与数据库建立连接

3.2 java.sql.Connection接口

接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。

  • createStatement() ;创建执行sql语句对象
  • prepareStatement(String sql) ;创建预编译执行sql语句的对象

3.3 java.sql.Statement接口

接口的实现在数据库驱动中,操作sql语句,并返回相应结果对象。

  • ResultSet executeQuery(String sql) 根据查询语句返回结果集。只能执行select语句。
  • int executeUpdate(String sql) 根据执行的DML(insert update delete)语句,返回受影响的行数。
  • boolean execute(String sql) 此方法可以执行任意sql语句。返回boolean值,表示是否返回的是ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false。

3.4 java.sql.ResultSet接口

封装结果集,查询结果表的对象

  • 提供一个游标,默认游标指向结果集第一行之前。
  • 调用一次next(),游标向下移动一行。
  • 提供一些getXXX方法。XXX代表的是数据类型

ResultSet接口常用API

  • boolean next() ;将光标从当前位置向下移动一行。
  • XXX getXXX(int columnIndex) : 根据列的序号获取XXX类型的值,列的序号从1开始。
  • XXX getXXX(String columnName) : 根据列名去获取XXX类型的值。
  • void close()关闭ResultSet 对象。

4. SQL注入问题解决:preparedStatement

package com.freedom.jdbc;

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

import org.junit.Test;

public class JdbcDemo {
	@Test
	public void testQuery() throws ClassNotFoundException, SQLException {
		// 1. 注册驱动驱动
		// 加载字节码文件,获取的字节码对象, 将字节码文件加载到jvm中
		Class.forName("com.mysql.jdbc.Driver");

		// 2.建立连接
		String url = "jdbc:mysql://localhost:3306/javaweb";
		String user = "root";
		String password = "258369";
		Connection connection = DriverManager.getConnection(url, user, password);

		// 3.预编译sql
		String sql = "select * from user where username=? and password=?";
		PreparedStatement prepareStatement = connection.prepareStatement(sql);
		String username = "zhangsan";
		String password1 = "123";
		prepareStatement.setString(1, username);
		prepareStatement.setString(2, password1);
		
		// 4.执行
		ResultSet rs = prepareStatement.executeQuery();
		
		// 5.获取结果处理结果
		while (rs.next()) {
			System.out.println(rs.getObject(1));
			System.out.println(rs.getObject(2));
			System.out.println(rs.getObject(3));
			System.out.println(rs.getObject(4));
			System.out.println("===");
		}

		// 6.关闭资源
		rs.close();
		prepareStatement.close();
		connection.close();
	}
}

发布了97 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39530821/article/details/103039113