JDBC的概念以及添加数据

本文介绍了JDBC的概念,作为Java与SQL交互的接口,它旨在允许独立于特定数据库系统的应用程序开发。内容包括JDBC的设计目的、组成,以及如何加载JDBC驱动并使用它来插入数据库数据。通过示例展示了如何使用工具类进行数据库连接和数据插入操作。
摘要由CSDN通过智能技术生成

JDBC概念

Java DataBase Connectivity(Java数据库连接技术)
它是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口(API-它是一种可用于执行SQL语句的JavaAPI,即由一组用Java语言编写的类与接口所组成)

JDBC设计的目的

它是一种规范,设计出来的主要目的是为了让各个数据库开发商为Java程序员提供标准的数据访问类和接口,使得独立于DBMS的Java应用程序的开发成为可能(数据库改变,驱动程序跟着改变,但是应用程序不变)
Java设计规范接口,各大数据库产商遵守规范实现,Java程序员不需要考虑实现细节,只需要调用API即可
在这里插入图片描述
JDBC组成

JDBC API (统一的应用接口)
JDBC Driver Manager(驱动程序管理器)
JDBC 数据库驱动程序 驱动本质就是一个Java类,这个类实现了JavaAPI定义的接口
一般情况下,在应用程序中进行数据库连接,调用JDBC接口,首先要将特定厂商的JDBC驱动实现加载到系统内存中,然后供系统使用
在这里插入图片描述

这里所谓的驱动,其实就是实现了java.sql.Driver接口的类。如oracle的驱动类是 oracle.jdbc.driver.OracleDriver.class(此类可以在oracle提供的JDBC jar包中找到),此类实现了java.sql.Driver接口。由于驱动本质上还是一个class,将驱动加载到内存和加载普通的class原理是一样的:使用Class.forName(“driverName”)。以下是将常用的数据库驱动加载到内存中的代码:

//加载Oracle数据库驱动
	Class.forName("oracle.jdbc.driver.OracleDriver");
			
	//加载SQL Server数据库驱动
	Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			
	//加载MySQL 数据库驱动
	Class.forName("com.mysql.jdbc.Driver");

	static {
		Timestamp localTimestamp = Timestamp.valueOf("2000-01-01 00:00:00.0");
		try {
			if (defaultDriver == null) {
				//创建一个OracleDriver实例,然后注册到DriverManager中
                                		Driver defaultDriver = new OracleDriver();
				DriverManager.registerDriver(defaultDriver);
			}
 
		} catch (RuntimeException localRuntimeException) {
		} catch (SQLException localSQLException) {
	}

mysql的jdbc的连接

package com.sxt.oracle;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/*
 * useSSL=true:程序与数据库之间进行数据的交互传输的过程中需要加密的方式
 * useUnicode=true&characterEncoding=UTF-8:程序与数据库之间互相编码和解码
 */
public class TestMysq0l {
	
	//程序需要数据库的连接的地址的信息
	public static String URL = "jdbc:mysql://localhost:3306/demo?useSSL=true&useUnicode=true&characterEncoding=UTF-8";
	
	//驱动的全名称
	public static String DRIVER = "com.mysql.jdbc.Driver";
	
	//用户
	public static String USER = "root";
	
	//密码
	public static String PASSWORD = "1234";

	//静态代码块加载驱动信息
	static {

		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		try {
			Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
			System.out.println(conn);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

用程序给数据库插入一条数据

package com.sxt.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TestMysql02 {
	//程序需要连接的数据库的地址信息
	public static String URL = "jdbc:mysql://localhost:3306/demo?useSSL=true&useUnicode=true&characterEncoding=UTF-8";
	
	//连接驱动的全名称
	public static String DRIVER = "com.mysql.jdbc.Driver";
	
	//用户名
	public static String USER = "root";
	
	//密码
	public static String PASSWORD = "1234";
	
	//加载驱动信息
	static {

		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		try {
			// 取得连接对象
			Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
			
			// 定义出sql语句
			String sql = "INSERT INTO emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)"
					+ "VALUES(1002,'李四','总裁',7788,NOW(),19600.00,3000.00,10)";
			
			// 通过连接对象创建发送sql语句的对象
			PreparedStatement pst = conn.prepareStatement(sql);
			
			// 发送sql语句
			int row = pst.executeUpdate();
			System.out.println("插入了" + row + "行数据");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

定义取得和关闭连接的工具类,即是将取得连接和关闭连接的代码封装到一个工具类中

public class ConnectionUtils {
	private static String URL = "jdbc:mysql://localhost:3306/demo?useSSL=true&useUnicode=true&characterEncoding=UTF-8";
	private static String DRIVER = "com.mysql.jdbc.Driver";
	private static String USER = "root";
	private static String PASSWORD = "1234";
	static {
		try {
			Class.forName(DRIVER);// 将"com.mysql.jdbc.Driver"类的Class对象加载到运行时程序区
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 取得连接对象
	 * 
	 * @return
	 */
	public static Connection getConnection() {

		try {
			return DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 关闭连接
	 * 
	 * @param conn 通过外界传入连接对象进行关闭连接
	 */
	public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

通过连接工具类插入数据的程序示例如下:

package com.sxt.connectionutils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Statement;
/*
 * 增加数据:
 * 取得数据库连接,连接的类型是Connection类型,如果要操作数据还需使用该对象取得另一个对象发送sql语句的对象,
 * 要取得这个发送sql语句的对象需要使用带Connection的一些方法
 * 
 */
public class TestMysql2 {
	public static void main(String[] args) {
		try {
			if (insertEmp()) {
				System.out.println("插入数据成功");
			} else {
				System.out.println("插入数据失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 增加雇员的信息的方法
	 * @return  如果插入雇员的数据成功返回true,否则返回false
	 * @throws SQLException
	 */
	public static boolean insertEmp() throws SQLException {
		
		// 取得连接对象
		Connection conn = ConnectionUtils.getConnection();
		
		// 定义出sql语句
		String sql = "INSERT INTO emp(ename,job,mgr,hiredate,sal,comm,deptno)"
				+ "VALUES('王五','总经理',7789,NOW(),13000.00,5000.00,10)";
		
		//取得发送sql语句的对象
		PreparedStatement pst = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
		
		// 执行sql语句
		int row = pst.executeUpdate();
		
		//取得自动增长的主键值
		ResultSet rst = pst.getGeneratedKeys();
		if (rst.next()) {
			System.out.println(rst.getInt(1));
			
		}
		ConnectionUtils.close(conn);
		return row > 0;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值