JDBC的基本概念及简单使用

JDBC

概念

1.Java + DataBase + Connectivity:Java连接数据库的技术。
2.是一套由Java代码编写开发数据库应用程序的标准(接口)。
3.对程序员而言,JDBC就是一套访问数据库的API,能够实现对数据库的增删改查。
4.对于数据库厂商而言,JDBC是一套底层的实现接口的模型。

工作原理

1.Java application:应用程序
2.JDBC API:Java程序与各种不同的数据库交互的标准接口。
1)Connection
2)Statement
3)ResultSet
3.JDBC Driver Manager:驱动程序管理器

JDBC API

1.DriverManager类:装载驱动程序,并为创建的数据库连接提供的文件。
2.Connection接口:负责连接数据库。
3.Statement接口:由Connection产生,负责执行SQL语句。
4.ResultSet接口:保存和处理Statement处理后的结果(查询)
5.PreparedStatement接口:属于Statement接口的子接口,负责执行SQL语句,性能和安全性比较高,可读性维护性好。

JDBC操作步骤

1.加载驱动:calss.forName();将给定的jdbc驱动类加载到jvm;
2.建立数据库连接:url数据库服务地址(协议名称+数据库服务器IP:端口号/数据库名称),user,password
3.发送SQL语句
4.执行SQL语句
5.返回处理结果
6.释放连接

常见包

1.PO:持久化对象,一个PO就是数据库中的一条记录
2.VO:视图层对象,一个VO对象对应一个界面的所有数据
3.POJO:简单的Java对象,只有私有属性及公开的get、set方法,只能装载对象。
4.DTO:数据传输对象,只传需要的数据字段。

非托管资源

需要手动关闭的资源.close();

代码实例

1.初始硬编码
package com.hpe.jdbc;

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

/*
 * 存在的问题:
 * 1.通过配置文件加载数据:违背开闭原则
 * 2.频繁打开关闭连接:数据库连接池(c3p0,dbcp)
 */
public class TestJDBC {
	public static void main(String[] args) {
		Connection connection = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 2.创建连接
			String url = "jdbc:mysql://localhost:3306/students";
			String user = "root";
			String password = "1234";
			connection = DriverManager.getConnection(url, user, password);
			// 3.编写SQL语句
			//String stuId = " '' OR 1=1 --";//存在SQL注入攻击危险
			int stuId = 1;
			//String sql = "SELECT stuId,stuName FROM student WHERE stuId="+stuId;
			String sql = "SELECT stuId,stuName,stuAge,stuAddress FROM student WHERE stuId=?";
			// 将编写好的SQL语句发送给数据库服务器执行SQL语句
			//Statement statement = connection.createStatement();
			//ResultSet resultSet = statement.executeQuery(sql);
			//System.out.println(resultSet.next());
			// 4.预编译对象,将编写好的SQL语句发送给数据库服务器
			ps = connection.prepareStatement(sql);
			// 5.填充占位符,索引从1开始
			ps.setInt(1, stuId);
			// 6.执行SQL语句,通过预编译对象调用executeQuery方法执行SQL语句
			rs = ps.executeQuery();
			// 7.判断结果集中有没有数据
			if(rs.next()) {
				// 8.获取结果集中的数据
				// 获取具体数据getXXX(String columLable)或者getInt(int columnIndex)
				int id = rs.getInt(1);
				String stuName = rs.getString("stuName");
				int age = rs.getInt("stuAge");
				String address = rs.getString("stuAddress");
				System.out.println("编号:"+id+"姓名:"+stuName+"地址:"+address+"年龄:"+age);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 9.关闭连接:最早打开,最晚关闭
			try {
				rs.close();
				ps.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

2.修正问题后的编码

1)先写连接数据库的必要参数,单独再src下新建的File类型文件,名为db.properties,代码如下:

jdbc.url=jdbc:mysql://localhost:3306/students?characterEncoding=utf-8
jdbc.user=root
jdbc.password=1234
jdbc.driver=com.mysql.jdbc.Driver

注意上面代码变量与值之间不能加空格、不能加引号。
2)编写获取连接,释放连接工具类:

package com.hpe.util;
/**
 * 类描述:数据库操作工具类
 * 作者: chuliju 
 * 创建日期:2020年3月23日
 * 修改人:
 * 修改日期:
 * 修改内容:
 * 版本号: 1.0.0
 */

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
	// 数据库的url地址
	private static String url;
	// 用户名
	private static String user;
	// 密码
	private static String password;
	// 驱动
	private static String driver;
	// 加载驱动,只执行一次
	static {
		// 读取配置文件
		InputStream is = DBUtil.class.getResourceAsStream("/db.properties");
		// 从输入流中加载数据到集合中
		Properties properties = new Properties();
		try {
			properties.load(is);
			// 读取用户名、密码、url地址,驱动
			url = properties.getProperty("jdbc.url");
			user = properties.getProperty("jdbc.user");
			password = properties.getProperty("jdbc.password");
			driver = properties.getProperty("jdbc.driver");
			// 加载驱动
			Class.forName(driver);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 方法描述:获取连接
	 * @return 连接对象
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 方法描述:释放资源
	 * @param rs 结果集
	 * @param ps 预编译对象
	 * @param conn 连接对象
	 */
	public static void releaseDB(ResultSet rs,PreparedStatement ps,
			Connection conn) {
		try {
			if(rs != null) {
				rs.close();
			}
			if(ps != null) {
				ps.close();
			}
			if(conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章