IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 详解JDBC -> 正文阅读

[大数据]详解JDBC

JDBC

Java数据库连接(Java Database Connectivity,简称JDBC)是Sun公司定义的一套操作所有关系型数据库的规则(接口)。数据库产商实现这套接口并且提供数据库驱动Jar包,我们就可以使用这套接口来操作数据库。

DriverManager:驱动管理对象

static synchronized void registerDriver(java.sql.Driver driver)注册驱动,告知程序该使用哪一个数据库驱动Jar包

static Connection getConnection(String url, String name, String password)参数url指的是数据库连接的路径;user指的是数据库用户名;password指的是密码

Connection:数据库连接对象

Statement createStatement()获取执行SQL的对象,在拼接SQL时会造成SQL注入的问题

PreparedStatement prepareStatement(String sql)获取执行SQL的对象,使用预编译的SQL,参数使用?作为占位符可以有效的防止SQL注入的问题

void setAutoCommit(boolean autoCommit)参数设置为false即开启事务(一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败)

void commit()当所有SQL都执行完提交事务

void rollback()在catch中回滚事务

Statement:执行SQL的对象

boolean execute(String sql)可以执行任意SQL,不推荐使用

int executeUpdate(String sql)用于执行insert、update、delete、create、alter、drop等语句,返回值为影响的行数,返回值>0则执行成功,反之则失败

ResultSet executeQuery(String sql)用于执行select语句

PreparedStatement:执行SQL的对象

void setXxx(int parameterIndex, xxx x)给?赋值,参数parameterIndex指的是?从1开始的位置编号;x指的是?的值

ResultSet:结果集对象

boolean next()游标向下移动一行并判断当前行是否为末尾行,是则返回false,反之返回true

xxx getXxx(String columnLabel)用于获取数据,Xxx指的是数据类型;xxx指的是列从1开始的编号;参数columnLabel指的是列名

CREATE DATABASE db000;
USE db000;

-- 账户表
CREATE TABLE account(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(11) NOT NULL,
    money INT
);

INSERT INTO account VALUES
(NULL, 'chongyi', 100),
(NULL, 'lianger', 200),
(NULL, 'zhansan', 300);
import java.sql.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        Connection conn = null;
        PreparedStatement prep = null;
        ResultSet rs = null;

        try {
            // 注册驱动,告诉程序该使用哪个数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 获取数据库连接对象
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db000", "root", "root");
            // 开启事务
            conn.setAutoCommit(false);
            // 获取执行SQL的对象PreparedStatement
            prep = conn.prepareStatement("update account set money = 300 where id = ?");
            // 给?赋值
            prep.setInt(1, 4);
            // 执行SQL并判断是否执行失败
            if (prep.executeUpdate() <= 0) {
                System.out.println("SQL执行失败!");
            }
            
            // 手动制造异常
            int i = 1 / 0;
            
            // 获取执行SQL的对象PreparedStatement
            prep = conn.prepareStatement("select * from account");
            // 执行SQL并获取结果集
            rs = prep.executeQuery();
            // 遍历输出结果集中的内容
            while (rs.next()) {
                System.out.println(rs.getInt(1) + " " + rs.getString("name") + " " + rs.getInt("money"));
            }
            // 提交事务
            conn.commit();
        } catch (Exception e) {
            // 回滚事务
            if (conn != null) {
                conn.rollback();
            }
            e.printStackTrace();
        } finally {
            // 释放资源
            if (rs != null) {
                rs.close();
            }
            if (prep != null) {
                prep.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
    }
}

------------------------------
SQL执行失败!

JDBCUtils

driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///db000
user=root
password=root
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static String driver;
    private static String url;
    private static String user;
    private static String password;

    static {
        try {
            // 创建Properties集合对象
            Properties prop = new Properties();
            // 加载配置文件
            prop.load(JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
            // 读取配置文件中的内容并赋值
            driver = prop.getProperty("driver");
            url = prop.getProperty("url");
            user = prop.getProperty("user");
            password = prop.getProperty("password");
            // 注册驱动
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
        获取连接
     */
    public static Connection getConnection() throws Exception {
        return DriverManager.getConnection(url, user, password);
    }

    /*
        释放资源
     */
    public static void close(Connection conn, PreparedStatement prep, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (prep != null) {
            try {
                prep.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:21:04  更:2021-10-09 16:23:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:18:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码