首页 > 其他分享 >JDBC学习

JDBC学习

时间:2024-10-24 22:23:52浏览次数:8  
标签:JDBC java String 学习 connection sql import password

JDBC 核心组件
DriverManager: 管理数据库驱动程序,处理数据库连接的创建。
Connection: 代表与数据库的连接会话。
Statement: 用于执行静态 SQL 语句并返回结果。
PreparedStatement: 预编译的 SQL 语句,可以执行动态 SQL 并提高性能。
CallableStatement: 用于调用数据库中的存储过程。
ResultSet: 包含查询结果的数据集。
2. 建立数据库连接
要建立数据库连接,首先需要加载数据库驱动程序,然后使用 DriverManager 获取连接对象:

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

public class JDBCDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";

    try {
        Connection connection = DriverManager.getConnection(url, username, password);
        System.out.println("Connected to the database!");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}
3. 执行 SQL 查询
使用 Statement 或 PreparedStatement 执行 SQL 查询:

使用 Statement:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

public class JDBCDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";

    try (Connection connection = DriverManager.getConnection(url, username, password);
         Statement statement = connection.createStatement();
         ResultSet resultSet = statement.executeQuery("SELECT * FROM users")) {

        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("ID: " + id + ", Name: " + name);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}
使用 PreparedStatement:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
String sql = "SELECT * FROM users WHERE id = ?";

    try (Connection connection = DriverManager.getConnection(url, username, password);
         PreparedStatement preparedStatement = connection.prepareStatement(sql)) {

        preparedStatement.setInt(1, 1);
        ResultSet resultSet = preparedStatement.executeQuery();

        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("ID: " + id + ", Name: " + name);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}
4. 执行更新操作
使用 Statement 或 PreparedStatement 执行插入、更新或删除操作:

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

public class JDBCDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";

    try (Connection connection = DriverManager.getConnection(url, username, password);
         PreparedStatement preparedStatement = connection.prepareStatement(sql)) {

        preparedStatement.setString(1, "John Doe");
        preparedStatement.setString(2, "[email protected]");
        int rowsInserted = preparedStatement.executeUpdate();

        System.out.println(rowsInserted + " rows inserted.");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}
5. 事务管理
JDBC 支持事务管理,通过 Connection 对象的 setAutoCommit(boolean autoCommit) 方法可以控制是否自动提交事务。使用 commit() 和 rollback() 方法可以手动提交或回滚事务。

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

public class JDBCDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";

    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        connection.setAutoCommit(false); // 关闭自动提交

        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setString(1, "John Doe");
            preparedStatement.setString(2, "[email protected]");
            int rowsInserted = preparedStatement.executeUpdate();

            if (rowsInserted > 0) {
                connection.commit(); // 提交事务
                System.out.println("Transaction committed.");
            } else {
                connection.rollback(); // 回滚事务
                System.out.println("Transaction rolled back.");
            }
        } catch (SQLException e) {
            connection.rollback(); // 回滚事务
            System.out.println("Transaction rolled back due to error.");
            e.printStackTrace();
        } finally {
            connection.setAutoCommit(true); // 恢复自动提交
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}

  1. 连接池
    直接使用 DriverManager 创建连接成本较高,通常使用连接池(如 HikariCP, Apache DBCP)来管理数据库连接。

标签:JDBC,java,String,学习,connection,sql,import,password
From: https://www.cnblogs.com/wjhfree/p/18501451

相关文章

  • wireshark学习笔记
    wireshark学习笔记从一道面试题开始ApingB理论分析注意:通过MAC判断--1单播,2组播,3广播,手动修改MAC时不允许修改成组播或广播。十六进制0x0b转为二进制时为11A需要判断B是否和它是一个网段A通过自己的掩码判断自己的网段是192.168.26.0/24,用自己的掩码与B主机的IP地址......
  • [学习笔记] 贪心
    写在前面参考《算法竞赛进阶指南》贪心部分(在[“基础算法”](?)那一部分)。(有些是直接抄的这本书上的。)XK给我们讲课的[课件](?)。2024.10.23模拟赛T2及其题解。(目前是这些)之后应该还有今年暑假集训时的贪心PPT。关于本文中“贪心”的含义本文所言的贪心是“广义”的,即不一......
  • 【强化学习简明】台大李宏毅强化学习2021版课程笔记
    本文是基于台大李宏毅教授2021年的强化学习课程制作的课程笔记,旨在用通俗易懂的语言对强化学习进行介绍,搬运至bilibili的课程视频链接:视频链接https://www.bilibili.com/video/BV18r421j7S4/?spm_id_from=333.337.search-card.all.click&vd_source=22173a6fa342ecf648e799cd933......
  • 《深度学习》YOLO系列v2 网路构架解析
    目录一、YOLO系列v21、YOLOv1与v2对比2、BatchNorm批次归一化3、YOLOv2更大的分辨率4、YOLOv2网络结构1)YOLOv2网络结构2)传统的卷积神经网络系统3)YOLOv2结构局限性5、YOLOv2聚类提取先验框1)k-means聚类2)YOLOv2聚类流程3)YOLOv2聚类框个数由来6、YOLOv2An......
  • 《深度学习》YOLO v1网络架构 、损失值、NMS极大值抑制
    目录一、Yolo系列v11、核心思想2、示例3、流程图解析二、YOLO系列v1损失函数1、位置误差2、置信度误差3、类别概率损失三、NMS非极大值抑制1、概念2、步骤四、YOLOv1优缺点1、优点1)速度快2)端到端3)多尺度预测4)网络结构简单2、缺点1)对小目标检测效果差2)每个......
  • 学习高校课程-软件设计模式-建造者模式和原型模式(lec4)
    Builder:ProblemExample:acomplexobjectthatrequireslaborious,step-by-stepinitializationofmanyfieldsandnestedobjects一个复杂对象的创建通常由多个部分组成,这些部分的组合经常变化Builder:SolutionExtracttheobjectconstructioncodeoutofitsown......
  • CTF学习(10):Misc(LSB)
    1.有提示得知本题考点为LSB(隐写方法的一种?)--->查看详细信息/010editor(无果)--->foremost无法分离2.使用stegsolve发现该图片在redgreenblueplane0时上方会出现黑白条纹3.使用dataextract功能(数据提取)将发现异常的几个通道选择后提取图片(这种题目的做题思路是从......
  • 从零学习大模型(一)-----GPT3(上)
    GPT-3(GenerativePre-trainedTransformer3)是一种大型自回归语言模型,由OpenAI团队训练和发布。GPT-3拥有1750亿个参数,是当时发布的最大的非稀疏(non-sparse)语言模型之一。其参数规模是前一代模型(如GPT-2)的10倍以上。GPT-3的目标是通过大规模的参数量和广泛的预训练来实现对......
  • 数据库操作的学习1
    今天我们来学习数据库新更加复杂的操作,使我们在使用增,删,改,查时更加灵活和轻松还能减少代码的重复性。咱们先来了解一下查询的基本形式:select后面加列名from后面加表名where后面加查询条件表达式(过滤条件)orderby后面加排序的列明(后面写ASC升序或DESC降序)(排序条件)行数......
  • 日语学习《红宝书新日本语能力考试N1·N2·N3·N4·N5文字词汇(详解+练习)》PDF分享
    ​​《红宝书:新日本语能力考试文字词汇(详解+练习)》系列丛书自出版以来,广受好评,成为很多参加能力考试的学习者的必备用书。《红宝书:新日本语能力考试文字词汇(详解+练习)》按新日语能力考试指南和新真题编写,收录词汇量达6300多个:涵盖必须掌握的重点词汇3324个,涵盖重要补充词汇300......