JDBC连接数据库的步骤
JDBC连接数据库可以概括为6步,分别是加载JDBC驱动、建立数据库连接、创建一个语句对象、执行一个查询、处理结果集和关闭数据库连接,下面将分别予以详细介绍。
1. 加载JDBC驱动
如果使用第一种数据库驱动(JDBC-ODBC桥)连接,那么可以使用java反射机制中的方法forName()进行加载,如:
Class.forName(“sun.jdbc.odbc.jdbcOdbcDriver”);
另外还有几种常见的驱动程序包括Oracle的驱动程序、Microsoft SQL Server的驱动程序和MySQL的JDBC的驱动程序,其加载 语句分别是:
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
Class.forName(“com.mysql.jdbc.Driver”);
2. 建立数据库连接
驱动管理类DriverManager使用特定的驱动程序,通过getConnection(String usr)方法建与某个特定数据库的连接。每个JDBC驱动都对应一个URL地址用于自我标识,常见的有连接Sun公司的JDBC-ODBC驱动URL、连接Oracle公司的URL、连接Microsoft公司SQL Server的URL和连接MySQL的URL,分别是:
jdbc:odbc:pubsdb;
jdbc:oracle:thin:@localhost:1521:orcl;
jdbc:Microsoft:sqlserver://127.0.0.1:1433;
jdbc:mysql://localhost:3306/mysql;
例如,连接MySQL:
Connection con
=DriverManager.getConnection(“jdbc:mysql://localhost/sample”,username,password);
或
String url=”jdbc:mysql://localhost/sample”; //sample表示的是数据库,localhost为主机或服务器
String username, //登录MySQL数据库的用户名
String password; //登录MySQL数据库的密码
Connection conn=DriverManager.getConnection(url,username,password);
3. 创建一个语句对象
创建一个语句对象则需要调用接口java.sql.Connection中的createStatement()方法创建Statement类的语句对象,如:
Statement st=con.createStatement();
通过创建一个语句对象则可以发送SQL语句到数据库准备执行相应的操作。
4. 执行SQL语句
将SQL语句发送到数据库之后,根据发送的SQL语句确定执行executeQuery()方法或executeUpdate()方法,如果发送的SQL语句是SELECT语句则需要执行executeQuery()方法,如果发送的是SQL语句是Insert()语句、Create语句、Delete语句和Update语句则需要执行executeUpdate()方法,如:
//执行select类型的SQL语句。
ResultSet rs=statement.executeQuery(“SELECT sno,sname FROM student”);
//执行insert类型的SQL语句。
int num=statement.executeQuery(“INSERT INTO student values(„2006081203‟,‟san‟,‟女‟)”);
5、关闭对象
使用完对象之后,记得关闭它们
rs.close();
st.close();
conn.close();
总结来说:大大小小共6步:如下
1、加载驱动
2、创建与数据库的链接
3、得到用于向数据库发送sql语句的statement
4、向数据库发送sql,并得到代表结果集的resultset
5、从resultset获取数据
6、关闭链接,释放资源
例子:
1、首先写一个数据库的工具类相当于工具包,取名为JdbcUtils
package cn.edu.xyc.utils;
//jdbc工具类,为了保证程序的灵活性
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 JdbcUtils {
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
// 静态代码块是为了只加载一次驱动
static {
try {
/**
* driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/JDBC1
username=root
password=root
*/
InputStream in = JdbcUtils.class.getResourceAsStream("db.properties");//db数据库的属性文件
Properties prop = new Properties();
prop.load(in);
driver = prop.getProperty("driver");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
// 加载驱动,并获取与数据库的链接
public static Connection getconnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
// 释放
public static void release(Connection conn, Statement st, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
rs=null;
}
if (st != null) {
try {
st.close();
} catch (Exception e) {
e.printStackTrace();
}
// st=null;
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
// conn=null;
}
}
}
2、然后使用工具类实现对数据的CRUD
package cn.edu.xyc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
import cn.edu.xyc.utils.JdbcUtils;
//使用jdbc进行数据库的增删改查
public class Demo4 {
@Test
public void insert(){
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getconnection();
st = conn.createStatement();
String sql = "insert into user(id,name,password,email,birthday) values(6,'xxx','1223','tu@tuchuanjun.com','1994-08-06')";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println("插入成功!!!");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtils.release(conn, st, rs);
}
}
@Test
public void delete(){
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getconnection();
st = conn.createStatement();
String sql="delete from user where id = 5";
int num = st.executeUpdate(sql);
if(num>0)
{
System.out.println("删除成功!!!");
}
} catch (Exception e) {
}finally{
JdbcUtils.release(conn, st, rs);
}
}
@Test
public void update(){
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getconnection();
st = conn.createStatement();
String sql = "update user set name='tu2',password='tu2' where id=2";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println("更新成功!!!");
}
} catch (Exception e) {
// TODO: handle exception
}finally{
JdbcUtils.release(conn, st, rs);
}
}
@Test
public void select(){
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getconnection();
st = conn.createStatement();
String sql = "select * from user where id=1;";
rs = st.executeQuery(sql);
if(rs.next()){
System.out.println(rs.getString("name"));
}
} catch (Exception e) {
// TODO: handle exception
}finally{
JdbcUtils.release(conn, st, rs);
}
}
}