【MySQL】JDBC编程

本文介绍了Java使用JDBC进行数据库编程的基本步骤,包括设置数据库驱动、创建数据源、连接数据库、构造SQL语句、执行SQL以及释放资源。详细讲解了如何通过MysqlDataSource创建数据源,使用PreparedStatement构造和执行SQL语句,以及处理查询结果。示例代码清晰地展示了整个过程。
摘要由CSDN通过智能技术生成

目录

数据库编程条件

Java的数据库编程——JDBC

JDBC原理

使用JDBC

准备驱动包并添加到项目中

1.创建数据源

2.连接数据库 

3.构造SQL语句

4.执行SQL语句

5.释放资源


数据库编程条件

1.编程语言:比如Java,C++等

2.数据库:比如MySQL,Oracle,SQL Server等

3.数据库驱动包:不同语言提供相应的数据库驱动包。

MySQL给Java提供的驱动包是mysql-connector-java

Oracle给Java提供的驱动包是ojdbc

Java的数据库编程——JDBC

JDBC:Java Database Connectivity,Java数据库连接。

它是Java执行SQL语句的API,是Java中数据库连接的规范。

这个API由一些类和接口组成,它是为开发人员操作数据库所提供的,可以为多种关系数据库提供统一访问。

简单理解为有了一个万能翻译,可以把你的话翻译成任何国家的人都可以听懂的话。

JDBC原理


使用JDBC

准备驱动包并添加到项目中

驱动包下载:点击该连接,下载MySQL为Java提供的驱动包Maven Repository: mysql » mysql-connector-java (mvnrepository.com)https://mvnrepository.com/artifact/mysql/mysql-connector-java

下载时需要注意数据库版本要和下载的驱动包版本一致(比如MySQL版本是5.X),那么驱动包的版本也应该是(5.X)。至于是 . 几无所谓。

 保留即可。现在已经下载好了驱动包。


 

 

找到刚才下载的驱动包,复制一下,粘贴到 lib 这里

一直ok,add即可。

然后一直ok即可,最后是这样就是成功了。


1.创建数据源

——通过DataSourse类创建

——这是为了连接数据库做铺垫

        // 1.创建DataSource数据源——描述了数据库在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("数据库密码");
--  127.0.0.1:  是本机地址(因为我的数据库是在我自己的电脑上)
--  3306  是数据库端口号
--  test  是数据库名
--  utf8  是数据库的字符集
--  root  一般安装的时候如果不修改,都是root
--  密码  是进入数据库的密码

2.连接数据库 

——通过Connection类来获取物理连接

——也可以不用通过数据源来获取连接,用反射也可以直接获取连接,但不建议使用

反射连接数据库

// 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法
区,并执行该类的静态方法块、静态属性。
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection =
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false", "用户名", "密码");

通过数据源获取连接 

        // 2.连接数据库        
        Connection connection = dataSource.getConnection();
-- 这里的Connection是java.mysql包下面的
-- getConnection()有个受查异常要抛出,我们直接throws交个jvm来处理

 


3.构造SQL语句

——String+PreparedStatement或Statement 来描述SQL的情况

——通过connection中的prepareStatement()方法直接创建出一个sql对象。

        // 3.构造SQL语句
        // (一)不需要额外信息的直接写完整的SQL语句即可
        
            // 建表
        String sql1 = "create table user (id int, name varchar(20))";
        PreparedStatement statement1 = connection.prepareStatement(sql1);
        
            // 查询
        String sql4 = "select * from user where id = 1";
        PreparedStatement statement4 = connection.prepareStatement(sql4);

        // (二)灵活一点还可以从控制台来输入一些信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户编号:");
        int id = scanner.nextInt();
        System.out.println("请输入用户姓名:");
        String name = scanner.next();

//        // 1.通过字符串拼接构造成一条完成的SQL语句
//          String sql2 = "insert into user values(" + id + ", '" + name + "')";
//          PreparedStatement statement2 = connection.prepareStatement(sql2);
//
//        //上面的拼接比较丑,不易理解,而且还不安全。
//
          // 2.一般通过占位符替换来写,? 的下标从 1 开始计算
        String sql3 = "insert into user values(?, ?)";
        PreparedStatement statement3 = connection.prepareStatement(sql3);
        // 第一个 ? 就是输入的id值
        statement3.setInt(1, id);
        // 第二个 ? 就是输入的name值
        statement3.setString(2, name);

        //查看一下刚才的SQL语句
        System.out.println("SQL:" + statement3);

4.执行SQL语句

——通过上面connection调用方法创造出来的实例来调用其中的执行sql的方法

——其中查询比较特殊,需要返回执行后的结果集。此时需要用ResultSet这个类创建一个实例来         接受结果集。

        // 4.执行SQL语句
        // 对于增删改,使用executeUpdate
        // 对于查,使用executeQuery
        // ret 是影响了多少行数据
        // resultSet 是结果集

        // 对于 增 操作
        int ret1 = statement1.executeUpdate();
        System.out.println("ret = " + ret1);

//        int ret2 = statement1.executeUpdate();
//        System.out.println("ret = " + ret2);

        int ret3 = statement3.executeUpdate();
        System.out.println("ret = " + ret3);

        // 对于 查 操作
        ResultSet resultSet =  statement4.executeQuery();
        // 假设,结果集的下标从 1 开始,那么开始遍历位置则是 0
        // 调用了一下next方法后,遍历位置就到了 1 ,依次增加
        // 最后到了结尾的时候就返回false
        // 想要获取结果集里的结果,用相应的getXX("列名")方法
        while (resultSet.next()) {
            int x = resultSet.getInt("id");
            String y = resultSet.getString("name");
            System.out.println(x + ":" + y);
        }

5.释放资源

        // 5.释放资源
        result.close();
        statement1.close();
//        statement2.close();
        statement3.close();
        statement4.close();
        connection.close();

上述操作结果如下:


有什么问题评论区指出,希望可以帮到你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值