JDBC:Java DataBase Connectivity java语言数据库的连接技术
ODBC: 一种比较早的桥接的一种方式,主要是依赖window网络进行连接的技术 目前已经被淘汰。
驱动方式:本地的API的驱动方式
用到java.sql包 扩展包 javax.sql
主要步骤:
1.使用DriverManager 进行加载驱动 Driver
2.通过驱动的加载拿到连接对象 Connection
3.通过connection对象获取到 Statement
4.使用Statement对象 进行sql查询或更新
5.查询执行完一定会拿到一个结果
6.关闭资源()
DriverManager 类主要负责: 驱动的加载和管理 获取连接
Driver 接口: 具体的实现由数据库厂商提供
Connection 接口 :主要负责连接工作
代码实现:
package com.wmh.web; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; //1.使用DriverManager 进行加载驱动 Driver //2.通过驱动的加载拿到连接对象 Connection //3.通过connection对象获取到 Statement //4.使用Statement对象 进行sql查询或更新 //5.查询执行完一定会拿到一个结果 //6.关闭资源 // URL URI public class Test { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1 加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2获取连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root","123456"); //3.获取statement对象 Statement st = conn.createStatement(); //4.进行查询 返回结果集 ResultSet rs = st.executeQuery("select * from tb1"); //5. 对结果进行遍历 while(rs.next()){ System.out.println(rs.getString("username")+":"+rs.getInt("age")+":"+rs.getFloat("salary")); } //6.关闭 rs st conn rs.close(); st.close(); conn.close(); } }JDBC封装
代码的优化:
加载驱动 来做处理 private String driver = "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/demo"; private String username = "root"; private String password = "123456"; //因为加载驱动这件事情 在程序启动的时候就被加载且只执行一次 static{ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }2.关于Connection获取方式
静态方法
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, username,password);
}
3.资源关闭的问题
/** * 释放资源 * mysql的连接资源 比较珍稀的资源 * 尽晚的获取连接,尽早释放资源 * @param conn * @param st * @param rs */ public static void jdbcClose(Connection conn,Statement st,ResultSet rs){ try { if(rs != null){ rs = null; } rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(st!=null){ st = null; } st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(conn!=null){ conn = null; } conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }封装update:
/** * 添加,修改,删除 */ public void update(String sql){ try { conn = getConnection(); st = conn.createStatement(); int bRet = st.executeUpdate(sql); System.out.println(bRet); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ jdbcClose(conn, st); } }测试:
public class JDBCUtilsTest { public static void main(String[] args) { String sql = "insert into tb1 (username,age,salary) values('wangliu',9,1.00)"; String sql1 ="update tb1 set age = age-1 where username='wangliu'"; String sql2 = "delete from tb1 where username='wangliu'"; JDBCUtils jdbcutils = new JDBCUtils(); jdbcutils.update(sql2); } }JunitTest:单元测试
public class JDBCUtilsTest { @Test public void testUpdate() { JDBCUtils jdbcutils = new JDBCUtils(); String sql = "insert into tb1 (username,age,salary) values('wangliu',9,1.00)"; jdbcutils.update(sql); } @Test public void testUpdate1() { JDBCUtils jdbcutils = new JDBCUtils(); String sql1 ="update tb1 set age = age-1 where username='wangliu'"; jdbcutils.update(sql1); } }