jdbc基础总结

JDBC

JDBC,java database connectivity 的简称,是一套java程序连接数据库的技术规范(API)。首先了解为什么要有这一套规范呢?因为我们有时候是需要连接不同的数据库,比如MySQL,Oracle等,而不同的数据库底层实现是不同的,那我们就需要写不同的连接程序,这样在维护起来非常的麻烦。而有了JDBC技术,我们就不需要关注具体是如何连接到数据库的,数据库厂商提供对应的数据库驱动就行了。

开发 JDBC需要java.sql和javax.sql包的支持,在javase中就有,因此不需要导包;例外还需要对应数据库驱动程序包,例如我需要连接mysql数据库,就需要导入mysql驱动包,可以到MySQL官网下载。开发一般有以下操作步骤:
1.加载驱动
2.建立连接
3.通过连接对象创建发送sql语句的执行对象
4.处理返回的结果集
5.关闭资源,这里有个原则:先创建的后关闭,后创建的先关闭

代码实现:

package jdbc;

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

public class Demo1 {

	
	private String url = "jdbc:mysql://localhost:3306/test";
	private String user = "root";
	private String password = "root";
	public static void main(String[] args) throws Exception {
		new Demo1().test();
	}
	public void test() throws Exception{
		//加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//根据URL得到连接对象
		Connection connection = DriverManager.getConnection(url, user, password);
		//获取发送sql语句的statement对象
		Statement statement = connection.createStatement();
		//执行
		ResultSet resultset = statement.executeQuery("select *from user");
		//处理结果集
		while(resultset.next()){
			String name = resultset.getString("name");
			String password = resultset.getString("password");
			System.out.println(name+":"+password);
		}
		//关闭资源
		resultset.close();
		statement.close();
		connection.close();
		
	}

}

可以查询到数据库:在这里插入图片描述

JDBC核心API

|- Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。
|- connect(url, properties): 连接数据库的方法。
url: 连接数据库的URL
URL语法: jdbc协议:数据库子协议://主机:端口/数据库
user: 数据库的用户名
password: 数据库用户密码
|- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序
|-registerDriver(driver) : 注册驱动类对象
|-Connection getConnection(url,user,password); 获取连接对象

		|- Connection接口: 表示java程序和数据库的连接对象。
				|- Statement createStatement() : 创建Statement对象
				|- PreparedStatement prepareStatement(String sql)  创建PreparedStatement对象
				|- CallableStatement prepareCall(String sql) 创建CallableStatement对象

		|- Statement接口: 用于执行静态的sql语句
				|- int executeUpdate(String sql)  : 执行静态的更新sql语句(DDL,DML)
				|- ResultSet executeQuery(String sql)  :执行的静态的查询sql语句(DQL)

			|-PreparedStatement接口:用于执行预编译sql语句
					|- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)
					|-ResultSet executeQuery()  : 执行预编译的查询sql语句(DQL)

				|-CallableStatement接口:用于执行存储过程的sql语句(call xxx)
						|-ResultSet executeQuery()  : 调用存储过程的方法


		|- ResultSet接口:用于封装查询出来的数据
				|- boolean next() : 将光标移动到下一行
				|-getXX() : 获取列的值

PreparedStatement用法:

public void test1(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection connection = DriverManager.getConnection(url, user, password);
			//通过占位符预编译
			PreparedStatement preparedStatement = connection.prepareStatement("insert into user values(?,?)");
			//设置参数
			preparedStatement.setString(1, "狗蛋");
			preparedStatement.setString(2, "34");
			//发送
			int result = preparedStatement.executeUpdate();
			if(result>0){
				System.out.println("成功插入数据到user表");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

还可以通过CallableStatement调用数据库的存储过程:

public void test2(){
		Connection connection = null;
		CallableStatement callableStatement = null;
		ResultSet resultset = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection(url, user, password);
			//获取CallableStatement对象
			callableStatement = connection.prepareCall("Call search");
			//调用存储过程
			resultset = callableStatement.executeQuery();
			while(resultset.next()){
				System.out.println(resultset.getString("name")+":"+resultset.getString("password"));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				resultset.close();
				callableStatement.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		

JDBC批处理

有时候需要向数据库发送大量的sql语句,应避免一条一条的发送,这样效率很低,我们可以使用批处理提高效率。

  1. 通过statement对象进行批处理,可以执行不同的sql语句:
    addBatch(String sql) :添加sql
    clearBatch(): 清空sql
    executeBatch() :执行批处理
//1.使用Statement对象批处理
			statement.addBatch("insert into user values('蛋蛋','1234')");
			statement.addBatch("update user set name='池子' where name='张三'");
			statement.executeBatch();
  1. 通过PreparedStatement对象可以发送参数不同的sql语句

JDBC事务管理

事务的概念:事务是指一组最小逻辑操作单元,由多个操作组成。
事务具有四个特性:

  • 原子性:指事务是一个不可分割的操作单元,里面的操作要么全部发生,要么全部发生。
  • 一致性:事务必须是数据库从一个一致性状态转换到另一个一致性状态。
  • 持久性:指事务一旦提交,那么对数据库的影响是永久的
  • 隔离性:事务之间是隔离的

我们在获取连接对象时是默认开启自动提交事务的,可以通过connection对象操作:
setAutoCommit(Boolean false):false表示设置手动提交事务,true表示自动提交事务
commit(): 提交事务
rollback() : 回滚事务
setPoint() :设置事务回滚到指定点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值