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开始
相关推荐
w-w0w-w5 小时前
SQL注入
网络·数据库·sql
tianyuanwo5 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
一条泥憨鱼5 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
IvorySQL6 小时前
深入 PostgreSQL WAL:从崩溃恢复到逻辑复制
数据库·postgresql
幽灵诶7 小时前
Mysql(基于测试的学习)
数据库·mysql
砚底藏山河7 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
宇宙无敌暴龙战士6668 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊8 小时前
MySQL 的四种隔离级别
java·数据库·mysql
say_fall8 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
共享家95279 小时前
408 操作系统第一章
服务器·数据库·windows