JDBC(Java DataBase Connectivity)
1.什么是JDBC
JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
2.JDBC的原理
早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!
JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
3.JDBC 的好处:
- 程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。
- 使用同一套 Java代码,进行少量的修改就可以访问其他 JDBC 支持的数据库
4.DBUtil
package util;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DBUtil {
private static final DataSource dataSource;
static {
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setServerName("127.0.0.1");
mysqlDataSource.setPort(3306);
mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("123456");
mysqlDataSource.setDatabaseName("servlet_demo_java21");
mysqlDataSource.setUseSSL(false);
mysqlDataSource.setCharacterEncoding("utf8");
mysqlDataSource.setServerTimezone("Asia/Shanghai");
dataSource = mysqlDataSource;
}
public static Connection connection() throws SQLException {
return dataSource.getConnection();
}
}
5.JDBC——get
private List<Information> getInfoList() throws ServletException {
List<Information> informationList = new ArrayList<>();
try (Connection c = DBUtil.connection()) {
String sql = "SELECT name, gender, hobby, xueli, suggestion FROM informations ORDER BY id";
try (PreparedStatement s = c.prepareStatement(sql)) {
try (ResultSet rs = s.executeQuery()) {
while (rs.next()) {
Information info = new Information();
info.name = rs.getString("name");
info.gender = rs.getInt("gender") == 0 ? "女" : "男";
String[] hobbies = rs.getString("hobby").split(":");
info.hobbyList.addAll(Arrays.asList(hobbies));
info.xueli = rs.getString("xueli");
info.suggestion = rs.getString("suggestion");
informationList.add(info);
}
}
}
} catch (SQLException exc) {
throw new ServletException(exc);
}
return informationList;
}
6.JDBC——save
public void save(String name, String gender, String hobby, String xueli, String suggestion) throws SQLException {
String sql = "INSERT INTO informations(name, gender, hobby, xueli, suggestion) VALUES (?, ?, ?, ?, ?)";
try (Connection c = DBUtil.connection()){
try (PreparedStatement s = c.prepareStatement(sql)){
s.setString(1, name);
s.setString(2, gender);
s.setString(3, hobby);
s.setString(4, xueli);
s.setString(5, suggestion);
s.executeUpdate();
}
}
}