简介
JDBC java数据库连接技术,是Java和数据库之间的一个桥梁,是一个规范,标准接口,而不是一个实现,可以让我们通过Java语言执行sql语句;
全称:Java DataBase Connectivity(Java数据库连接),就是使用Java语言操作关系型数据库的一套API;
JDBC以接口的形式定义了所有操作关系型数据库的规则,而各个数据库厂商根据接口写实现类,我们称之为:驱动;
因此JDBC本质上就是一个接口;我们使用这套接口进行编程,真正执行代码的是驱动jar包中的实现类;
优点:
-
Java代码不需要针对不同数据库 分别开发
-
可随时替换底层数据库,访问数据库的Java代码基本不变
JDBC操作数据库的步骤
操作前不要忘记导入对应的驱动包;
1,注册驱动
//forName方式加载驱动类 Class.forName(className);
2,获取连接
Connection connection = DriverManager.getConnection(url, username,password);
3,书写sql语句,创建执行对象(statement对象及其子对象)
String sql="select * from user"; Statement statement=connection.createStatement();
4,执行SQL
List<User>list=statement.executeUpdate(sql);
5,处理结果
一般只有查询语句需要处理结果;其他的诸如增删改的操作只会返回一个正整数,代表操作影响的行数(方法重写之后可能不会返回),
6,释放资源资源
及时释放资源,提升性能;
JDBC详解
DriverManager(驱动管理类)
作用:
1,注册驱动
forName()方法其实是调用了DriverManager的registerDriver()方法
2,获取数据库连接
Connection connection = DriverManager.getConnection(url, username,password);
url:连接地址;username:用户名;password:密码
Connection(数据库连接对象)
作用:
1,获取执行SQL的对象
statement对象
preparedStatement对象
2,管理事务
connection.setAutoCommit(true/false) true表示自动提交事务,false表示手动提交,如果选择了false,则从现在开始你开启了一个事务;
connection.commit(); 提交事务
connection.rollback();程序执行出现问题,回滚;
Statement
最简单的执行sql语句的对象,SQL语句只要是字符串就可以了,字符串符合sql语句的要求就可以;灵活性很差,而且在由参数的情况下,直接使用字符串进行拼接,会出现SQL注入的情况;
执行情况:
指定DML.DDL语句,返回值对象为整形,是受影响的行数,上面也提起过;
int count = statement.executeUpdate(sql);
执行查询语句返回对象为ResultSet对象(接下来就看看ResultSet对象);
ResultSet resultSet=statement.executeQuery(sql):
ResultSet(结果集)
封装了SQL查询语句的结果
如何从ResultSet 对象中获取我们想要的数据
boolean next() :将光标从当前位置向前移动一行,判断当前行是否为有效行;返回值说明:true:当前行有数据;false :无效行,当前行没有数据;
ResultSet对象.get数据类型(参数:数据库查询结果当前列对应的列名)
PreparedStatement
预编译SQL语句并执行:预防SQL注入问题
sql注入:特殊字符作为输入的参数,并且被当作程序代码运行,破坏代码的正确运行;
获取 PreparedStatement 对象:
// SQL语句中的参数值,使用?占位符替代 String sql = "select * from user where username = ? and password = ?"; // 通过Connection对象获取,并传入对应的sql语句 PreparedStatement pstmt = conn.prepareStatement(sql);
设置参数值:
pstmt.set(参数1,参数2);参数1?位置的编号 参数2?的值
执行SQL语句集于Statement一样;
executeUpdate(); 执行DDL语句和DML语句
executeQuery(); 执行DQL语句
但是:调用这两个方法时不需要传递SQL语句,因为获取SQL语 句执行对象时已经对SQL语句进行预编译了。
数据库连接池
数据库连接池是一个容器,负责分配,管理数据库的连接;
允许应用程序使用一个现有的数据库连接,而不是再重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接,来避免因为没有释放数据库连接而引起的数据库连接遗漏;
优点:
-
资源重用
-
提升系统的响应速度
-
避免数据库连接遗漏
在没有数据库连接池是,每一次与数据库的连接操作都需要创建一个connection对象,使用完之后再丢弃,每次有应用程序来连接就重复上述的操作,大大消耗了资源,拖慢了性能,而在使用数据库连接池之后,每次有连接就直接分配一个连接,使用完之后再归还支连接池。这样可以消除对象创建和销毁所带来的延迟,从而提高系统的性能;同时每个连接存在时间限制,假如一个对象一直拥有连接池,而没有操作,会立刻收回,然后分配给其他应用对象;
实现:
标准接口:DataSource
官方提供的接口,有一个
Connection getConnection()
方法,提供了获取连接的功能;
常见的数据库连接池:DBCP,C3P0,Druid;
最常使用:Druid(德鲁伊)
-
Druid连接池是阿里巴巴开源的数据库连接池项目
-
功能强大,性能优秀,是Java语言最好的数据库连接池之一
使用:
导入jar包
定义配置文件
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///db1? useSSL=false&useServerPrepStmts=true username=root password=1234 # 初始化连接数量 initialSize=5 # 最大连接数 maxActive=10 # 最大等待时间 maxWait=3000
加载配置文件
Properties prop=new Properties(); prop.load(new FileInputStream("配置文件地址");
获取数据库连接池对象
DataSource dataSource=DruidDataSourceFactory(prop);
获取连接对象
Connection conn=dataSource.getConnection();
后续操作就和jdbc的操作一样,数据库连接池的作用只是优化与管理数据库连接,是JDBC基础上的升级优化,以前我们需要一步步操作,而现在连接池帮我们做了;