JDBC编程基础

本文详细介绍了JDBC的概念,包括JavaAPI、数据库驱动包及其工作原理。通过实例展示了如何建立数据库连接、执行SQL语句,并提到了使用DataSourse优化连接管理和防止SQL注入的方法。最后强调了资源关闭的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC编程基础

什么是JDBC编程?
JDBC全称叫Java数据库连接(Java Database Connectivity),是一种利用Java API(Java抽象接口)进而执行数据库SQL语句的一种数据库连接规范。
什么是Java API?
它是java.sql.*或者javax.sql.*中一些抽象类和接口组成,它为关系型数据库的操作提供了统一规范。
什么是数据库驱动包?
不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动“mysql-connector-java”,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包。
JDBC的工作原理
导入数据库驱动包(每种数据库对每种语言都有专门的数据库驱动包)——>加载驱动程序(使Java确定操作对象)——>建立与客户端的连接——>执行SQL语句。
具体过程如下:
(导包):在项目的src同级目录下建立一个名为lib的文件,并将依赖包mysql-connector-java-5.1.47.jar制到lib中。再配置该jar包到本项目的依赖中:右键点击项目Open Module Settings,在Modules中,点击项目,配置Dependencies,点击+,JARS or Directories,将该lib文件夹配置进依赖中,表示该文件夹下的jar包都引入作为依赖。
(加载驱动程序):

 Class.forName("com.mysql.jdbc.Driver");

(建立与客户端的连接):

 String url="jdbc:mysql://127.0.0.1:3306/mydatabase?useSSL=false";//定位数据库所在的客户端的表
 String name="***";//用户名(自己的数据库账户名)
 String password="*****";//密码 (自己数据库的密码)
Connection connection=DriverManager.getConnection(url,name,password);//建立连接

在url中127.0.0.1代表本地主机IP地址,3306代表当前sql服务器的进程号。
(执行sql语句):

 String sql="select * from user";//容易出现sql注入
        Statement statement=connection.createStatement();
        ResultSet resultset=statement.executeQuery(sql);
        while(resultset.next()){//resultset此时指向数据行的上一行,它会自行进行判断,如果下一行
        //没有数据返回false否则返回true
            System.out.print("id="+resultset.getInt(1)+" ");
            System.out.print("acount="+resultset.getString(2)+" ");
            System.out.println("amount="+resultset.getInt(3));
            //上面三行是指我访问表中一行的对应字段值
        }

以上只是以执行查询作为例子进行执行的,并且是有对应优化的,如下:

 String url="jdbc:mysql://127.0.0.1:3306/mydatabase?useSSL=false";//定位数据库所在的客户端
        String name="***";//用户名
        String password="******";//密码
        DataSource dataSource=new MysqlDataSource();//获取连接(DataSourse具有数据库连接池)
        /*数据源*/
        ((MysqlDataSource)dataSource).setUrl(url);
        ((MysqlDataSource)dataSource).setUser(name);
        ((MysqlDataSource)dataSource).setPassword(password);
        
        Connection connection=dataSource.getConnection();
        /*
         * 执行sql语句
         * */
        String sql="select * from user where id=? or id=?";//进一步解决sql注入,其中?为占位符,编译时会进行变量替换
        PreparedStatement statement=connection.prepareStatement(sql);//直接执行,不用Statement对象
        statement.setInt(1,1);//第一个参数是字段号,第二个参数是数据值
        statement.setInt(2,250);
        ResultSet resultset=statement.executeQuery();//对sql语句进行优化,减少sql注入的可能
        while(resultset.next()){
            System.out.print("id="+resultset.getInt(1)+" ");
            System.out.print("acount="+resultset.getString(2)+" ");
            System.out.println("amount="+resultset.getInt(3));
        }
        resultset.close();//这些都是资源用完一定要关闭
        statement.close();//这些都是资源用完一定要关闭
        connection.close();//这些都是资源用完一定要关闭

那有人就问了,飞哥,为什么没有驱动加载这一步呢,因为在DataSourse中已经封装好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值