大三学了那么久的java的JDBC一直没怎么用得上,今年有幸在一家公司实习接触了
一些项目总算是有那么点点明白了所谓的接口JDBC到底是怎么一回事的了
有时候不一定得很会用,那种只封装了几个工具类的一眼就能看出来 啊!这玩意儿是JDBC代码!
现在的开发更多的是Mybatis,Hibernate或者Spring Data(个人觉得Spring Data更方便因为用得更多),但是尽管用了很多不同的方法框架去完成项目其实都可以理解为在JDBC上封装了一层嘛,至少我是这么认为的
JDBC基础
1、什么是JDBC?
神——问答:什么是JDBC?
答:接口、API,可以连接数据库可以执行SQL语句的java API,最明显的就是带有interface的类,泛指供别人调用的方法或者函数
public interface Interface1{
}
接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
接口只是一种形式,接口自身不能做任何事,因为它的存在就像是一个集合,一个抽象方法的集合,让别的类去继承。
在我们写好接口之后为了让某类能够遵循接口的规则去使用,就会使用到一个关键字—>implements 关键字
class Class implements Interface1,[...]{
}
值得注意的是:一个类可以遵循多个接口,但是不能够实现接口中的抽象方法。
1、1 什么时候使用接口?
- 如果你拥有一些方法并且想让它们中的一些有默认实现,那么就使用抽象类
- 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
- 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
2、上文提到了数据库,那就不得不讨论一下数据库跟JDBC的关系
我们知道数据库是有它的图形界面的,通过这个就可以在里面执行一些相关操作,那么JDBC的作用就是:
- 总所周知数据库里的数据是给程序员用的,作为java程序员当然得用Java语言去链接访问所需得数据库
- 按理来说市面上有很多家数据库商,这就以至于每一家得厂商都会有属于自家产品得API,这样的话每一个我们都得去学习API的使用。sun公司为了简化给程序员减轻压力特意定义了一个接口,JDBC接口
- 这样一来就简化成了—>管你什么数据库我都只在我的JDBC上操作,至于不同的数据库只需要下载相对应的驱动包就行了,反正接口就那一个。
2、1 几个必掌握的接口
- Connection
- Statement
- ResultSet
Connection:
连接数据库的第一步,获取链接Connection
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果
2、2 链接数据库方法
①导入MySQL驱动包(这里以MySQL为例)
②装载数据库驱动程序
③获取到与数据库连接
④获取可执行SQL语句的对象
⑤执行SQL语句
⑥关闭连接
Connection connection = null;
try{
Class.forName("com.mysql.jdbc.Driver");
//获取对象
connection = DriverManager.getConnection("jdbc:mysql://localhost:8081/HYF","root","root");
//获取执行sql语句的对象
statement = connection.createStatement();
//执行sql语句拿到结果集
resultSet = statement.executeQuery("SELECT * FROM user");
//遍历结果得到数据
while(resultSet.next()){
System.out.println(resultSet.getString(1));
System.out.println(resultSet.getString(2));
}
}catch(SQLException e) {
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}finally{
/*
* 关闭资源,后调用的先关闭
* 关闭之前,要判断对象是否存在
* */
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
当然我的这个方法不一定是最简洁的,还有更好的方法