JDBC介绍
JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,
JDBC编程步骤
1.装载相应的数据库的JDBC驱动并进行初始化
导入专用的jar包(不同的数据可需要的jar包不同)
2.初始化驱动
通过初始化驱动类com.Orecal.jdbc.Driver,如果你使用的是mysql数据库那么该驱动类将不同。
Class.forName("com.Oracle.jdbc.Driver"); //将 com.Oracle.jdbc.Driver 类加载到java虚拟机中
2.建立JDBC和数据库之间的Connection连接
这里需要提供:数据库所处于的ip:127.0.0.1 (这里是本机,如果连接其他电脑上的数据库,请改变该ip)
数据库的端口号:
数据库名称
编码方式
账号
密码
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SCOTT", "TIGER");
//建立JDBC和数据库之间的connection连接
之后我们就可以使用connection接口中的方法来操作数据库了
使用Statement接口来操作数据库,用于执行sql语句
Statement s = conn.createStatement(); // 创建向数据库发送sql语句的statement接口类的对象
// 准备sql语句
// 注意: 字符串要用单引号'
String sql = "insert into t_courses values(null,"+"'数学')";
//在statement中使用字符串拼接的方式,这种方式存在诸多问题
s.execute(sql);
System.out.println("执行插入语句成功");
使用PreparedStatement接口 和上面的方法大同小异 但是之间的区别是
1)使用PreparedStatement时,他的SQL语句不再采用字符串拼接的方式,而是采用占位符的方式。“?”在这里就起到占位符的作用。这种方式除了避免了statement拼接字符串的繁琐之外,还能够提高性能。每次SQL语句都是一样的,数据库就不会再次编译,这样能够显著提高性能。
2)后面需要用到PreparedStatement接口创建的pstmt的set方法给占位符进行赋值。注意一点,这里的参数索引是从1开始的。
String str="select * from sxt_user where name=? and pwd=?";
Connection conn=null;
PreparedStatement sta =null;
ResultSet result =null;
conn=SqlTest.getConnection(); // 获取一个与数据库有连接的connection对象
sta=conn.prepareStatement(str);
sta.setString(1,name);
sta.setString(2,pwd);
result=sta.executeQuery();
while (result.next()){
Object o =result.getObject(1);
System.out.println(o);
}
SqlTest.release(conn, sta,result);
通过ResultSet 接口获取connection接口返回的对象
ResultSet rs = s.executeQuery(sql);
利用While(ResultSet.next()){…}循环将集合ResultSet中的结果遍历出来。
ResultSet.getXX();
这里的get方法的括号里面可以填属性值,如下图代码中的course_id,还可以填该属性在数据表中的列号,从1开始编码,例如:course_id在我的t-courses数据表中位于第一列,所以执行get方法的时候,我除了代码段中写法外,还可以这样写int
courseId = rs.getInt(1);
result=sta.executeQuery();
while (result.next()){
Object o =result.getObject(1);
System.out.println(o);
}
操作完之后我们需要关闭资源 , 下面来看一下
在JDBC编码的过程中我们创建了Connection、ResultSet等资源,这些资源在使用完毕之后是一定要进行关闭的。关闭的过程中遵循从里到外的原则。因为在增删改查的操作中都要用到这样的关闭操作,为了使代码简单,增加其复用性,这里我将这些关闭的操作写成一个方法和建立连接的方法一起放到一份工具类中。
public static void release(Connection conn ,Statement sta , ResultSet resule){
if(resule!=null){ // 这里来判断一下 如果返回的resule对象不是空
try {
resule.close(); // 关闭
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
if(sta!=null){ // 同样判断
try {
sta.close(); // 关闭
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
if(conn!=null){ // 同样判断connection接口
try {
conn.close(); // 关闭
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
接下来 我们看一下整个执行流程
// Class.forName("com.Oracle.jdbc.Driver"); //Class.forName() 加载了指定类后,若类中有静态初始化器,JVM必然会执行该类的静态代码段,而JDBC的Driver类都是会有static代码块
// Connection conn =DriverManager.getConnection(url, user, password); // 获取数据库和jdbc连接的connection对象
// Statement sta = conn.createStatement(); // 实例化一个statement对象 //Statement接口,通过Connection接口的createStatement()方法实例化,来操作数据
// ResultSet res = sta.executeQuery(sql); // 查询
// ResultSet res1 = sta.executeUpdate(sql); // 修改
// //PreparedStatement接口 // 需要准备好一条SQL语句 SQL语句中存在占位符 在PreparedStatement的实例化对象调用set方法给占位符赋值
// PreparedStatement pre = conn.prepareStatement(sql);
// pre.setString(parameterIndex, x);
// ResultSet res2 = pre.executeQuery(); // 查询
// ResultSet res3 = pre.executeUpdate(sql); // 修改
//
// while (rs.next()){
// int courseId = rs.getInt("course_id");
// String courseName = rs.getString("course_name"); //每个记录对应一个对象
// Course course = new Course();//在我的项目中创建了course类,其中定义了set方法,所以这里将查询到的值传给了course,也可以直接打印到控制台
// course.setCourseId(courseId);
// course.setCourseName(courseName); //将对象放到集合中
// courseList.add(course); }
// }
1连接数据库的基本流程
2)加载驱动(选择数据库)
3)获取连接(与数据库建立连接)
4) 准备sql
5)创建处理块(发送执行sql的工具)
6)发送sql(这里发送sql语句)
7)结果集
8)关闭连接
这就是JDBC的整个流程了
JDBC就到这里了
2019.07.26