三十一 JDBC

三十一 使用JDBC操作数据

一 理解JDBC原理

Java连接数据库

它提供了一套接口 用于接入不同的数据库 基本上主流的数据库都支持 它的接口名称为
Java DataBase Connectivity JDBC 数据库连接

Java应用程序通过JDBC来连接数据库时 其实就是在Java平台准备一套接口 ,然后不同的数据库厂商提供这些实现类(驱动),然后再通过Java提供的取得管理程序对驱动进行验证及安装 ,再然后我们就可以正常使用了
在这里插入图片描述

public class TestJDBC {

	public static void main(String[] args) {
		Connection conn = null;
		Statement statement = null;
		ResultSet rs = null;
		try {
			// 1.使用DriverManager管理驱动
			// registerDriver 注册/加载驱动
			// Driver是一个接口  它需要寻找对应的实现类(数据库厂商提供的驱动类们)
			Driver driver = new com.mysql.jdbc.Driver();
			DriverManager.registerDriver(driver);
			
			// 2.建立和数据库的连接 Connection
			// 类似于http://192.168.12.138:8080/各级资源目录
			// 数据库地址:协议://主机地址/数据库名
			String url = "jdbc:mysql://127.0.0.1:3306/myschool";
			// 数据库用户名
			String user = "root";
			// 数据库用户密码
			String password = "root";
			conn = DriverManager.getConnection(url, user, password);
			
			// 3.使用Statement执行SQL语句
			statement = conn.createStatement();
			String sql = "select * from student";
			rs = statement.executeQuery(sql);
			
			// 4.对返回的数据结果集ResultSet进行解析
			// 这个结果集可以将其看作是一个二维表 
			// boolean next() 移动指针 判断是否有下一行数据
			while(rs.next()) {
				// int getInt(int columnIndex) 根据列索引取列的数据
				// int getInt(String columnLabel) 根据列名取列的数据
				int id = rs.getInt(1);
				String stuName = rs.getString("stuName");
				String address = rs.getString("address");
				System.out.println(id+" -- "+stuName+" -- "+address);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			// 5.关流
			// 先开的后关
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

DriverManager驱动管理器

它的作用是用来帮助我们进行驱动注册/加载的!最终实现驱动的管理!


// 在MySQL提供的驱动Driver类中,它自己有一个静态代码块,当Driver类被加载的时候,它会自动执行注册驱动代码
// 所以意味着我们只需要保证这个类被加载 就可以确保驱动会被正常管理起来了!Class.forName("com.mysql.jdbc.Driver");

//
// Register ourselves with the DriverManager
//
static {
    try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException("Can't register driver!");
    }
}

二 掌握JDBC的使用步骤

在这里插入图片描述DriverManager 驱动管理器

它的作用是用来帮助我们进行驱动注册/加载最终实现驱动的管理

1.使用DriverManager管理系统

2.建立和数据的连接Connection

3.使用Statement执行SQL语句

4.对返回的数据结果集ResultSet进行解析

5.释放资源

三 掌握JDBC的增删改

增加

/**
	 * 增加数据
	 */
	@Test
	void testInsert(){
		Connection conn = null;
		Statement statement = null;
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.建立连接 Connection        DriverManager加载驱动
			conn = DriverManager.getConnection("jdbc:mysql:///work", "root", "root");
			
			//3.创建执行者执行sql语句 Statement
			statement = conn.createStatement();
			
			//4.编写sql语句并执行
			String sql = "insert into t_student(ID,NAME) values(12,'小明')";
			//影响行数
			int row = statement.executeUpdate(sql);
			
			//5.解析结果
			System.out.println("影响行数为:" + row);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	}

修改

/**
	 * 修改数据
	 */
	@Test
	void testUpdate(){
		Connection conn = null;
		Statement statement = null;
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.建立连接 Connection        DriverManager加载驱动
			conn = DriverManager.getConnection("jdbc:mysql:///work", "root", "root");
			
			//3.创建执行者执行sql语句 Statement
			statement = conn.createStatement();
			
			//4.编写sql语句并执行
			String sql = "update t_student set NAME = '小红' where ID = 12";
			//影响行数
			int row = statement.executeUpdate(sql);
			
			//5.解析结果
			System.out.println("影响行数为:" + row);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	}

删除


	/**
	 * 删除数据
	 */
	@Test
	void testDelect(){
		Connection conn = null;
		Statement statement = null;
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.建立连接 Connection        DriverManager加载驱动
			conn = DriverManager.getConnection("jdbc:mysql:///work", "root", "root");
			
			//3.创建执行者执行sql语句 Statement
			statement = conn.createStatement();
			
			//4.编写sql语句并执行
			String sql = "delete from t_student where ID = 12";
			//影响行数
			int row = statement.executeUpdate(sql);
			
			//5.解析结果
			System.out.println("影响行数为:" + row);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	}

掌握PreparedStatement接口的使用-特别的执行SQL语句的接口

public class TestLogin2 {

	public static void main(String[] args) {

		Scanner input = new Scanner(System.in);
		System.out.print("请输入您的用户名:");
		String username = input.next();
		System.out.print("请输入您的密码:");
		String password = input.next();

		// 查询数据库
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 2.建立连接
			conn = DriverManager.getConnection("jdbc:mysql:///kgcnews", "root", "root");
			// 3.编写SQL语句  将参数设立为占位符
			// statement = conn.createStatement(); 
			String sql = "select * from news_user where userName = ? and password = ?";
			// 4.创建语句执行者
			ps = conn.prepareStatement(sql);
			// 5.给占位符赋值
			ps.setString(1, username);
			ps.setString(2, password);
			// 6.执行SQL语句
			rs = ps.executeQuery();
			// 6.解析结果集
			if (rs.next()) {
				System.out.println("登录成功!");
			} else {
				System.out.println("登录失败!");
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 先开的后关
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

猜你喜欢

转载自blog.csdn.net/L097_/article/details/90952258