JDBC

JDBC(Java数据库连接)是Java语言访问数据库的标准接口,提供了统一的API用于执行SQL语句。它包括DriverManager、Connection、Statement和ResultSet等核心接口。通过JDBC,程序员可以跨数据库平台编写代码。使用JDBC时,需要添加数据库驱动jar包,并通过DriverManager.getConnection()获取连接,再通过Connection对象创建Statement或PreparedStatement执行SQL。JDBC的封装可以减少重复代码,提高效率。高级操作中涉及ORM映射、分层开发和防止SQL注入的PreparedStatement。分层开发将应用划分为界面层、业务逻辑层和数据访问层,ThreadLocal则有助于减少资源浪费。
摘要由CSDN通过智能技术生成

第一节 JDBC(Java数据库连接)

一.什么是JDBC?

JDBC(Java Data Base Connectivity, Java数据库连接)
是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问
它由一组用Java语言编写的类和接口组成(由sun公司提供的)(这些类和接口是由数据库公司来实现的,谁来实现它,就连接谁的数据库)


2.有了JDBC,程序员只需用JDBC API写一个程序,就可访问所有数据库。

(使用JDBC是跨数据库平台)
3.Sun公司、数据库厂商、程序员三方关系:
◆ SUN公司是规范制定者,制定了规范JDBC(连接数据库规范) 一类三接口
①DriverManager类 作用:管理各种不同的JDBC驱动(不同数据库jar包归它管理)
②Connection接口 作用:(修路的,实际上还是TCP,一方是数据库服务器,javaApplication是客户端,如果进行通信的话,第一件事情就是建立连接。)
③Statement接口和PreparedStatement接口 作用:(就是用于发送sql语句的,也就是把sql语句发送带数据库服务器去执行。数据库执行完语句有结果吗?有,增、删、改的结果是int,查询的结果是表。)
④ResultSet接口 (结果集) 作用:(在增删改的时候用不到,只是在查询的时候能用到,因为查询的时候是结果集)
◆ 数据库厂商微软、甲骨文等分别提供实现JDBC接口的驱动jar包(数据库管理系统生产厂商把类和接口进行实现了,实现了之后,程序员得用,那么怎么把这些实现类给程序员呢?是以jar包的形式。例:Orical实现接口,提供jar包,用于连接Orical数据库)
◆ 程序员学习JDBC规范来应用这些jar包里的类。
常用的框架Hibernate、MyBatis底层都是JDBC,都是对JDBC的封装

二、JDBC怎么使用?

JDBC的操作步骤 :
    ① 加载一个Driver驱动
	②创建数据库连接(Connection)
	③创建SQL命令发送器Statement
	④通过Statement发送SQL命令并得到结果
    ⑤处理结果(insert ,update,delete的结果为int ,select的结果为ResultSet)
	⑥关闭数据库资源
		 ◆ResultSet
         ◆ Statement
		 ◆Connection

新建一个project命名为java502---->在这个项目下新建一个Model命名为day1_jdbc---->在这个模块下新建一个directory命名为lib,把jar包复制到这个文件夹下面,这个时候这个jar包是不能用的,需要做一件事儿:鼠标放在这个jar上–右键–单击Add as library ,然后会弹出来一个框,选择ok即可。如下图所示则jar可以用了。

"连接mysql数据库"

package com.bjsxt.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class TestInsert {
   
    public static void main(String[] args)throws  Exception {
   
        //(1)加载驱动,[找到jar才能知道连谁] --导入jar包
        Class.forName("com.mysql.jdbc.Driver"); //com.mysql.jdbc是包的名称 Driver是类的名称
        //(2)因为mysql 服务器上有可多数据库了,请问你连的是哪个?
        String url="jdbc:mysql://127.0.0.1:3306/myschool";//连的是服务器上的哪个数据库
        String userName="root";
        String pwd="root";
        //(3)获取连接对象
        Connection connection = DriverManager.getConnection(url, userName, pwd);
        //(4)准备sql语句
        String sql="insert into dept values (99,'test','上海')";
        //(5)使用sql语句发送器发送sql到数据库服务器执行,并带回结果
        Statement statement = connection.createStatement();
        int i = statement.executeUpdate(sql);
        System.out.println(i>0?"插入成功":"失败");
        //(6)关闭连接
        statement.close();
        connection.close();
    }
}

说明: //(2)因为mysql 服务器上有可多数据库了,请问你连的是哪个?
java程序是数据库的客户端,既然是服务器的客户端,那么在socket编程中必须给IP、端口,找到服务器后,服务器中数据库那么多还得告诉我连哪一个数据库,所以url=“jdbc:mysql://127.0.0.1:3306/myschool”.

总结:
1)DriverManager 这个类中有一个静态方法 getConnection(String url,String user,String pwd) 用于获取连接对象
2)Connection接口有一个方法 createStatement() 用于获取SQL语句发送器对象
3)Statement接口有一两个方法 executeUpdate(String sql)用于执行insert ,update,delete的sql语句,返回值为int类型
executeQuery(String sql)用于执行select语句的,返回结果为ResultSet

连oracle数据库

package com.bjsxt.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class TestInsert2 {
   
    public static void main(String[] args)throws  Exception {
   
        //(1)加载驱动,[找到jar才能知道连谁] --导入jar包
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //(2)因为mysql 服务器上有可多数据库了,请问你连的是哪个?
        String url="jdbc:oracle:thin:@192.168.151.241:1521:xe";//连的是服务器上的哪个数据库
        String userName="scott";
        String pwd="tiger";
        //(3)获取连接对象
        Connection connection = DriverManager.getConnection(url, userName, pwd);
        //(4)准备sql语句
        String sql="insert into dept values (79,'test','上海')";
        //(5)使用sql语句发送器发送sql到数据库服务器执行,并带回结果
        Statement statement = connection.createStatement();
        int i = statement.executeUpdate(sql);
        System.out.println(i>0?"插入成功":"失败");
        //(6)关闭连接
        statement.close();
        connection.close();
    }
}

说明:
◆Oracle: 永远要关心一个名叫“监听”的事儿 ,监听能决定你今天能连上数据库,明天不好说。
◆MySQL :永远要关心的是中文“乱码”
jdbc:mysql://localhost:3306/MySchool?useUnicode=true&characterEncoding=utf8

三、JDBC的封装

1.实现修改和删除
因为发现修改,删除和新增,除了sql语句不同,剩下操作步骤完全相同,所以需要提取DBUtil

(1)提取获取连接的方法
(2)提取增,删,改的通用方法
(3)提取关闭全部的方法

package com.bjsxt.util;
import java.sql.*;
public class DBUtil {
   
    private static final String DRIVER="com.mysql.jdbc.Driver";
    private static final String URL="jdbc:mysql://127.0.0.1:3306/myschool";
    private static final String USERNAME="root";
    private static final String PWD="root";
    //获取连接对象
    public static Connection getConn(){
   
        Connection connection = null;
        try {
   
            Class.forName(DRIVER);
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
        } catch (Exception e) {
   
            e.printStackTrace();
        }
        return connection;
    }
    //增,删,改除了sql语句不同,剩下都一样,提取增,删,改的通用方法,可变的做参数,不变的作方法体
    public static int executeDML(String sql){
   
        //(1)获取连接对象
        Connection conn = getConn();
        Statement statement=null;
        int result=0;
        //(2)创建sql语句发送器,发送sql语句
        try {
   
             statement = conn.createStatement();
           result= statement.executeUpdate(sql);
        } catch (SQLException e) {
   
            e.printStackTrace();
        }finally {
   
            //关闭
            closeAll(null,statement,conn);
        }
        return  result;
    }
    //封装关闭全部的方法
    public static void closeAll(ResultSet resultSet,Statement statement,Connection connection){
   
        if (resultSet!=null){
   
            try {
   
                resultSet.close();
            } catch (SQLException e) {
   
                e.printStackTrace();
            }
        }
        if(statement!=null){
   
            try {
   
                statement.close();
            } catch (SQLException e) {
   
                e.printStackTrace();
            }
        }
        if(connection!=null){
   
            try {
   
                connection.close();
            } catch (SQLException e) {
   
                e.printStackTrace();
            }
        }
    }
}

测试

package com.bjsxt.test;
import com.bjsxt.util.DBUtil;
public class Test {
   
    public static void main
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值