一.
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);
}
}