0

0

jdbc链接数据库的教程(代码示例)

不言

不言

发布时间:2019-02-19 13:41:26

|

2362人浏览过

|

来源于博客园

转载

本篇文章给大家带来的内容是关于jdbc链接数据库的教程(代码示例),有需要的朋友可以参考一下,希望对你有所帮助。

JDBC简介

JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。

JDBC编程步骤

(1)加载驱动程序:

  下载驱动包 : http://dev.mysql.com/downloads/connector/j/

解压,得到 jar文件。将该文件复制到Java工程目录Java Resources/Libraries/ 下,→ buildpath 。

(2)获得数据库连接

(3)创建Statement对象:

(4)向数据库发送SQL命令

Glimmer Ai
Glimmer Ai

基于GPT-3和DALL·E2的PPT制作工具

下载

(5)处理数据库的返回结果(ResultSet类)

package com.baidu.emp.jdbcTest;

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

import com.mysql.jdbc.Driver;
/**
 * 开始使用jdbc连接数据库
 * @author Admin
 *
 */
public class Test001 {

    public static void main(String[] args) throws Exception {

        /**
         * 加载驱动
         */
        // 方法一:
        /*
         * import java.sql.DriverManager; import com.mysql.jdbc.Driver;
         */
        // Driver driver = new Driver();
        // DriverManager.registerDriver(driver);

        // 方法二:(推荐使用)
        Class.forName("com.mysql.jdbc.Driver");

        /**
         * 创建链接
         */
        String url = "jdbc:mysql://localhost:3306/testjdbc";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);

        // 创建statement对象
        Statement statement = connection.createStatement();

        /**
         * 执行SQL,获取结果集
         */
        String sql = "select * from test01";
        ResultSet result = statement.executeQuery(sql);

        // 遍历结果集
        while (result.next()) {
            String name = result.getString("name");
            int id = result.getInt("id");
            System.out.println(name + "\t" + id);
        }

        /**
         * 关闭链接,释放资源
         */
        result.close();
        statement.close();
        connection.close();
    }
}

防止SQL注入改用prepareStatement

package com.boya.emp.jdbcTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
 * SQL注入,使用prepareStatement对象进行预编译
 * @author Admin
 *
 */
public class Test002 {

    public static void main(String[] args) throws Exception {

        /**
         * 加载驱动
         */
        Class.forName("com.mysql.jdbc.Driver");

        /**
         * 创建链接
         */
        String url = "jdbc:mysql://localhost:3306/testjdbc";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);

        // 写SQL 
        String sql = "select * from test01 where id = ?";
        //创建statement对象,预编译
        PreparedStatement statement = connection.prepareStatement(sql);
        //设置参数
        statement.setInt(1, 2);
        /**
         * 执行SQL,获取结果集
         */
        ResultSet result = statement.executeQuery();

        // 遍历结果集
        while (result.next()) {
            String name = result.getString("name");
            int id = result.getInt("id");
            System.out.println(name + "\t" + id);
        }

        /**
         * 关闭链接,释放资源
         */
        result.close();
        statement.close();
        connection.close();
    }
}

进行代码优化,设置配置文件,工具类,实现增删该查

 增加配置文件方便修改数据库,用户登录。。。

jdbc.properties(配置文件名)

driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testjdbc
userName=root
password=root

注意写配置文件时中间不可以有空格,引号之类的

工具类:增强了代码的复用性

package com.baidu.emp.utils;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import org.junit.Test;



public class JdbcUtils {

    static String driverClassName;
    static String url;
    static String user;
    static String password;

    static {
        // 创建配置文件对象
        Properties properties = new Properties();
        // 加载配置文件输入流
        InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        // 重新加载配置文件
        try {
            properties.load(inputStream);
            // 获取配置文件的值
            driverClassName = properties.getProperty("driverName");
            url = properties.getProperty("url");
            user = properties.getProperty("userName");
            password = properties.getProperty("password");
            Class.forName(driverClassName);

        } catch (Exception e) {
            // 抛出异常
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取连接
     */
    @Test
    public void testName() throws Exception {
        
        System.out.println(driverClassName);
    }
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            // 抛出异常
            throw new RuntimeException(e);
        }
        return connection;
    }

    /**
     * 关闭链接,释放资源
     */
    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {

        try {
            if (resultSet != null) {
                resultSet.close();
            }
            resultSet = null; // 垃圾及时清除
            //注意,不要弄成死循环
            close(connection, statement);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

    /**
     * 增删改释放资源
     */
    public static void close(Connection connection, PreparedStatement statement) {

        try {
            if (connection != null) {
                connection.close();
            }
                
            connection = null;
            if (statement != null) {
                statement.close();
            }
            statement = null;

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

}

测试增删改查:

package com.baidu.emp.jdbcTest;

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

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.baidu.emp.utils.JdbcUtils;

/**
 * 使用jdbcUtils连接数据库进行增删改查
 * 
 * @author Admin
 *
 */
public class Test003 {

    // 初始化值
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet result = null;

    @Before
    public void start() throws Exception {
        // 创建链接
        connection = JdbcUtils.getConnection();
        System.out.println("创建链接");
    }

    @After
    public void end() throws Exception {
        // 关闭链接
        JdbcUtils.close(connection, statement, result);
        System.out.println("关闭链接");
    }
    
    /**
     *插入数据
     * @throws Exception
     */
    @Test
    public void add() throws Exception {
        String sql = "insert into test01 values(null,?)";
        statement = connection.prepareStatement(sql);
        statement.setString(1, "李四");
        int result = statement.executeUpdate();
        if (result!=0) {
            System.out.println("添加成功");
        }
    }
    /**
     * 删除数据
     * @throws Exception
     */
    @Test
    public void del() throws Exception {
        String sql = "delete from test01 where id =?";
        statement = connection.prepareStatement(sql);
        statement.setInt(1,3);
        int result = statement.executeUpdate();
        if (result!=0) {
            System.out.println("删除成功");
        }
    }
    /**
     * 修改数据
     * @throws Exception
     */
    @Test
    public void change() throws Exception {
        String sql = "update test01 set name = ? where id = ?";
        statement = connection.prepareStatement(sql);
        statement.setString(1, "张飞");
        statement.setInt(2, 2);
        int result = statement.executeUpdate();
        if (result!=0) {
            System.out.println("修改成功");
        }
    }
    
    /**
     * 查询全部数据
     * @throws Exception
     */
    @Test
    public void findAll() throws Exception {
        String sql = "select id , name from test01";
        statement = connection.prepareStatement(sql);
        result = statement.executeQuery();
        if (result.next()) {
            System.out.println("查询成功");
        }
    }
    
    /**
     * 条件查询数据
     * @throws Exception
     */
    @Test
    public void findOne() throws Exception {
        String sql = "select id , name from test01 where id = ?";
        statement = connection.prepareStatement(sql);
        statement.setInt(1, 2);
        result = statement.executeQuery();
        if (result.next()) {
            System.out.println("查询成功");
        }
    }

}

存在错误望各位同仁指出。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Servlet基础教程
Servlet基础教程

共24课时 | 19.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号