• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

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

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

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

    正确的写法

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

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

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

    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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    【PHPWord】如何解决PHPWord的输出checkbox复选框并设置checked已勾选
    内容、文档和流程数字化如何支持精益原则
    玄子Share- IDEA 2023 SpringBoot 热部署
    esbuild中文文档-Input配置项(Input - Entry points、Loader、Stdin)
    flink standalone部署模式
    系统报错“由于找不到vcomp140.dll无法继续执行代码”的解决方案
    Java内存马学习--Filter内存马——前置概念
    vue 改变路由(URL)参数不刷新页面
    小视频APP源码选择指南:挑选最适合你的开发框架
    我的创作纪念日,3周年总结
  • 原文地址:https://blog.csdn.net/CegghnnoR/article/details/134483906