目录
一、JDBC概念
JDBC全称是Java Database Connectivity,其中定义了一套标准的接口,不同的数据库厂商根据各自数据库的特点去实现这些接口。
二、使用JDBC步骤
- 装载驱动程序Driver,安装驱动管理Driver Manager,建立连接
- 创建语句对象
- 执行SQL语句
- 处理结果集
- 关闭资源(关闭陈述对象,关闭连接)
2.1 加载驱动
2.1.1 基本语法
Class.forName("驱动名称");
2.1.2 常见驱动(需要提前导入jar包)
- mysql
com.mysql.jdbc.Driver
- oracle
oracle.jdbc.driver.OracleDriver
2.2 建立连接
2.2.1 基本语法
Connection cnn = DriverManager.getconnection(url, 登录数据库用户名, 登录数据库密码);
2.2.2 常见url写法
- mysql
/*
* jdbc:mysql://数据库ip地址:端口/数据库名称
*/
String url = "jdbc:mysql://192.168.0.188:3306/testBatch";
pom.xml文件配置:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
- oracle
/*
* jdbc:oracle:thin:@数据库ip地址:端口:数据库名称
*/
String url = "jdbc:oracle:thin:@192.168.0.188:3306:testBatch";
pom.xml文件配置:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<!-- 有问题,搜索不到这个包 -->
2.3 创建语句对象
Statement stmt = conn.createStatement();
2.4 执行sql语句
2.4.1 执行DQL语句
/*
* executeQuery返回ResultSet结果集,代表二位查询结果,一般使用for循环遍历处理,查询失败抛出异常
*/
ResultSet rs = stmt.executeQuery(sql);
2.4.2 执行DML语句
/*
* executeUpdate返回结果是一个int类型,这条sql语句表示更新/添加/删除的记录数,失败抛出异常
*/
int flag = stmt.executeUpdate(sql);
2.4.3 执行DDL语句
boolean flag = stmt.execute(sql);
// 这个语句可以执行任何语句,但是一般执行DDL语句
/*
* 返回true代表有结果集,返回false代表没有结果集
* 创建失败跑出异常
*/
2.4.4 提交事务
conn.commit();
2.5 清理资源
// 关闭处理结果集
rs.close();
// 关闭陈述对象
stmt.close();
/*
* 上面两个操作应该在sql语句执行处理完就关闭,减少内存资源的开销
*/
// 关闭连接
conn.close();
三、ResultSet解析
/*
* 解析ResultSet结果集
*/
while(rs.next()){
int id = rs.getInt(1);
String sPassword = rs.getString(2);
String sName = rs.getString(3);
System.out.println("id = " + id + ", " + "sName = " + sName + ", " + "sPassword =" + sPassword);
}
四、案例
package com.mysql.demo;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.locks.StampedLock;
import java.sql.Connection;
public class MysqlConn {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// 装载驱动
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/mysql";
String user = "gupan";
String pwd = "free930923";
// 建立连接
conn = DriverManager.getConnection(url, user, pwd);
// 输出conn引用对象的实际类型
// System.out.println(conn.getClass());
stmt = conn.createStatement();
// 执行sql
/*
* 返回true代表有结果集,返回false代表没有结果集
* 创建失败跑出异常
*/
String ddl1 = "CREATE TABLE gupan_demo01 ("
+ "id int primary key auto_increment, "
+ "password varchar(30), "
+ "name varchar(30)"
+ ");";
// boolean flag = stmt.execute(ddl1);
// System.out.println(flag);
String dml1 = "INSERT INTO "
+ "gupan_demo01 "
+ "( "
+ "name, password "
+ ") "
+ "VALUES "
+ "( "
+ "'gupan', '123456'"
+ "), "
+ "( "
+ "'yuangungun', '234567'"
+ ")"
;
/*
* executeUpdate返回结果是一个int类型,这条sql语句表示更新/添加/删除的记录数,失败抛出异常
*/
// int rows = stmt.executeUpdate(dml1);
// System.out.println(rows);
/*
* executeQuery返回ResultSet结果集,代表二位查询结果,一般使用for循环遍历处理,查询失败抛出异常
*/
String dql1 = "select * from gupan_demo01;";
ResultSet rs = stmt.executeQuery(dql1);
/*
* 解析ResultSet结果集
*/
while(rs.next()){
int id = rs.getInt(1);
String sPassword = rs.getString(2);
String sName = rs.getString(3);
System.out.println("id = " + id + ", " + "sName = " + sName + ", " + "sPassword =" + sPassword);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
// 关闭陈述对象
stmt.close();
// 关闭数据库连接
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
五、封装
封装数据库连接:
package com.db.utils;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.management.RuntimeErrorException;
/**
* 封装数据库连接过程,简化数据库连接
*
* @author gupan
*
*/
public class DbUtils {
static String driver;
static String url;
static String user;
static String pwd;
/**
* 初始化静态属性
*/
static {
Properties cfg = new Properties();
InputStream in = DbUtils.class.getClassLoader().getResourceAsStream("db.properties");
try {
cfg.load(in);
// System.out.println(cfg);
// 初始化连接参数
driver = cfg.getProperty("jdbc.driver");
url = cfg.getProperty("jdbc.url");
user = cfg.getProperty("jdbc.user");
pwd = cfg.getProperty("jdbc.pwd");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static Connection getConnection(){
Connection conn = null;
// 装载驱动
try {
Class.forName(driver);
// 建立连接
conn = DriverManager.getConnection(url, user, pwd);
return conn;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 封锁复杂的数据库关闭方法
* @param conn
*/
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
执行数据库操作:
package com.db.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class UseUtil2Conn {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
conn = DbUtils.getConnection();
stmt = conn.createStatement();
String ddl1 = "CREATE TABLE gupan_demo01 ("
+ "id int primary key auto_increment, "
+ "password varchar(30), "
+ "name varchar(30)"
+ ");";
// boolean flag = stmt.execute(ddl1);
// System.out.println(flag);
String dml1 = "INSERT INTO "
+ "gupan_demo01 "
+ "( "
+ "name, password "
+ ") "
+ "VALUES "
+ "( "
+ "'gupan', '123456'"
+ "), "
+ "( "
+ "'yuangungun', '234567'"
+ ")"
;
// int rows = stmt.executeUpdate(dml1);
// System.out.println(rows);
String dql1 = "select * from gupan_demo01;";
ResultSet rs = stmt.executeQuery(dql1);
while(rs.next()){
int id = rs.getInt(1);
String sPassword = rs.getString(2);
String sName = rs.getString(3);
System.out.println("id = " + id + ", " + "sName = " + sName + ", " + "sPassword =" + sPassword);
}
/*
* 对于多条查询语句,应该释放查询结果,释放语句对象 ,否则会扩大内存开销,影响程序性能
*/
rs.close();// 释放查询结果
stmt.close(); // 释放语句对象
}catch (Exception e){
e.printStackTrace();
DbUtils.close(conn);
}
}
}