1.工作中难免会和数据库打交道,访问数据库前提就需要和数据库建立连接,才能进行读写操作。
2.Java提供了一个API也就是JDBC(Java Data Base Connectivity),可以为多种关系数据库提供统一访问和操作,它由一组用Java语言编写的类和接口组成。
- 没有jdbc之前
java开发人员需要维护不同的数据库的驱动程序,如果数据库的底层实现改变,驱动程序可能会随之改变!!
- 有了jdbc之后:
java开发人员只需维护java应用和一套规范,也就是jdbc接口。数据库厂商提供具体的java驱动程序,数据库厂商的底层实现改变,厂商随之更新驱动程序,而不影响java应用程序!!
3.具体步骤
-
导入数据包
需要包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用 import java.sql.* 就可以了. -
添加JDBC驱动程序包
添加jar程序驱动包http://www.mysql.com/downloads/connector/j,初始化驱动程序,可以与数据库打开一个通信通道。 -
打开数据库连接
需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接。 -
执行数据库操作
需要使用类型声明的对象建立并提交一个SQL语句到数据库。 -
从结果集中提取数据
要求使用适当的关于ResultSet.getXXX()方法来检索结果集的数据。 -
清理环境
需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。
<----------------------------------------------------------------------------------------------->
编写JDBCUtil类
package com.jdbc.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtil {
// 驱动包,数据库url,用户名,密码
private static String url = null;
private static String driverClass = null;
private static String user = null;
private static String password = null;
static{
try {
//读取db.properties文件
Properties prop = new Properties();
/**
* 使用类路径的读取方式
* / : 斜杠表示classpath的根目录
* 在java项目下,classpath的根目录从bin目录开始
* 在web项目下,classpath的根目录从WEB-INF/classes目录开始
*/
InputStream in = JDBCUtil.class.getResourceAsStream("/db.properties");
//加载文件
prop.load(in);
//读取信息
url = prop.getProperty("jdbcUrl");
driverClass = prop.getProperty("dirverclass");
user = prop.getProperty("user");
password = prop.getProperty("password");
//注册驱动程序
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
System.out.println("驱程程序注册出错");
}
}
/**
* 打开数据库驱动连接
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 清理环境,关闭连接(顺序:后打开的先关闭)
*/
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(rs!=null)
try {
rs.close();
} catch (SQLException e1) {
e1.printStackTrace();
throw new RuntimeException(e1);
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
//测试
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
conn=JDBCUtil.getConnection();
try {
stmt=conn.createStatement();
//sql语句
String sql= "SELECT id, name FROM temp";
rs = stmt.executeQuery(sql);
//从结果集中提取数据
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.print("ID: " + id);
System.out.println(", Name: " + name);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtil.close(conn, stmt, rs);
}
}
}
<----------------------------------------------------------------------------------------------->
配置文件db.properties
user=root
password=
jdbcUrl=jdbc:mysql://localhost:3306/test
dirverclass=com.mysql.jdbc.Driver