Java的数据库编程:JDBC

本文介绍了Java通过JDBC与数据库交互的基础知识,包括API的概念、JDBC的作用,以及如何使用JDBC进行数据库连接、预编译SQL语句以防止SQL注入,实现了对MySQL数据库的增、删、改、查操作。同时强调了释放资源的重要性。
摘要由CSDN通过智能技术生成

Content

🎉1什么是API

🎉2.什么是JDBC

🎉3.数据库驱动包的安装

🎉4.数据库安装包在idea的使用

🎉5.JDBC的增删改查的简单实现

今天为大家带来JAVA的数据库编程,也就是用Java实现数据库

数据库的最基本的操作就是增删改查

在实工作中,手敲sql语句几乎用不到,更多的是用代码来实现sql语句

像常见的数据库,比如mysal,sqlsever,Oracle等数据库软件,在开发的时候会提供编程的接口,叫做API

什么是API呢,也就是实现某种功能,例如Java的接口,就是API,比如Collection接口,里面有很多方法,可以实现很多功能,总的来说API多用于函数的形式来表示

现在要用Java实现数据库,那么也需要提供一个API用来对接Java和数据库,那么就要用JDBC,Java对数据库提出要求,数据库本来的功能上要增加一些来匹配Java,这样才可以让Java操作数据库,执行数据库.

JDBC,全称,Java Database Connectivity,是java和数据库的连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。可以为多种关系数据库提供统一访问.

Java通过JDBC操作数据库,那jdbc和数据库建立连接的时候,需要使用数据库驱动包,就是对不同数据库的原生API进行封装,封装成JDBC认识的API,,Java需要在项目导入数据库驱动包,也才能执行数据库,那么我们就需要下载驱动包,这里我们选择去maven中央仓库下载

上链接

https://mvnrepository.com/

这个要和自己下载的数据库的版本要匹配,因为我下载的是5系列的,所以我要用这个,5开头的都可以选

点击这个

然后下载了,之后,建立一个项目,然后在项目点新建directory,拷贝这个地址,就建立了lib文件

就像这样,这样数据库就和java建立连接了,现在就可以开始在idea编辑数据库代码了

还是和数据库一样,实现增删改查,上代码

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2023-03-03
 * Time: 20:57
 */
//JDBC实现sql
public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
            //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.构造sql语句
        String sql="insert into student values(1,'张三')";

        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        //4.执行sql语句
      int ret=  statement.executeUpdate();
        System.out.println(ret);
        
        //5.释放必要的资源
        statement.close();
        connection.close();
    }
}

看看执行结果,在idea上结果是1的原因是,stament.executeUpdate这个方法返回类型就是int型的,代表修改的行数

执行完以后记得释放资源

现在对这段代码进行优化,发现在构造sql语句的时候比较麻烦,进行优化

String sql="insert into student values(1,'张三')"; 

这个语句把要输入的内容写死了,也就是硬编码,在现实开发环境中,要为用户考虑,所以要写用户输入

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");
        int id=scanner.nextInt();
        //4.构造sql语句
        String sql="insert into student values("+id+",'"+name+"')";

        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        //5.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);

        //6.释放必要的资源
        statement.close();
        connection.close();
    }

但是这种写法容易产生sql注入问题

 public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");
        int id=scanner.nextInt();
        //4.构造sql语句
        String sql="insert into student values(?,?)";

        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        statement.setInt(1,id);
        statement.setString(2,name);
        //5.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);

        //6.释放必要的资源
        statement.close();
        connection.close();
    }

问号代表占位符,下面的setint里面的1,id代表第一个问号放id,第二个问号放name ,然后根据动态输入就自动放入到sql语句中

 

这一段就是Preparestatement方法拼接以后 的数据

释放资源:

数据库的客户端和服务器通过网络进行通信,需要占用一定的资源,但客户端很多,服务器很少时,要即及时释放资源

谁先创建,谁就后释放

DataSource内置了数据库连接池,可以复用连接,提高连接服务器的效率

现在写查询操作

public class TestDemo {
    public static void main(String[] args) throws SQLException {
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.构造sql语句
        String sql="select* from student";

        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        //4.执行sql语句
      ResultSet resultSet= statement.executeQuery();
      //5遍历结果集合
       while(resultSet.next()){
           int id=resultSet.getInt("id");
           String name=resultSet.getString("name");
           System.out.println("+id+"+id+"name"+name);
       }

        //6.释放必要的资源
        resultSet.close();
        statement.close();
        connection.close();
    }

 resultset这个代表查询的结果集,用到的get方法相当于就是拿到某下标 的元素

删除操作

public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        /*//3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");
        int id=scanner.nextInt();*/
        //4.构造sql语句
        String sql="delete from student where id=1";

      PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
      /*  statement.setInt(1,id);
        statement.setString(2,name);*/
        System.out.println(statement);
        //5.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);

        //6.释放必要的资源
        statement.close();
        connection.close();
    }
}

修改操作

 public static void main1(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        /*//3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");*/
        /*int id=scanner.nextInt();*/
        //3.构造sql语句
        String sql="update student set id=12 where name='张三'";

        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力

        System.out.println(statement);
        //4.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);

        //5.释放必要的资源
        statement.close();
        connection.close();
    }

这就是今天的所有内容了,我们下期再见!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值