JDBC
概述
JDBC简介
- 在java语言中编写sql语句,对mysql数据库中的数据进行增删改查操作
- JDBC实际是一个接口
JDBC本质
-
类库:java.sql.*;
-
这个包下都是JDBC的接口,sun公司制定的!
-
JDBC是体现“接口作用”的非常经典的例子。
-
JDBC降低了耦合度,提高了可扩展力。
-
对于java程序员来说,不需要关心数据库是哪个品牌。只要面向JDBC接口编程就行。
-
JDBC整个程序的结构当中有三波人???
-
第一波:sun公司,负责制定JDBC接口,这些接口已经写好了,在java.sql.*;
-
第二波:java.sql.*下面的所有接口都要有实现类,这些实现类是数据库厂商编写的。
我们连接的是mysql数据库,mysql数据库厂商的实现类在哪?
mysql-connector-java-5.1.49-bin.jar ---->术语:mysql的驱动
jar包中很多.class字节码文件,这是mysql数据库厂商写的接口实现!
注意:如果连接的是Oracle数据库,你需要从网上下载Oracle的jar包。
-
第三波:我们java程序员,面向JDBC接口写代码就行!
-
JDBC开发前的准备工作(如果使用IDEA 不需要配置)
-
mysql的驱动jar包,需要配置到classpath中
-
classpath=.;D:\os\mysql-connector-java-5.1.49-bin.jar
-
以上的classpath什么意思?
类加载器从当前路径下加载class,如果当前路径下没找到,
则去D:\os\mysql-connector-java-5.1.49-bin.jar找class文件
JDBC步骤
-
1.导入jar包 mysql-connector-java-5.1.49-bin.jar
1.复制mysql-connector-java-5.1.49-bin.jar到项目的libs目录下
2.右键–>Add As Library -
2.注册驱动
//方式一 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); /* 方式二 类加载注册 mysql厂家写的类: class com.mysql.jdbc.Driver{ static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } } } */ Class.forName("com.mysql.jdbc.Driver");
-
3.获取数据库连接对象Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");
-
4.获取数据库操作对象Statement
Statement stmt = conn.createStatement();
-
5.执行sql语句
String sql = ""; //执行查询语句,返回一个结果集 ResultSet rs = stmt.executeQuery(sql); //执行增删改查、DDL(create、delete、drop)语句,返回一个int整数:影响的行数,可以通过这个影响的行数判断是否执行成功,返回值回值>0则执行成功,反之,则失败。 int s = stmt.executeUpdate();
-
6.处理结果
//调用ResultSet接口中相应的方法遍历结果集 //将游标向下移动一行,指向的位置有数据,返回ture;返回false表示游标指向的位置没有数据了 while(rs.next()){ //JDBC所有下标都是从1开始的 //getXxx(参数):获取数据 //Xxx:代表数据类型 如:int getInt() String getString() //参数: //1.int 列从1开始 //2.String 字段名称 String result1 = rs.getString(1);//注意:getString()不管底层数据库是什么类型,统一返回字符串 String result2 = rs.getString("ename"); String result3 = rs.getString(3); System.out.println(result1+","+result2+","+result3); }
-
7.释放资源
- 从下往上关闭。
配置文件 jdbc.properties
#mysql connectivity configuration########
url=JDBC:mysql:///shop
user=root
password=root
driver=com.mysql.jdbc.Driver
数据库工具类
import java.sql.*;
import java.util.ResourceBundle;
/**
* 数据库工具类,便于JDBC的代码编写
*/
public class DBUtil {
//工具类中的构造方法一般是私有化的,为什么?
//构造方法私有化是为了防止new对象,为什么要防止new对象?
//因为工具类中的方法都是静态的,不需要new对象,直接使用“类名.”的方式调用。
private static String url;
private static String user;
private static String password;
private DBUtil(){}
//类加载时绑定属性资源文件
private static ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
//注册驱动
static {
try {
Class.forName(bundle.getString("driver"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接对象
* @return 新的连接对象
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
url = bundle.getString("url");
user = bundle.getString("user");
password = bundle.getString("password");
Connection conn = DriverManager.getConnection(url,user,password);
return conn;
}
/**
* 释放资源
* @param conn 连接对象
* @param stmt 数据库操作对象
* @param rs 查询结果集
*/
public static void close(Connection conn, Statement stmt, ResultSet rs){
if( rs != null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}