1、加载JDBC驱动程序
连接数据库之前,首先需要调用Class 的forName 方法加载数据库的JDBC 驱动程序。
例如加载MySQL的驱动程序:
Class.forName("com.mysql.jdbc.Driver");//通过java.lang.Class类中的静态方法forName()动态实现加载数据库驱动到JVM中
加载驱动程序后,就可以使用DriverManager.getConnection 方法建立与数据库的连接,得到Connection 对象,Connection 对象代表与数据库的连接。
DriverManager类是JDBC的管理层,作用于用户和驱动之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager 类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。
// 此方法为获取数据库连接 public static Connection getConnection() { Connection conn = null; try { String driver = "com.mysql.jdbc.Driver"; // 数据库驱动 String url = "jdbc:MySQL://127.0.0.1:3306/student"; //127.0.0.1是主机名(或者写成localhost);3306是MySQL服务器的端口;student是数据库的库名 String user = "root"; // 用户名 String password = ""; // 密码 Class.forName(driver); // 加载数据库驱动 if (null == conn) { conn = (Connection) DriverManager.getConnection(url, user, password); //创建数据库的连接 ,conn就代表一个数据库的连接。 } } catch (ClassNotFoundException e) { System.out.println("加载驱动失败!"); e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return conn; }
2、 Statement
Statement 对象提供了执行SQL 语句和获取结果的基本方法。Statement 对象可以通过调用Connection 对象的createStatement 方法来创建,例如:Statement stmt = cn.createStatement();
Statement实例有3种类型:
(1)执行静态SQL语句。通常通过Statement实例实现。
(2)执行动态SQL语句。通常通过PreparedStatement实例实现。
(3)执行数据库存储过程。通常通过CallableStatement实例实现。(不经常用)
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ; //sql可以动态传递参数
CallableStatement cstmt =con.prepareCall("") ;
Statement 对象的executeUpdate 方法执行对数据库的增、删、改等对数据库有改动的操作;
Statement 对象的executeQuery 方法执行对数据库的查询操作,得到结果集ResultSet 对象。
3、ResultSet
(1)ResultSet对象用来存放查询结果
ResultSet rs = stmt.extcuteQuery(sql);
(2) ResultSet对象的next方法(rs.next()):用于移动到结果集的下一行,有下一行则返回值为true
(3) ResultSet对象的getXXX方法获取当前某一列的值,参数可以是列号或列名,例如:getInt , getString
while(rs.next()) {
System.out.print(rs.getInt("id") + "\t");
System.out.print(rs.getString("name") + "\t");
}
4、关闭JDBC对象
/** * 释放ResultSet * @param rs */ public static void free(ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException err) { err.printStackTrace(); } } /** * 释放Statement * @param st */ public static void free(Statement st) { try { if (st != null) { st.close(); } } catch (SQLException err) { err.printStackTrace(); } } /** * 释放Connection * @param conn */ public static void free(Connection conn) { try { if (conn != null) { conn.close(); } } catch (SQLException err) { err.printStackTrace(); } } /** * 释放所有 * @param rs * @param st * @param conn */ public static void free(ResultSet rs, Statement st, Connection conn) { free(rs); free(st); free(conn); }
5 、JDBC的核心API
|- Driver : 驱动程序类实现的接口。
|-Connection connect(String url, Properties info) --用于连接数据库,得到连接对象
Properties 里需要设置的参数:
url: 数据库连接的URL字符串。协议+数据库子协议+主机+端口+数据库
user: 数据库用户名
password: 用户的密码
|-Connection : 与数据库连接的接口
|- Statement createStatement() --创建Statement对象,用于发送sql语句
|- PreparedStatement prepareStatement(String sql) -创建PreparedStatement对象,用于发送预编译的sql语句
|-CallableStatement prepareCall(String sql) --创建CallableStatement对象,用于调用存储过程。
|-Statement: 用于执行静态sql语句
|-int executeUpdate(String sql) --执行更新操作(DDL+DML)
|-ResultSet executeQuery(String sql) --执行查询操作(DQL)
|- PreparedStatement: 用于执行预编译的sql语句
|- int executeUpdate() -- 执行更新操作
|- ResultSet executeQuery() -- 执行查询操作
|- CallableStatement: 用于执行存储过程的sql
|- ResultSet executeQuery() --调用存储过程
|- ResultSet: 结果集。用于封装数据库的查询后的数据
|- boolean next() --将记录光标移动到下一行
|- Object getObject(int columnIndex) -- 得到字段上的值