JAVA JDBC

一、什么是JDBC

​ JDBC全称是java数据库连接,它是一套用于执行SQL语句的JAVA API。应用程序可以通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作。

1.应用程序如何访问JDBC

​ 应用程序使用JDBC访问特定的数据库时,需要与不同的数据库驱动进行连接。由于不同数据库厂商提供的数据库驱动不同,因此,为了使应用程序与数据库真正建立连接,JDBC不仅需要提供烦那个文数据库的API,还需要封装与各种数据库服务器通信的细节。

2.JDBC的具体实现细节

  • JDBC驱动管理器
    • 负责注册特定的JDBC驱动器,主要通过java.sql.DriverManager类实现。
  • JDBC驱动器API
    • 有SUN公司负责制定,其中最主要的接口是java.sql.Driver接口
  • JDBC驱动器
    • 由数据库厂商创建,也称JDBC驱动程序。JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接,以及处理通信细节。

二、JDBC常用API

1.Driver接口

​ Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。需要注意的是,在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到哦项目的classpath中(这里是指MySQL驱动JAR包)。

过程:1、首先在java项目中创建一个lib文件夹,然后将该包放入。2、右击,选择Bulid Path的Configer Build Path然后在Libaries栏点击Add External JARs。3、将包导入即可创建。

2.DriverManager类

​ DirverManger类用于加载JDBC驱动并且创建与数据库的连接。在DriverManager类中,定义了两个比较重要的静态方法,如下所示:

方法名称功能描述
static void regiserDriver(Driver driver)该方法用于向DriverManager中注册给定的JDBC驱动程序
static Connection getConnection(String url,String user,String pwd)该方法用于建立和数据库的连接,并返回连接的Connection对象

3.Connection接口

​ Connection接口代表Java程序和数据库的连接,只有获得该连接对象后,才能访问数据库,并操作数据表。在Connection接口后,定义了一系列方法,其常用的方法如下所示。

方法名称功能描述
DatabaseMetaData getMetaData()该方法用于返回表示数据库的元数据的DatabaseMetaData对象
Statement createStatement()用于创建一个Statement对象来将SQL语句发送到数据库
PreparedStatement prepareStatement(String sql)用于创建一个PrepaerStatement对象来将参数化的SQL语句发送到数据库
CallbaleStatement prepareCall(String sql)用于创建一个CallableStatement对象来调用数据库存储过程

4.Statement接口

​ Statement接口用于执行静态的SQL语句,并返回一个结果对象。Statement接口对象可以通过Connection实例的createStatement()方法获得,该方法会把静态的SQL语句发送到数据库中编译执行,然后返回数据库的处理结果。

​ 在Statement接口中,提供了3种常用的SQL语句的方法,具体如下:

方法名称功能描述
boolean execute(String sql)用于执行各种SQL语句,该方法返回一个boolean类型的值,如果为TURE,表示所执行的SQL语句有查询结果,可以通过Statament的getResultSet()方法获得查询结果。
int executeUpdate(String sql)哟用于执行SQL中的inser、update和delete语句,该方法返回一个int,类型的值表示数据库中受该语句影响的记录条数
ResyltSet executeQuery(Stirng sql)用于执行sql中的select语句,该方法返回一个表示一个查询结果的RseultSet对象

5.PreparedStatament接口

​ PrepareStatament是Statement的子接口,用于执行预编译的SQL语句。改接口扩展了带有参数SQL语句的执行操作,应用改接口中的SQL语句可以使用占位符“?”来代替其参数,然后通过setXxx()方法为SQL语句的参数赋值。在PreparedStatement接口中,提供了一些常用的方法:

方法名称功能描述
int executeUpdate()
ResultSet executeQuery()
void setInt(int paraneterIndex,int x)
void setFloat(int parameterIndex,float x)
void setDate(int parameterIndex,Data x)
void setString(int parameterIndex,String x)

​ 在通过setXxx()方法为SQL语句中的参数赋值时,可以通过输入参数的已定义SQL类型兼容的方法。例如,如果参数就有SQL类型为Integer,那么应该使用setInt()方法,也可以通过setObject()方法设置多种类型的输入参数。

String sql = "INSERT INTO users(id,name,email) Values(?,?,?)";
PreparedStatement preStmt = conn.prepareStatement(sql);
preStmt.setInt(1,1);
preStmt.setString(2,"summer");
preStmt.setObject(3,"123@123.com");
preStmt.executeUpdate();

​ 需要注意的是,表中的setDate()方法可以设置日期内容,但参数Date的类型是java.sql.Date而不是java.util.Date。

6.ResultSet接口

​ ResultSet接口用于保存JDBC执行查询时返回的结果级,该结果集封装在一个逻辑表个中。在ResultSet接口内部有一个指向表格数据行的游标(或指针),RseultSer对象初始化时,游标在表格的第一行之前,调用next()方法可将游标移动到下一行。如果下一行没有数据,则返货false。在应用程序中经常使用next()方法作为while循环的条件来迭代RseultSet结果集。

三、实现第一个JDBC程序

通常,JDBC的使用可以按照以下几个步骤进行:

  1. 加载并注册数据库驱动
  2. 通过DriverManager获取数据库连接
  3. 通过Connection对象获取Statement对象
  4. 使用Statement执行SQL语句
  5. 操作ResultSet结果集
  6. 关闭连接,释放资源
package Example01;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/*
 * JDBC使用步骤
 * 1. 加载并注册数据库驱动
 * 2. 通过DriverManager获取数据库连接
 * 3. 通过Connection对象获取Statement对象
 * 4. 使用Statement执行SQL语句
 * 5. 操作ResultSet结果集
 * 6. 关闭连接,释放资源
 */

public class Example01 {
	public static void main(String[] args) throws SQLException {
		Connection coon = null;
		Statement stmt = null;
		ResultSet re = null;
		try {
			// 1. 加载并注册数据库驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//这里一般是com.mysql.jdbc.Driver,由于我使用的是8.0.20版本的驱动程序,因此如果版本低的需要改成没有cj的
			// 2. 通过DriverManager获取数据库连接
            //这里的?后面的是设置时间。
			String url = "jdbc:mysql://localhost/jdbc?serverTimezone=UTC&useSSL=false";
			String user = "root";
			String password = "root";
			coon = DriverManager.getConnection(url, user, password);
			// 3.通过Connection对象获取Statement对象
			stmt = coon.createStatement();
			
			//4. 使用Statement执行SQL语句
			String sql = "select * from users";
			re = stmt.executeQuery(sql);
			
			// 操作ResultSet结果集
			System.out.println("id  |  name  |  password  |  email  | birthday");
			while(re.next()) {
				//通过列名获取指定字段的值
				int id = re.getInt("id");
				String name = re.getString("name");
				String psd = re.getString("password");
				String email = re.getString("email");
				Date birthday = re.getDate("birthday");
				System.out.println(id + " | " + name + " | " + psd + " | " + email + " | " + birthday);
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			// 6. 关闭连接,释放资源
			if(coon != null) {
				coon.close();
				coon = null;
			}
			if(stmt != null) {
				stmt.close();
				stmt = null;
			}
			if(re != null) {
				re.close();
				re = null;
			}
		}
	}
}

注:要完成jdbc的连接必须要查看mysql版本与驱动版本是否适配,过高和过低都会引起不能正确连接。

四、PreparedStatement对象

​ PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在该对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要SQL语句再次编译去查询数据库,这样就大大提高了数据的访问效率。

package Example02;

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

/*
 * JDBC使用步骤
 * 1. 加载并注册数据库驱动
 * 2. 通过DriverManager获取数据库连接
 * 3. 通过Connection对象获取Statement对象。指定要执行的SQL语句
 * 4. 使用PreparedStatement执行SQL语句
 * 5. 操作ResultSet结果集
 * 6. 关闭连接,释放资源
 */
public class Example02 {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
			// 1. 加载并注册数据库驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			// 2. 通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost/jdbc?serverTimezone=UTC&useSSL=false";
			String user = "root";
			String password = "root";
			Connection coon = DriverManager.getConnection(url, user, password);
			
			// 3. 通过Connection对象获取Statement对象。指定要执行的SQL语句
			String sql = "INSERT INTO users(id,name,password,email,birthday) VALUE(?,?,?,?,?)";
			PreparedStatement preStmt = coon.prepareStatement(sql);
			//为sql语句中的参数进行赋值
			preStmt.setInt(1, 4);
			preStmt.setString(2, "zhangsan");
			preStmt.setString(3,"123456");
			preStmt.setString(4, "zhangsan@sina.com");
			preStmt.setString(5, "2000-01-20");
			
			// 4. 使用PreparedStatement执行SQL语句
			int count = preStmt.executeUpdate();
			System.out.println("数据改变了"+count+"条。");
			
			// 6.关闭连接,释放资源
			coon.close();
			preStmt.close();	
	}
}

五、ResultSet()接口

package Example03;

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

/*
 * ResultSet的使用
 */
public class Example03 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// 注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//得到与数据库连接的对象
		String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useSSL=false";
		String user = "root";
		String password = "root";
		Connection coon = DriverManager.getConnection(url, user, password);
		
		//得到用来执行SQL语句的对象
		String sql = "select * from users";
		PreparedStatement ppStmt = coon.prepareStatement(sql);
		
		//执行SQL语句
		ResultSet rs = ppStmt.executeQuery();
		
		//查询结果集ResultSet
		//将指针定位到结果集第二行数据
		rs.absolute(2);
		System.out.println("第二条数据的name值:"+rs.getString("name"));
		//将指针定位到结果集中的第一行数据的前面
		rs.beforeFirst();
		rs.next();//将指针向后移动
		System.out.println("第一条数据的name值:"+rs.getString("name"));
		//将指针定位到结果集中的最后一条数据之后
		rs.afterLast();
		rs.previous();//将指针向前移动一条
		System.out.println("最后一条数据的name的值:"+rs.getString("name"));
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值