java连接数据库(一):JDBC

JDBC是什么?

java DataBase Connectivity——用java语言操作(关系型)数据库
概述:
是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口(是链接数据库和JAVA应用程序的纽带),提供了诸如查询和更新数据库中数据的方法。

jdbc的背景/需求(了解):

每个数据库厂商都有自己的数据库驱动,为了实现我们可以方便地连接到到不同数据库
(比如你的账户信息在MySQL数据库,头像图片在Oracle数据库,注:Oracle的SQL语法与MySQL有很大不同)
(举例:就好像你看一篇文章,里面有些文字用汉语,有些文字用英语、德语、法语…,为了看懂这篇文章,你被迫去学习不同的语言)
为了解决这种问题,官方(sun公司)定义了一套操作【所有关系型数据库】的规则/基准(即接口),各个数据库厂商去实现这套接口提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

因此,JDBC是什么?
是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准/规范,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。(类似于统一使用一种文字,比如全世界都使用中文来写字)

作用:

有了JDBC API,可以大量简化重复性的代码工作,就不必为访问Mysql数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问DB2数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。

JDBC的主要任务:

与数据库建立一个链接
向数据库发送SQL语句
处理从数据库返回的结果

快速入门:

0、创建一个多级项目(如果不会创建,可以参考这篇文章)
(也可以自己随便创建一个项目)
备注:不支持发行版本5
1、导入jar包(maven方式)
【mysqk-connector】【junit】

	<dependencies>
 		<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        
        <!--注册mysql驱动-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
    </dependencies>

可能出现的问题:

idea中pom.xml文件名是红色

新版idea如何刷新maven文件

  1. 注册驱动(告诉程序该使用哪一个数据库驱动jar包)

    1. Class.forName(“com.mysql.cj.jdbc.Driver”);
      加载Drive类进来(然后静态代码块自动执行了注册驱动程序的方法)
  2. 获取数据库连接对象Connection(只连接到数据库 ,没有到表)

  3. 定义sql

  4. 获取执行sql语句的对象statement

  5. 执行sql,接受返回结果

  6. 处理结果

  7. 释放资源(避免内存泄漏问题)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JdbcTest{
    public static void main(String[] args) throws Exception {
//        1、导入connect依赖
//        2、注册驱动(这是比较新的数据库驱动)
//			注:假如是数据库版本比较旧则使用——com.mysql.jdbc.Driver
        Class.forName("com.mysql.cj.jdbc.Driver");
//        3、获取数据库链接对象(数据库(端口号)、账号、密码) :
//【注意】如果复制代码的话这里需要修改成你对应的数据库账号和密码
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8", "root", "123456");
//        4、定义sql语句
        String sql ="UPDATE `t_user` SET `userage` = '18' WHERE `id` = '1'";
//        5、 获取执行sql的对象——Statement
        Statement stmt = conn.createStatement();
//        6、执行sql——stmt.executeUpdate(sql);
        int count = stmt.executeUpdate(sql);
//        7.处理结果
        System.out.println(count);
//        8、释放资源(先释放stmt)
        stmt.close();
        conn.close();
    }
}

优点:

JDBC使程序员摆脱了复杂的驱动程序调用命令和函数,并能够处理APP应用程序的重要部分。

由于JDBC支持各种关系数据库,因此大大提高了程序的可移植性。

JDBC API是面向对象的,可以将用户常用的方法封装为-类,以便以后使用。

缺点:

频繁创建与销毁连接,比较耗费机器的性能跟资源,也没有太大意义

解决方案:数据库连接池

JDBC连接数据库(二):数据库连接池(druid)

推荐文章:JDBC详解各个对象及JDBC工具类

抽取JDBC工具类:

目的:简化书写,方便使用

//1.	抽取注册驱动的代码  (使用静态代码块)
private static String driver;
private static String url;
private static String user;
private static String password;
static{
	try{
//(URL,USER,PASSWORD,DRIVER是需要修改的内容,可以都放入配置文件内,然后将配置文件放在**src**文件下)
		//1.	创建Properties对象
		Properties pro = new Properties();
		//2.	加载配置文件
		ClassLoader cl = JDBCUTils.class.getClassLoader();
		InputStream is=cl.getResourceAsStream("jdbc.properties");
		pro.load(is);
		//3.	获取数据并赋值
		//注意:key值都要和配置文件的一一对应
		url = pro.getProperty("url");  
		user = pro.getProperty("user");
		password = pro.getProperty("password");
		driver = pro.getProperty("driver");
		//4.	替换数据
		/*将“com.mysql.jdbc.Driver”替换为driver;
		将“jdbc:mysql://localhost:3306/myjdbc”替换为url;
		将”root”替换为user;
		将”root”替换为password;*/
		Class.forName("com.mysql.jdbc.Driver");
	}catch(SQLException e){
		e.printStackTrace();
	}
}
//2.	抽取获取连接对象的方法
public static Connection getConnection(){
	return DriverManager.getConnection("jdbc:mysql://localhost:3306/myjdbc","root","密码")
}
//3.	抽取释放资源的方法
public static void close(Connection conn,Statement stmt){
	if(stmt != null){
		try{
			stmt.close();
		}catch(SQLException e){
		e.printStackTrace();
		}
	}
	if(conn != null){
		try{
			conn.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
}
public static void close(ResultSet rs,Connection conn,Statement stmt){
	if(conn != null){
		try{
			conn.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
close(conn,stmt);
}

参考文章:
自制数据库连接池(DateSource数据源)
JDBC概述(JDBC是什么,主要作用,驱动类型等)


java连接数据库专栏文章:

java连接数据库(一):JDBC

Java连接数据库(二):数据库连接池(druid)

java连接数据库(三):Spring JDBC/JDBC Template

java连接数据库(4.1):Mybatis框架快速入门

java连接数据库(4.2):Mybatis框架注解的简单使用

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值