JDBC编程初级


前言

jdbc编程步骤:


    1)注册驱动 DriverManager.registerDriver(new Driver());
    2)获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名","用户名","密码");
    3)获取发送sql语句对象 PreparedStatement pst = conn.preparedStatement("select * from 表名 where username=?")
        优点:1)防止sql注入  2)效率高
    4)发送sql
        查询:ResultSet rs = pst.executeQuery();
		增删改:int i = pst.executeUpdate(); 影响行记录数
    5)处理结果集
            while(rs.next()){
                rs.getInt(第几列或者字段名或者别名)
            }
    6)释放资源

数据库连接池:
优化连接。初始化连接池的时候先从数据库服务器获取一部分连接放到连接池中,当用户访问的时候直接从连接池中获取,使用完之后再将连接放回到数据库连接池中。

常用的连接池实现组件有以下这些
1. 阿里巴巴-德鲁伊Druid连接池:Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。
   该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求。
2. C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有HibernateSpring等。
	C3P0有自动回收空闲连接功能。
3. DBCP(DataBase Connection Pool)数据库连接池,是Apache上的一个Java连接池项目。
	dbcp没有自动回收空闲连接的功能。
	
Druid(德鲁伊)数据库连接池
        1)导入jar包
        2)获取连接池对象
         DataSource ds = DruidDataSourceFactory.createDataSource(Properties p);
		3)从连接池中获取连接对象
         Connection conn = ds.getConnection();

一、JDBC核心API的介绍

1、JDBC会用到的包

1. java.sql:JDBC访问数据库的基础包,在JavaSE中的包。如:java.sql.Connection
2. javax.sql: JDBC访问数据库的扩展包
3. 数据库的驱动,各大数据库厂商来实现。如:MySQL的驱动:com.mysql.jdbc.Driver

2、JDBC四个核心对象

这几个类都是在java.sql包中

1. DriverManager():  
2. 			数据库驱动管理类。这个类的作用:
3. 					1)注册驱动; 
4. 					2)创建java代码和数据库之间的连接,即获取Connection接口;
5. Connection(接口): 
6. 			是一个接口, 建立数据库连接的一个接口。
7. 				作用:建立数据库和java代码之间的连接。表示与数据库创建的连接
8. Statement(接口)PreparedStatement(接口) (解决安全隐患问题,比如sql注入的问题)9. 			 数据库操作,向数据库发送sql语句。执行SQL语句的对象
10. ResultSet:
11. 	 结果集或一张虚拟表。 
12. 		Statement 发送sql语句,得到的结果 封装在 ResultSet 中。

在这里插入图片描述

3、JDBC访问数据库的步骤

1.DriverManager注册驱动程序
2. 创建和数据库的连接对象Connection
3. 由客户端发送SQL语句给服务器执行,SQL语句封装成Statement对象
4. 查询到的结果集封装成ResultSet对象
5. 在客户端可以从ResultSet中取出数据,处理结果集
6. 释放资源,关闭连接对象

二、JDBC注册驱动

API介绍

java.sql.DriverManager类用于注册驱动。提供如下方法注册驱动

static void registerDriver(Driver driver)DriverManager 注册给定驱动程序。 

说明:
​ 1)执行完上述语句之后,DriverManager就可以管理mysql驱动了。
​ 2)当前的DriverManager.registerDriver(Driver driver);方法的参数是Driver,这是jdbc的一个接口,所以我们需要给定实现该接口的实现类。如果我们连接的是mysql数据库,那么需要导入mysql数据库提供的包,也就是com.mysql.jdbc.Driver; 下的Driver类。如果我们连接的是oracle数据库,那么需要导入oracle数据库提供的包。

案例代码

public class Demo01 {
	public static void main(String[] args) throws Exception {
		// 注册驱动
		DriverManager.registerDriver(new com.mysql.jdbc.Driver());
	}
}

说明:这里的new Driver()的类Driver就是来自mysql数据库。
通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    static {
        try {
            // 自己自动注册
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }
    public Driver() throws SQLException {
    }
}

在这里插入图片描述

注意:使用DriverManager.registerDriver(new com.mysql.jdbc.Driver());,存在以下方面不足

  1. 驱动被注册两次

使用Class.forName("com.mysql.jdbc.Driver");加载驱动,这样驱动只会注册一次

public class Demo01 {
	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.jdbc.Driver"); // 后期可以将"com.mysql.jdbc.Driver"字符串写在文件中.
	}
}

通常开发我们使用Class.forName() 加载驱动。Class.forName("com.mysql.jdbc.Driver");会走Driver类的静态代码块。在静态代码块中注册一次驱动。
在这里插入图片描述

小结:

1、注册MySQL驱动使用Class.forName("com.mysql.jdbc.Driver");
2、从jdk4.0开始,对于我们java开发工程师,第一步不用书写了,底层帮助我们使用com.mysql.jdbc.Driver类先注册驱动了.

驱动必须注册,只是不用我们书写代码注册了。

三、 获取连接

API介绍

java.sql.DriverManager类中有如下方法获取数据库连接

static Connection getConnection(String url, String user, String password) 
连接到给定数据库 URL ,并返回连接。 

参数说明
String url:连接数据库的URL,用于说明连接数据库的位置
String user:数据库的账号
String password:数据库的密码

连接数据库的URL地址格式:协议名:子协议://服务器名或IP地址:端口号/数据库名?参数=参数值
在这里插入图片描述
MySQL写法:jdbc:mysql://localhost:3306/test_db(或者jdbc:mysql://127.0.0.1:3306/test_db)
如果是本地服务器,端口号是默认的3306,则可以简写:jdbc:mysql:///test_db
在这里插入图片描述
注意事项

如果数据出现乱码需要加上参数: ?useUnicode=true&characterEncoding=utf8,表示让数据库以UTF8编码来处理数据。
如: jdbc:mysql://localhost:3306/day04_db?useUnicode=true&characterEncoding=utf8

案例代码

public class Demo01 {
	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.jdbc.Driver");
		// 连接到MySQL
		// url: 连接数据库的URL
		// user: 数据库的账号
		// password: 数据库的密码
		Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test_db", "root", "root");
		System.out.println(conn);
	}
}

小结

  1. JDBC获取数据库连接使用哪个API?
DriverManager.getConnection(数据库url, 账号, 密码)
  1. 通过JDBC连接mysql的URL写法?
jdbc:mysql://服务器ip地址:3306/数据库

3.如果连接mysql服务器在本地,那么url可以简写:

jdbc:mysql:///数据库

JDBC实现对单表数据增、删、改、查

API介绍

获取Statement对象
java.sql.Connection接口中有如下方法获取到Statement对象

Statement createStatement() 
创建一个 Statement 对象来将 SQL 语句发送到数据库

Statement的API介绍

  int executeUpdate(String sql)
  根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数

  ResultSet executeQuery(String sql)
  根据查询语句返回结果集,只能执行SELECT语句

注意:在MySQL中,只要不是查询就是修改。
executeUpdate:用于执行增删改
executeQuery:用于执行查询

使用步骤

  1. 注册驱动
  2. 获取连接
  3. 获取Statement对象
  4. 使用Statement对象执行SQL语句
  5. 释放资源

案例代码

public class Demo03 {
	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.jdbc.Driver");

		Connection conn = DriverManager.getConnection("jdbc:mysql:///test4_db", "root", "root");
		System.out.println(conn);

		// 从连接中拿到一个Statement对象
		Statement stmt = conn.createStatement();

		// 1.插入记录
		String sql = "insert into user values(null, 'zhangsan', '123abc')";
		int i = stmt.executeUpdate(sql);
		System.out.println("影响的行数:" + i);

		// 2.修改记录
		sql = "update user set username='lisi' where username='wangwu'";
		i = stmt.executeUpdate(sql);
		System.out.println("影响的行数:" + i);

		// 3.删除记录
		sql = "delete from user where id = 2";
		i = stmt.executeUpdate(sql);
		System.out.println("影响的行数:" + i);
		
		// 释放资源
		stmt.close();
		conn.close();
	}
}

总结

本篇是对JDBC篇章的基本了解,初步的实现数据库的连接。

如有错误,请联系:1375909085@qq.com
欢迎指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值