JDBC(Java Database Connectivity )

何为JDBC?

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

如何连接?

在这里插入图片描述

常用接口

Driver接口
1.Driver接口由数据库厂家提供,对于Java开发者而言,只需要使用Driver接口就可以了。
2. 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。

- 驱动:就是各个厂商实现Sun公司提出的JDBC接口。即对Connection等接口的实现类的jar文件。

- 装载mysql驱动:Class.forName(“com.mysql.jdbc.Driver”);

- 装载oracle驱动:Class.forName(“com.jdbc.driver.OracleDriver”);

DriverManager接口

- DriverManager接口是JDBC的管理层,作用于用户和驱动程序之间。

- DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动之间建立连接。

Connection接口

- Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。

- DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上

-Mysql

Connection con = DriverManager.getConnection(“jdbc:mysql://host:port/database”, “user”, “password”);

-Oracle

Connection con = DriverManager.getConnection(“jdbc:oracle:thin@host:port/database”, “user”, “password”);

Statement接口

- 用于执行静态SQL语句并返回它所生成结果的对象。

- 三种Statement类:

- Statement:

由createStatement创建,用于发送简单的SQL语句(不带参数)

- PreparedStatement:

- 继承自Statement接口,有preparedStatement创建,用于发送含有一个或者多个输入参数的SQL语句。PreparedStatement对象

比Statement对象效率更高,并且是防止SQL注入。我们一般都使用PreparedStatement。

- CallableStatement:

- 继承自preparedStatement。由方法prePareCall创建,用于调用存储过程。

- 常用的Statement方法

- execute():运行语句,返回是否有结果集。

- executeQuery():运行select语句,返回ResultSet结果节

- executeUpdate():运行insert/update/delete操作,返回更新的行数。

具体操作(数据库以oracle为例)

  1. 在lib目录下导入相应jar包并且构建路径(Build Path)在这里插入图片描述
    2.四个步骤
    加载驱动
    建立连接
    得到连接并创建编译对象
    执行sql语句

    eg1: 向数据库某表中添加一条记录(增删改类似)
    
package jdbc;

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

public class insertdemo {
	public static void main(String[] args) {
		//声明对象
		Connection conn =null;
		PreparedStatement pstmt = null;
		//oracle数据的驱动
		final String driver ="oracle.jdbc.driver.OracleDriver";
		//oracle数据的地址
		final String url ="jdbc:oracle:thin:@localhost:1521:orcl";
		//sql语句
		final String sql ="insert into  dept(deptno,dname,loc) values(?,?,?)";
		
		try {
			//	1.把数据库连接的驱动加载到java虚拟机中
			Class.forName(driver);
			//  2. 得到连接
			conn = DriverManager.getConnection(url,"scott","root");
			// 3.通过连接对象创建编译对象
			pstmt= conn.prepareStatement(sql);
			// 4.对sql语句中的?进行赋值
			pstmt.setInt(1, 60);
			pstmt.setString(2, "boss");
			pstmt.setString(3, "zhengzhou");
			// 5.通过编译对象向数据库发出sql指令
			int i =pstmt.executeUpdate();
			System.out.println(i);
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
			//关闭
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

eg2:查询表中的记录
package jdbc;

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

public class selectdemo2 {
	public static void main(String[] args) {
		Connection conn =null;
		PreparedStatement ps= null;
		ResultSet rs =null;
		final String driver ="oracle.jdbc.driver.OracleDriver";
		final String url ="jdbc:oracle:thin:@localhost:1521:orcl";
		String sql ="select * from dept where dname = ? and deptno = ?";
		try {
			// 加载驱动
			Class.forName(driver);
			//建立连接
			conn = DriverManager.getConnection(url,"scott","root");
			//得到sql语句
			ps= conn.prepareStatement(sql);
			ps.setString(1, "SALES");
			ps.setInt(2, 30);
			//此时rs表示所查询的全部记录
			rs =ps.executeQuery();
			// 遍历rs中存在所有记录 rs.next() 指的是下一条记录
			while(rs.next()) {
				System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值