JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序.
JDBC API中驱动程序管理器由DriverManager类来实现。它提供了一个用于获得数据库连接的getConnection方法,因此,当加载完驱动程序后,就可以通过该方法来获得数据库连接。在调用getConnection方法时,要向方法传入数据库的URL参数, DriverManager类将根据这个参数值来选择相应的驱动程序,并向用户返回数据库连接
数据库连接是由Connection接口表示的,它提供生成数据库语句的方法。在JDBC中,能够访问数据库的语句共有三类,即:Statement语句、PreparedStatement语句、CallableStatement语句。
JDBC数据库访问语句中嵌入SQL语句,然后调用相应的execute方法就可以执行这些SQL语句了
如果是SQL查询语句,查询结果将存储到ResultSet对象中。通常称ResultSet为结果集
Connection接口分别为生成三种不同的数据库语句声明了相应的方法:
createStatement方法
prepareStatement方法
prepareCall方法
使用JDBC访问数据库
向DriverManager类注册数据库驱动程序,可以注册一个,也可以注册多个。注册的一般方法是调用Class. forName方法,也可以通过设置jdbc.drivers的系统属性来实现注册
调用DriverManager. getConnection方法,取得代表数据库连接的Connection对象
使用Connection对象生成数据库语句。可以是下面三者之一:
Statement语句
PreparedStatement语句
CallableStatement语句
在数据库语句中嵌入SQL语句,完成对数据库的查询、更新、插入和删除操作
关闭数据库语句,关闭数据库连接
实例:
Class.forName("oracle.jdbc.driver.OracleDriver");//加载Oracle数据库驱动
//连接数据库
String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
String user="hr";
String password="123";
String sql;
Connection con=DriverManager.getConnection(url,user,password);
//数据库查询
//方法1
Statement stm=con.createStatement();
sql="select * from employees";
ResultSet rs=stm.executeQuery(sql);
while (rs.next()){
System.out.println(rs.getString(2)+" "+rs.getInt("salary"));
}
rs.close();
stm.close();
//方法2
String sql1="select * from employees where salary>? and department_id=?";
PreparedStatement pstm=con.prepareStatement(sql1);
pstm.setInt(1,10000);
pstm.setInt(2,80);
ResultSet rs1=pstm.executeQuery();
while (rs1.next()){
System.out.println(rs1.getString(2)+" "+rs1.getInt("salary"));
}
//方法3调用存储过程
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
String sql2="{call getAvgSalary_ByDepartmentName(?,?)}";
CallableStatement csmt=con.prepareCall(sql2);
double avg;
csmt.setString(1,"Sales");
csmt.registerOutParameter(2, OracleType.STYLE_DOUBLE);
csmt.execute();
System.out.println("!!!!!!!!!");
avg=csmt.getDouble(2);
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println("平均工资:"+avg);
rs1.close();
pstm.close();
con.close();