Java数据库连接——JDBC详述

JDBC概述

JDBC(Java Database Connectivity)是Java语言提供的一套连接数据库的接口,接口的实现在JDBC中叫做数据库驱动,由各大数据库厂家负责提供。这样的做的原因就是使用者不需要关心底层是如何实现的,实现者也不能告诉你我的数据库底层的实现细节是什么。mysql数据库是开源的,所以它提供的驱动里面包含了源码。用户如果需要Java程序连接它们的数据库产品就需要去对应的数据库官网下载驱动jar包。JDBC的这种设计的方式体现的思想是要针对接口编程,不要针对实现编程,抽象不应该依赖于细节,细节不应该依赖抽象,即依赖倒置原则。



IDEA导入jar包

方式一:

  1. 将从官网下载的mysql-connector直接解压,复制里面的驱动jar包。
  2. 在idea你的项目下创建一个lib目录,将复制的驱动jar包粘贴进去。
  3. 右键选择驱动jar包 --> 选择as Library,驱动jar包成功添加到项目的Libraries中。

方式二:

选择File -->打开Project Structure --> 点击 + 号,创建一个Java的项目库 -->选择想导入的jar包 -->最后点击apply,应用到项目中。



JDBC编程六步

第一步:注册驱动

  1. 第一种方式:
    try{
         
        Driver driver = new com.mysql.cj.jdbc.Driver();
    	DriverManager.regisertDriver(driver);
    }catch(SQLException e){
         
        e.printStackTrace();
    }
    

    注意:左边的Driver属于java.sql包下的,而右边的Driver则属于com.mysql.cj.jdbc包下的。

  2. 第二种方式(类加载的方式):

    由com.mysql.cj.jdbc.Driver类的源码可知,我们不必创建Driver对象注册驱动,在Driver类加载的时候,就会自动执行静态代码块里的注册驱动方法。因此我们可以这样写:

    try{
         
    	Class.forName("com.mysql.cj.jdbc.Driver");    
    }catch(ClassNotFoundException e){
         
        e.printStackTrace();
    }
    

    这样写的好处是程序灵活性高,代码没有写死。如果程序想换一个数据库,只需要传递一个数据库的全限定名的字符串就可以了,字符串可以保存在配置文件中,通过资源绑定器ResourceBunlde绑定配置文件获取。这里的代码演示待会儿获取数据库连接对象再进行。

    com.mysql.cj.jdbc.Driver类的源码:

    public class Driver extends NonRegisteringDriver implements java.sql.Driver {
          
        public Driver() throws SQLException {
          
        }
    
        static {
          
            try {
          
                DriverManager.registerDriver(new Driver());
            } catch (SQLException var1) {
          
                throw new RuntimeException("Can't register driver!");
            }
        }
    }
    

第二步:获取数据库连接对象

/*
	url(uniform resource locator):统一资源定位符,是一种用于指定因特网的万维网上的信息或资源的位置的方法。
	
	URL包括了哪几部分?
		协议:常见的有http、https、ftp,连接mysql数据库的协议的名称是jdbc:mysql。
		域名或ip地址:连接本机的mysql数据库可以使用localhost或者172.0.0.1。
		端口号:mysql是3306,http是80,https是443,ftp是21。
		资源名:资源在服务器上的路径。
		携带的参数:使用?name1=value1&name2=value2&name3=value3...这种格式。
		
	例如:jdbc:mysql//172.0.0.1/login?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
*/

String url;
String user;
String password;
Connection connection = DriverManager.getConnection(url,user,password);

java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

使用高版本的mysql驱动jar包可能会报以上的错误,低版本不会。

解决方法:
在配置文件中的 连接字符串后面加上?serverTimezone=UTC

UTC是统一标准世界时间

完整的连接字符串示例:jdbc:mysql://localhost:3306/hello?serverTimezone=UTC

如果指定使用gmt+8时区,需要写成GMT%2B8,否则可能报解析为空的错误

顺便一提,如果输入中文存在乱码,可以如下设置:

jdbc:mysql://127.0.0.1:3306/hello?useUnicode=true&characterEncoding=UTF-8

当然,为了稳妥,你也可以都写上 如下:

jdbc:mysql://127.0.0.1:3306/hello?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

搞定。
参考:https://blog.csdn.net/weixin_42652696/article/details/83864740

第三步:获取数据库操作对象

//Statement对象专门用于执行sql语句
Statement statement = connection.createStatement();	

第四步:执行SQL

String sql = "insert into login(name,psw) values('jack','123')";

//专门用于执行DML语句(insert delete update),返回值是影响数据库记录的条数
int count = statement.executeUpdate(sql);

第五步:处理查询结果集(对于DML语句可以跳过这步)

//ResultSet用于处理JDBC的查询结果集
ResultSet resultSet = statement.executeQuery(sql);

//next()方法用于判断光标当前执行的行是否有数据
while(resultSet.next()){
   
    //按下标取数据,JDBC中所有的下标都是以1开始,这种写法太死了,一般使用按列名取数据。
    int id = resultResult.getInt(1);
    String name = resultResult.getString(2);
    String password = resultResult.getString(3);
    System.out.println(id +" "+ name +" "+ password);
    
    //按列名取数据,因为查询语句可以为列名起别名,所以注意是查询结果集里面的名字。除了getInt()、getString()以外还有获取其他指定类型数据的方法。
    int id = resultResult.getInt("id");
    String name = resultResult.getString("name");
    String password = resultResult.getString("psw");
    System.out.println(id +" "+ name +" "+ password);
}

封装在ResultSet对象中的数据以以下方式组织

在这里插入图片描述

第六步:释放资源

//必须释放创建的与数据库保持连接占用的资源,后创建的先关闭。为了保证程序因出现异常而终止也能正常关闭资源,通常将它们放在finall语句块中
resultSet.close();
statement.close();
connection.close();


完整的编程六步示例

import java.sql.*;

public class TestJDBC01 {
   
    public static void main(String[] args) {
   
        Statement statement 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值