首页 > 数据库 >JDBC数据库连接技术基础及核心API

JDBC数据库连接技术基础及核心API

时间:2024-08-10 13:52:01浏览次数:17  
标签:语句 JDBC 数据库 resultSet API emp SQL

目录

JDBC的概念

JDBC的搭建步骤

JDBC的代码实现

步骤框架

代码实现

核心API

注册驱动(jdk6.0后可自动注册,无需编写代码)

Connection(连接数据库 )

Statement(用于执行SQL语句,会被SQL注入攻击,后被PreparedStatement替代 )

PreparedStatement(可以防止SQL注入,全面替代Statement)

ResultSet(查询返回的结果)

常见错误

资源的管理

SQL语句错误

SQL语句未设置参数问题

数据库用户名或密码错误问题

通信异常


JDBC的概念

JDBC(Java Database Connectivity )意为java数据库连接,及使用java代码实现对数据库的连接与管理操作。

Java提供接口规范,由各个数据库厂商提供接口的实现,厂商提供的实现类封装成jar文件,也就是我们俗称的数据库驱动jar包。

JDBC的搭建步骤

  1. 准备数据库。

  2. 官网下载数据库连接驱动jar包。https://downloads.mysql.com/archives/c-j/

  3. 创建Java项目,在项目下创建lib文件夹,将下载的驱动jar包复制到文件夹里。

  4. 选中lib文件夹右键->Add as Library,与项目集成。

  5. 编写代码

JDBC的代码实现

步骤框架

1.注册驱动

2.获取数据库连接

3.创建Statement对象

4.编写SQL语句并执行,获取结果

5.处理结果

6.释放资源(以先开后关原则)

代码实现

package com.atguigu;

import java.sql.*;

public class JdbcQuick {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
      
        //2.获取数据库连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/atguigu", "root", "atguigu");

        //3.创建Statement对象
        PreparedStatement preparedStatement = connection.prepareStatement("select emp_id,emp_name,emp_salary,emp_age from t_emp");

        //4.编写SQL语句并执行,获取结果
        ResultSet resultSet = preparedStatement.executeQuery();


        //5.处理结果
        while (resultSet.next()) {
            int empId = resultSet.getInt("emp_id");
            String empName = resultSet.getString("emp_name");
            String empSalary = resultSet.getString("emp_salary");
            int empAge = resultSet.getInt("emp_age");
            System.out.println(empId + "\t" + empName + "\t" + empSalary + "\t" + empAge);
        }

        //6.释放资源(先开后关原则)
        resultSet.close();
        preparedStatement.close();
        connection.close();

    }
}

核心API

注册驱动(jdk6.0后可自动注册,无需编写代码)

Class.forName("com.mysql.cj.jdbc.Driver");

注册驱动程序,目的是使得 JDBC API 能够识别并与特定的数据库进行交互。

从JDK6开始,不再需要显式地调用 Class.forName() 来加载 JDBC 驱动程序,只要在类路径中集成了对应的jar文件,会自动在初始化时注册驱动程序。

Connection(连接数据库 )

用于建立与数据库的通信通道,每当创建一次Connection对象时即为连接了一次数据库。

在连接数据库时需要指定数据库URL、用户名和密码。

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/atguigu", "root", "atguigu");
//"jdbc:mysql://数据库URL:端口号/数据库名称", "用户名", "密码"

Statement(用于执行SQL语句,会被SQL注入攻击,后被PreparedStatement替代 )

Statement 接口用于执行 SQL 语句并与数据库进行交互。它是 JDBC API 中的一个重要接口。通过 Statement 对象,可以向数据库发送 SQL 语句并获取执行结果。

执行查询语句时,使用executeQuery()方法;执行其他语句时,使用executeUpdate()方法。

Statement statement = connection.createStatement();
String sql = "select emp_id,emp_name,emp_salary,emp_age from t_emp WHERE emp_name = '康师傅'";
statement.executeQuery(sql);

PreparedStatement(可以防止SQL注入,全面替代Statement)

预编译SQL语句 :PreparedStatementStatement 接口的子接口,用于执行预编译的 SQL 查询,及在SQL语句会被提前固定。

防止SQL注入: PreparedStatement 支持参数化查询,将数据作为参数传递到SQL语句中,采用?占位符的方式,将传入的参数用一对单引号包裹起来'',无论传递什么都作为值。以?先在sql语句中占位,后将?中的内容转译再执行SQL语句,有效防止传入关键字或值导致SQL注入问题。

性能提升:PreparedStatement是预编译SQL语句,同一SQL语句多次执行的情况下,可以复用,不必每次重新编译和解析。

在执行SQL语句前应先使用setInt为SQL语句中的?占位符赋值。

PreparedStatement preparedStatement = connection.prepareStatement("select emp_id,emp_name,emp_salary,emp_age from t_emp where emp_id = ?");
preparedStatement.setInt(1,1);
preparedStatement.executeQuery();

ResultSet(查询返回的结果)

ResultSet是 JDBC API 中的一个接口,用于表示从数据库中执行查询语句所返回的结果集。它提供了一种用于遍历和访问查询结果的方式。

遍历结果:ResultSet可以使用 next() 方法将游标移动到结果集的下一行,逐行遍历数据库查询的结果,返回值为boolean类型,true代表有下一行结果,false则代表没有。

获取单列结果:可以通过getXxx的方法获取单列的数据,该方法为重载方法,支持索引和列名进行获取。

ResultSet resultSet = preparedStatement.executeQuery();

        while (resultSet.next()){
            int empId = resultSet.getInt("emp_id");
            String empName = resultSet.getString("emp_name");
            String empSalary = resultSet.getString("emp_salary");
            int empAge = resultSet.getInt("emp_age");
            System.out.println(empId+"\t"+empName+"\t"+empSalary+"\t"+empAge);
        }

常见错误

资源的管理

在使用JDBC的相关资源时,比如Connection、PreparedStatement、ResultSet,使用完毕后,要及时关闭这些资源以释放数据库服务器资源和避免内存泄漏是很重要的。

SQL语句错误

java.sql.SQLSyntaxErrorException:SQL语句错误异常,一般有几种可能:

  1. SQL语句有错误,检查SQL语句!建议SQL语句在SQL工具中测试后再复制到Java程序中!

  2. 连接数据库的URL中,数据库名称编写错误,也会报该异常!

SQL语句未设置参数问题

java.sql.SQLException:No value specified for parameter 1

在使用预编译SQL语句时,如果有?占位符,要为每一个占位符赋值,否则报该错误!

数据库用户名或密码错误问题

连接数据库时,如果用户名或密码输入错误,也会报SQLException,容易混淆!所以一定要看清楚异常后面的原因描述

通信异常

在连接数据库的URL中,如果IP或端口写错了,会报如下异常:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

标签:语句,JDBC,数据库,resultSet,API,emp,SQL
From: https://blog.csdn.net/qq_33697759/article/details/141060291

相关文章

  • 基于SpringBoot的疗养院管理系统源码数据库
    摘 要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装疗养院管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,疗养院管理系统的......
  • 为什么要用数据库管理系统?5个你不得不知道的理由
    你是否曾经想过,为什么几乎所有的企业和组织都在使用数据库管理系统(DBMS)?为什么不直接使用文件系统来存储和管理数据呢?如果你有这样的疑问,那么这篇文章正是为你而写。在接下来的内容中,我们将深入探讨使用数据库管理系统的5个关键原因,这些原因将彻底改变你对数据管理的......
  • Midjourney Imagine API 申请及使用
    MidjourneyImagineAPI申请及使用Midjourney是一款非常强大的AI绘图工具,只要输入关键字,就能在短短一两分钟生成十分精美的图像。Midjourney以其出色的绘图能力在业界独树一帜,如今,Midjourney早已在各个行业和领域广泛应用,其影响力愈发显著。本文档主要介绍Midjourn......
  • JDBC详细使用
    JDBC​JDBC是一种标准,一种规则,主要作用是使用java语言操作数据库的​JDBC这个标准中有很多的接口,接口中有很多方法JDBC开发步骤以及详解1.准备1.导入jar包mysql-connector-java-8.0.25.jar2.四大核心对象DriverManager类:注册驱动->我们需要知道我们操作的......
  • 高德地图 JS API2.0(入门级使用教程)
    高德地图JSAPI2.0入门使用教程准备工作注册高德地图开发者账号进入高德开放平台首页使用手机号注册,然后完成身份认证。创建应用[应用管理]-->[创建新的应用]–>[填写应用名称以及应用类型]-->[添加],然后获取到安全密钥和key即可。过程如下图:阅读参考文档......
  • 接口自动化-YAPI+GITLAB+JENKINS+飞书畅想与实践
    起因工作中遇到期望做接口自动化,之前公司跟着团队做过python+request搭建的自动化框架,逐步完善框架本身,与接口测试用例本身,都是需要代码编写能力较强,能保证框架本身没问题,也要保证接口用例本身没问题。领导期望接口自动化能做到闭环,从代码产生开始到接口测试结果结束,都可以......
  • sql数据库:日期函数
    sql数据库:日期函数日期函数CURDATE()/CURRENT_DATE()返回当前日期SELECTCURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMPCURRENT_TIME()/CURTIME()返回当前时间CURRENT_TIMESTAMP()返回当前日期和时间DATEDIFF(d1,d2)计算日期d1->d2之间相隔的天数SELECTDATE......
  • mysql数据库:字符串函数
    mysql数据库:字符串函数mysql数据库:字符串函数concat(str1,str2,…strn)连接str1,str2,…,strn为一个字符串selectconcat('abc','def')replace(str,a,b)用字符串b替换str中所有出现的字符串ainsert(str,x,y,instr)将字符串str,从索引x开始,y个字符长度的子串替换为i......
  • 微信小程序上传图片链接到MySQL数据库
    我们首先要了解调用微信的api来上传图片他会在本地缓存来生成一个图片链接只能在你上传图片的设备打开当你清缓存之后这个链接也就失效了这个链接发给别人别人看不到图片相当于在同一网域局也“无”法打开这时候我们要借助外力例如引入vantWeapp组件库这个 VantWea......
  • SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
    问题场景SQLServer事务复制在正常创建发布和订阅之后,logreaderJob启动异常,出现“Theprocesscouldnotexecute‘sp_replcmds’onxxx”等异常日志导致代理服务无法正常启动。 异常现象参考下图,异常日志如下Errormessages:Theprocesscouldnotexecute‘sp_re......