JDBC编程

一、下载驱动包

中央仓库:Maven 存储库: mysql >> mysql-connector-java >> 5.1.49 (mvnrepository.com)

驱动包版本要与MySQL版本相匹配

二、将jar引入项目中

1、创建一个lib包,并把下载的jar复制到当前项目目录中。

2、把这个目录标记成库。

三、编写代码

固定流程:

java 复制代码
om.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Demo {
    public static void main(String[] args) throws SQLException {
        //1、创建一个DataSource(javax.sql)
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("0616");

        //2、建立和数据库服务器之间的连接,连接好后才能进行后续的 请求-响应 交互。
        Connection connection = dataSource.getConnection();

        //3、构造sql,代码中的 sql 不需要写;
        String sql = "insert into student values(1, '张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.1、(增删改)把sql发给服务器,返回值是一个整数,表示影响到的行数
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        //4.2、(查)
            ResultSet resultSet = statement.executeQuery(); //ResultSet表示结果集合

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

            //释放资源
            resultSet.close();
            statement.close();
            connection.close();

        //5、执行完毕后,关闭连接,释放资源,先创建的后释放
        statement.close();
        connection.close();
    }
}

问题一:为什么要这样写?

java 复制代码
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl();

这种写法的初心是为了让 MysqlDataSource 这个类名不要扩散到代码的其他地方。后续如果要修改数据库为别的数据库,代码改动小。(耦合性降低)

java 复制代码
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setUrl();

实际上这种写法也是可以的,简单直观。

问题二:URL

java 复制代码
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useSSL=false"

不用背,用的时候直接复制即可。

问题三:如何让用户输入一些信息插入呢?

java 复制代码
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号:");
int id = scanner.nextInt();
System.out.println("请输入姓名:");
String name = scanner.next();
    ...
//3、构造sql,
String sql = "insert into student values(?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
//想添加什么类型的数据,就set什么类型,第一个数字对应上面的第几个?,从1开始
相关推荐
hao_wujing16 分钟前
攻击模型的恶意行为检测
网络·数据库·php
秃头摸鱼侠1 小时前
MySQL查询语句(续)
数据库·mysql
MuYiLuck1 小时前
【redis实战篇】第八天
数据库·redis·缓存
睡觉待开机1 小时前
6. MySQL基本查询
数据库·mysql
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩2 小时前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift
Ares-Wang2 小时前
负载均衡LB》》HAproxy
运维·数据库·负载均衡
AI.NET 极客圈2 小时前
.NET 原生驾驭 AI 新基建实战系列(四):Qdrant ── 实时高效的向量搜索利器
数据库·人工智能·.net