①JDBC的定义:
JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组Java语言编写的类和接口组成。
②JDBC的架构方式:
:
结构:
DriverManager (是一工厂实现类,用了工厂方法模式)
|
Dirver (是驱动程序对象的接口,指向具体数据库驱动程序对象=DriverManager.getDriver(String URL))
|
Connection (是连接对象接口,指向具体数据库连接对象=Drivermanager.getConnection(String URL))
|
Statement (执行静态SQL语句接口,=Connection.CreateStatement())
|
ResultSet (是指向结果集对象的接口,=Statement.excuteXXX())
③JDBC的工作原理:(反射机制)
1.装载驱动程序(实例化是自动向DriverManager注册(DriverManager.registerDriver()))
Class.forName(driver)
Class.forName(driver).newInstance()
new driver()
2. 取得数据库连接
//有两种方式
//1.第一种:用DriverManager取数据库连接
Connection con = DriverManager.getConnection(url,uid,pwd);
//2.第二种:用jndi(java的命名和目录服务)方式
Context ctx = (Context)new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource)ctx.lookup(jndi);
Connection cn = ds.getConnection();
3.执行SQL语句:
//有2种方式
//第1种:用Statement执行sql语句(主要是不带参的)
Statement sm = cn.createStatement();
sm.executeQuery(sql); //执行数据查询语句
sm.executeUpdate(sql); //执行数据更新语句
//第2种:用PreparedStatement来执行sql语句(主要是带参的)
String sql = "insert into Employer(id,name) value(?,?)";
PreparedStatement ps = cn.PreparedStatement(sql);
ps.setInt(1,xxx);
ps.setString(2,xxx);
.....
ResultSet rs = ps.executeQuery(); //查询
int c= ps.executeUpdate(); //更新
//用PreparedStatement来执行sql语句(批量更新或删除sql)
PreparedStatement pstmt = cn.PreparedStatement("UPDATE EMPLOYEES SET SALARY=? WHERE ID =?");
for(int i = 0; i<length;i++){
pstmt.setBigDecimal(1,patam1[i]);
pstmt.setInt(2,param2[i]);
pstmt.addBatch();
}
pstmt.executeBatch();
4.事务的处理(JDBC的事务处理简单,在执行多条更新语句后,加cn.commit()或cn.rollback()就可以)
//提交
cn.commit();
//如果发生异常,则回滚
cn.rollback();
5.处理执行结果:
查询语句:返回结果集ResultSet
更新语句:返回数字,表示该更新影响的记录数(0,表示未更新,1表示更新失败)
ResultSet的方法:while(re.next())
next():将游标往后移动一行,如果成功返回true,如果失败返回false
getInt("id")或getString("name"),返回当前游标下某个字段的值
6.关闭数据库连接:
rs.close();
ps.close();
cn.close();
注:
- 如果SQL中包含了未知的参数可以用占位符问号“?”进行替代,然后只需要传递参数即可,另外,使用占位符可以很好地避免SQL注入的攻击。
- 增加、删除、查询和修改操作是DAO需要做的最基本的4项操作。(查询一般需要提供遍历查询和id查询,对于遍历查询,DAO需要提供User泛型的List对象,对于id查询则提供已经装配好数据的User对象。至于增加和修改操作,上层一般会提供一个User对象,DAO把User对象中的数据使用INSERT语句插入表格中。删除操作则只需要提供一个id即可。)
④JDBC的优点:
- 操作便捷
- 可移植性强
- 通用性好
- 面向对象
⑤JDBC的缺点:
1.访问数据记录的速度受到一定程度的影响
2.更改数据源困难。