1.
2.
3.JDBC API
提供者:JAVA官方
内容:供开发者调用的接口
在java.sql和javax.sql包中
- DriverManager 类
- Connection接口
- Statement接口
- ResultSet接口
4.DriverManager
提供者:Java官方
作用:管理不同的JDBC驱动
5.JDBC 驱动
提供者:数据库厂商
作用:负责连接不同的数据库
6.JDBC的使用
1)加载数据库驱动,JAVA程序和数据库之间的桥梁(想象成基站)
2)获取Connection ,JAVA程序和数据库之间的一次链接(想象成打一次电话)
3)创建Statement,由Connection产生,执行SQL语句。
4)如果需要接收返回值,创建ResultSet对象,保存Statement执行之后所查询的结果。
7.具体操作
1)需要导驱动包
2)连接代码(使用的是sqlserver数据库)
public class Main {
public static void main(String [] args){
Statement stat=null;//将作用域扩大,因此放在这里
Connection conn=null;//同上
{
try {
//1.注册驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2.定义sql
String sql="insert into test values(1,'apple','女')";
//获取Connection对象
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=XM","sa","123456");
//4.获取执行sql的对象 Statement
stat=conn.createStatement();
//5.执行sql
int count=stat.executeUpdate(sql);
//6.处理结果
System.out.println(count);//影响的行数
if(count>0){
System.out.print("数据库添加成功");
}else{
System.out.print("数据库添加失败");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//stat.close();
//7.释放资源
//避免空指针异常
if(stat != null){
try{stat.close();
}catch(SQLException e){
e.printStackTrace();}
}
if(conn != null){
try{conn.close();
}catch(SQLException e){
e.printStackTrace(); }
}
}
}
}
}
3)增删查改,对于数据有修改的用executeUpdate(sql)方法,对于查用executeQuery(sql)方法
6.Statement
通常使用PreparedStatement 是Statement的子类,提供了SQL占位符的功能
使用Statement开发有两个问题:
1)需要频繁拼接String字符串,出错率较高
2)存在SQL注入的风险
SQL注入:利用某些系统没有对用户输入的信息进行充分检测,在用户输入的数据中注入非法的SQL语句,从而利用系统的SQL引擎完成而恶意行为的做法。(被人钻了空子)
7.数据库连接池
JDBC开发流程
- 加载驱动(只需要加载一次)
- 建立数据库连接(Connection)
- 执行SQL语句(Statement)
- ResultSet接收结果集(查询)
- 断开连接,释放资源
数据库连接对象是通过DriverManager来获取的,每次获取都需要向数据库申请获取链接,验证用户名和密码
执行完SQL语句后断开连接,这样的方式会早长城资源的浪费,数据连接资源没有得到很好的重复利用。
可以使用数据库连接池来解决。数据库连接池的基本思想就是为数据库建立一个缓冲池,预先向缓冲池中放入一定量的连接对象,当粗要获取数据库连接时,只需要从缓冲池中取出一个对象,用完之后再放回到缓冲池中,供下一次使用,做到了资源的重复利用。允许程序使用一个现有的,而不去冲重新创建。
当数据库连接池中没有空闲的连接时,新的请求就会进入等待队列,等待其他线程的释放连接。
数据路连接池的实现
JDBC的数据库连接池使用javax.sql.DataSource 接口来完成的。DataSource是官方提供的接口,使用的时候开发者并不需要自己实现这个接口,可以使用第三方的工具,C3P0是一个常用的第三方实现,实际开发中直接使用即可完成数据库连接池的操作。
1)导入jar包(c3p0-0.9.1.jar)
2)代码
3)实际开发,将C3P0的配置信息定义再xml文件中,Java程序只需要加载配置文件即可完成数据库连接池的初始化操作。
注意:
- 配置文件的名字必须是c3p0-config.xml
- 初始化ComboPooledDataSource时,传入的参数必须是c3p0-config.xml中named-config标签的name属性值。
8.DBUtils
DBUtils可以帮助开发爱着完成数据的封装(结果集到Java对象的映射)
1)导包 (commons-dbutils-1.7.jar)