JDBC数据库访问技术的基本使用

本文介绍了JDBC的基本使用,包括JDBC下载安装、规范概述,重点讲解了MySQL环境下JDBC的使用步骤,如注册驱动、创建连接和语句对象。同时,文章通过示例展示了执行SELECT查询的方法,并讨论了如何使用prepareStatement对象防止SQL注入,确保数据库操作的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC数据库访问技术的基本使用

官网介绍: JDBC Concepts1

  • JDBC
    Java DataBase Connectivity

JDBC下载安装

下载入口12 (需要先下载下载器:installer…)
下载入口23 (Maven下载,或者点jar包下载)

JDBC介绍

  • 是一个规范,不是一个实现

  • 数据库厂商根据JDBC,实现自家的驱动Driver
    如:mysql驱动com.mysql.cj.jdbc.Driver

(MySQL)JDBC使用:

导入专用的jar包
在这里插入图片描述

注册驱动、创建连接、创建语句对象、

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

// Notice, do not import com.mysql.cj.jdbc.*
// or you will have problems!

public class LoadDriver {
    public static void main(String[] args) {
        try {
         Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
   		// 用了静态代码块创建Driver()对象。
   		// 静态代码块,在类初次被加载的时候执行且仅会被执行一次
 /*  @file: com.mysql.cj.jdbc.Driver  (Driver.class)
 	...
	  static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
    ...
*/
        } catch (Exception ex) {
            // handle the error
        }
    }
}

在驱动程序已在DriverManager注册后,

可以通过调用DriverManager.getConnection()获取连接到特定数据库的连接实例:

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

Connection conn = null;
...
try {
    conn =
       DriverManager.getConnection("jdbc:mysql://localhost/test?" +
                                   "user=Ading&password=Adingable");
    /**
    *url必须加时区参数: serverTimezone=Asia/Shanghai
    *characterEncoding=utf8防止中文乱码
    */
} catch (SQLException ex) {
    // handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
}

Connection连接后,它可用于创建StatementPreparedStatement 对象,以及检索关于数据库的元数据。

例子:执行SELECT

Statement对象允许执行基本的SQL查询并通过ResultSet类检索结果.

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

// assume that conn is an already created JDBC connection

Statement stmt = null;
ResultSet rs = null;

try {
    stmt = conn.createStatement();
    rs = stmt.executeQuery("SELECT knowledges,money FROM mind");

    // or alternatively, if you don't know ahead of time that
    // the query will be a SELECT...

    if (stmt.execute("SELECT knowledges,money FROM mind")) {
        rs = stmt.getResultSet();
    }

    // Now do something with the ResultSet ....
}
catch (SQLException ex){
    // handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
}
finally {
    // it is a good idea to release
    // resources in a finally{} block
    // in reverse-order of their creation   //递归的关闭(.close())
    // if they are no-longer needed

    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException sqlEx) { } // ignore

        rs = null;
    }

    if (stmt != null) {
        try {
            stmt.close();
        } catch (SQLException sqlEx) { } // ignore

        stmt = null;
    }
}

对于execute() 和executeQuery()

如果事先不知道SQL语句是SELECT还是UPDATE/INSERT
那么可以使用execute(String SQL)方法。
如果SQL查询是一个SELECT语句,该方法将返回true
如果是一个UPDATEINSERTDELETE语句, 则返回 false


如果语句是一个SELECT查询,可以通过调用getResultSet()方法检索结果。
如果该语句是一个UPDATEINSERTDELETE语句,
可以通过在statement实例上调用getUpdateCount()来检索受影响的行数。

prepareStatement对象防止sql注入

  • 是一个特殊的Statement对象,
  • 把用户非法输入的单引号用\反斜杠做了转义( [SQL注入]4)
String sql = "update user set username=? where id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "Ading");   // 可见,下标从1开始,不是0
preparedStatement.setInt(2, 007);

  1. JDBC官网介绍:https://dev.mysql.com/doc/connector-j/8.0/en/ ↩︎

  2. https://dev.mysql.com/downloads/connector/j/ ↩︎

  3. https://mvnrepository.com/artifact/mysql/mysql-connector-java ↩︎

  4. 所谓SQL注入,指的是通过把SQL命令插入到Web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器,达到执行恶意SQL命令的目的。避免了类似select * from user where name=‘aa’ and password=‘bb’ or 1=1的sql注入问题的发生。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

adingable

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值