JDBC,Java连接数据库

下载 JDBC

https://mvnrepository.com/

img

创建项目,然后创建一个目录并将下载好的 jar 包拷贝进去

img

选择 Add as Library,让这个目录能被项目识别

img

连接数据库服务器

在 JDBC 里面,使用 DataSource 类来描述数据库的位置

import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBCTest {
    public static void main(String[] args) throws SQLException {
        // 使用 DataSource 描述 MySQL 服务器的位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("233333");
        // 和数据库建立连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }
}
// 输出:com.mysql.cj.jdbc.ConnectionImpl@1e88b3c

DataSource 是一个 interface,不能直接实例化,而 MysqlDataSource 则是实现类

mydb 是要连接的数据库名;characterEncoding=utf8,设置客户端连接服务器使用的字符集;useSSL=false 不启用加密

最后还要设置好用户名和密码

然后建立连接,打印出对象说明连接成功了

对数据库进行操作

上述代码完成了后续的构造 SQL 语句,这里以插入一条数据为例,还需要借助 PreparedStatement 对象,然后执行 SQL,最后断开连接,释放资源

import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBCTest {
    public static void main(String[] args) throws SQLException {
        // 使用 DataSource 描述 MySQL 服务器的位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        // 和数据库建立连接
        Connection connection = dataSource.getConnection();
        //System.out.println(connection);
        // 构造 SQL 语句
        String sql = "insert into student values(1, '张三')";
        PreparedStatement statement = connection.prepareStatement(sql);
        // 执行 SQL 语句
        // insert, update, delete 都是通过 executeUpdate 来执行,select 通过 executeQuery 来执行
        // 返回影响的行数
        int n = statement.executeUpdate();
        System.out.println("n = " + n);
        // 断开连接,释放资源,后创建的先释放
        statement.close();
        connection.close();
    }
}
// 输出:n = 1

很多时候我们的 SQL 语句不能是写死的,一种最简单的方式的就是通过拼接字符串来构造 SQL 语句,如:

String sql = "insert into student values(" + num + ", '" + name + "')";

这样写会带来两个问题,一是代码丑陋,引号太多不易读,二是无法防止SQL注入

正确的写法

String sql = "insert into student values(?, ?)";

使用 ? 作为占位符,后续使用 statement 对象进行替换。

statement.setInt(1, num); // 将第1个?替换成num
statement.setString(2, name); // 将第2个?替换成name
System.out.println(statement); // 打印statement
// 输出:com.mysql.cj.jdbc.ClientPreparedStatement: insert into student values(2, 'lisi')
// 说明拼接的没问题

select 操作

import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBCSelect {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        Connection connection = dataSource.getConnection();

        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        // select 使用 executeQuery,返回一个 ResultSet
        ResultSet resultSet = statement.executeQuery();

        // 遍历 ResultSet
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println(id + ": " + name);
        }
        // 释放
        resultSet.close();
        statement.close();
        connection.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世真

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值