JDBC代表Java与数据库的连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,其允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
JDBC分为双层架构和三层架构
sql API https://docs.oracle.com/javase/8/docs/api/index.html
JDBC常用接口和类
1 public class DriverManager extends Object //这个类管理数据库驱动程序的列表,查看加载的驱动是否符合JAVA Driver API的规范 2 public interface Connection extends Wrapper, AutoCloseable //与数据库中的所有的通信是唯一的的连接对象 3 public interface Statement extends Wrapper, AutoCloseable // 4 public interface PreparedStatement extends Statement // 5 public interface CallableStatement extends PreparedStatement // 6 public interface ResultSet extends Wrapper, AutoCloseable //一个迭代器,用于检索查询数据
JDBC驱动的下载及配置
驱动的版本要和本地安装的 MySQL 的版本相匹配。
MySQL8 的驱动名称是 com.mysql.cj.jdbc.Driver
MySQL8 以下的驱动名称为 com.mysql.jdbc.Driver
Java定义了接口,不同数据库厂商具体实现
https://dev.mysql.com/downloads/connector/j/
下载解压后得到 JAR 包,其命名格式为 mysql-connector-java-version.jar
需要将该 JAR 导入到项目中,以 Intelli IDEA 为例向项目中导入该 JAR 包
选择 File --> Project Structure --> Modules --> 右侧 “+” --> JARs or directories --> 找到该 jar 包的路径 --> OK
JDBC编程步骤(六个步骤)
第一步 导入包(与JDBC相关的类都在java.sql包中)并加载相应的数据库驱动(使用反射技术)
1 import java.sql.*; // 导入JDBC相关的类
2 Class.forName(driverClass) 3 Class.forName("com.mysql.cj.jdbc.Driver") // 加载MySql驱动。固定写法
第二步 获得数据库连接(使用DriverManager的静态方法getConnection(String url, String name, String password))
1 static final String USER = "user"; 2 static final String PASSWORD = "password"; 3 Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/databaseName", USER, PASSWORD);
第三步 创建Statement或PreparedStatement对象(使用Connection中的方法)
1 Statement stat = conn.createStatement(); 2 PreparedStatement prestat = conn.prepareStatement(String sql);
第四步 执行sql语句,得到结果数据集
1 // 使用Statement 2 // QUERY 使用Statement类的executeQuery(sql)方法 3 ResultSet rs = stmt.executeQuery(sql); 4 // UPDATE INSERT DELETE 使用Statement类的executeUpdate(sql)方法 5 int rs = stmt.executeUpdate(sql); 6 7 // 使用PrepareStatement 8 // QUERY 使用PrepareStatement类的executeQuery()方法 9 ResultSet rs = preStmt.executeQuery(); 10 // UPDATE INSERT DELETE 使用PrepareStatement类的executeUpdate()方法 11 int rs = stmt.executeUpdate();
第五步 对于查询,处理数据集(使用ResultSet的next()和getXxx()方法)
1 while(rs.next()){ 2 int id = rs.getInt("id"); 3 int age = rs.getInt("age"); 4 String first = rs.getString("first"); 5 String last = rs.getString("last"); 6 }
第六步 关闭数据库链接资源 ResultSet、Statement、PrepareStatement、Connection都要依次关闭
1 result.close(); 2 stat.close(); 3 preStat.close(); 4 conn.close();
一个完整的例子
mysql-connector-java-8.0.13.jar 需要事先放到 build path 中
import java.sql.*; import java.util.Properties; public class DemoJdbc { public static void main(String [] args) throws Exception{ Properties properties = new Properties(); properties.setProperty("user", "leon"); properties.setProperty("password", "1234567"); properties.setProperty("useSSL", "false"); properties.setProperty("autoReconnect", "true"); String userName = "leon"; String password = "1234567"; String url01 = "jdbc:mysql://localhost:3306/test"; // test是数据库名称
// String url01 = "jdbc:mysql://127.0.0.1:3306/test" String url02 = "jdbc:mysql://localhost:3306/test?useSSL=false"; String driver = "com.mysql.cj.jdbc.Driver"; // 固定格式 Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { Class.forName(driver); conn = DriverManager.getConnection(url01,properties); // conn = DriverManager.getConnection(url02,userName, password); stmt = conn.prepareStatement("select * from sc where sno = ?"); stmt.setInt(1, 2018007); rs = stmt.executeQuery(); while (rs.next()){ System.out.println(rs.getInt("sno") + " " + rs.getString("cno") + " " + rs.getInt("scgrade")); } }catch (SQLException e ){ e.printStackTrace(); } finally { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } } }
执行结果