jdbc执行流程(绝对经典)

Jdbc是Java操作数据库的一套接口;该接口由各大数据库厂商实现.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;

public class Demo2 {
	public void executeQueryTest() throws Exception {
		// 1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2. 获取连接
		Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/day04", "root", "123");
		// 3.创建数据库操作对象 statement(PreparedStatement)
		//-- 预编译:在用户传入参数之前直接对sql语句进行编译,确定语句结果
		//使用占位符?来占位,直接就可以编译
		String sql = "select count(*) from user1 where username = ? and password = ?;";
		PreparedStatement statement = connection.prepareStatement(sql);
		//-- 等sql语句编译完毕后确定了sql的语句结构之后,再传入用户的参数.
		statement.setString(1, "zhangsan");
		statement.setString(2, "123456");
		// 4.运行sql 语句
		//执行sql语句,sql已经在预编译时传递过,这时sql不用再传递
		ResultSet resultSet = statement.executeQuery();
		int count = 0;
		//5. 从结果集中获取数据
		if(resultSet.next()){
			count = resultSet.getInt(1);
		}
		
		//判断是否登录成功
		if(count == 0){
			System.out.println("登录失败");
		}else{
			System.out.println("登录成功");
		}
        //6. 释放资源
		resultSet.close();
		statement.close();
		connection.close();
	}
}

jdbc执行流程:

  1. 注册驱动
 Class.forName("com.mysql.jdbc.Driver");
  1. 获取连接
Connection connection =DriverManager.getConnection(url, username, password);

jdbc执行流程(绝对经典)_第1张图片
3. 创建数据库操作对象(statement)

//Statement负责运行SQL语句。
Statement statement = connection.createStatement();

Statement接口类还派生出两个接口类PreparedStatement和CallableStatement,这两个接口类对象为我们提供了更加强大的数据访问功能。

PreparedStatement能够对SQL语句进行预编译,解决sql注入问题,提高了安全性。

//-- 预编译:在用户传入参数之前直接对sql语句进行编译,确定语句结果
		//使用占位符?来占位,直接就可以编译
		String sql = "select count(*) from user1 where username = ? and password = ?;";
		PreparedStatement statement = connection.prepareStatement(sql);
		//-- 等sql语句编译完毕后确定了sql的语句结构之后,再传入用户的参数.
		statement.setString(1, username);
		statement.setString(2, password);
		//执行sql语句,sql已经在预编译时传递过,这时sql不用再传递
		ResultSet resultSet = statement.executeQuery();

而且预编译结果能够存储在PreparedStatement对象中。当多次运行SQL语句时能够提高效率。
作为Statement的子类,PreparedStatement继承了Statement的全部函数。

CallableStatement接口
CallableStatement类继承了PreparedStatement类,他主要用于运行SQL存储过程。

在JDBC中运行SQL存储过程须要转义。
JDBC API提供了一个SQL存储过程的转义语法:
{call[,, …]}

procedure-name:是所要运行的SQL存储过程的名字
[,, …]:是相相应的SQL存储过程所须要的參数

  1. 运行sql 语句
    jdbc接口技术中statement中的3个执行sql的方法

总结:3个方法今后着重使用executeUpdate和executeQuery

boolean execute(String sql)
执行给定的 SQL 语句,该语句可能返回多个结果。
true:返回的是一个结果集resultSet,类似于executeQuery
false:返回修改的数量类似于executeUpdate

int executeUpdate(String sql)
执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
返回的值是:sql语句所影响的行数

ResultSet executeQuery(String sql)
执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
总结:executeQuery只能执行SQL select (查询)语句

  1. 从结果集中获取数据
    ResultSet对象负责保存Statement运行后所产生的查询结果。
      结果集ResultSet是通过游标来操作的。
      游标就是一个可控制的、能够指向随意一条记录的指针。
      有了这个指针我们就能轻易地指出我们要对结果集中的哪一条记录进行改动、删除,或者要在哪一条记录之前插入数据。一个结果集对象中仅仅包括一个游标。

另外,借助ResultSetMetaData ,可以将数据表的结构信息都查出来。
  ResultSetMetaData rsmd= resultSet.getMetaData();

  1. 释放资源.
    数据库资源不关闭,其占用的内存不会被释放,徒耗资源,影响系统。

mybatis内部运行原理

你可能感兴趣的:(jdbc执行流程(绝对经典))