本文使用程序架构如图:
JAVA数据库连接方法(JDBC)
一.概念了解:
1.【ODBC - 开放数据库连接】是数据库访问和连接的统一的接口
2.【JDBC - java数据库连接】按照ODBC的模式指定,是一个通用的,底层的支持SQL功能java API
3.【JDBC的组成】JDBC提供了两种接口
- JDBC API - 面向开发人员的API
- JDBC DRIVER API - 面向底层驱动程序开发商的API
4.【JDBC API】——重要
一系列编程接口,可以用来实现数据库连接,访问数据库等功能。
下面是相关类与接口的说明:
//DriverManager
驱动程序管理类,用于装载驱动程序,为数据库连接提供支持
//Connection
一个接口,用于连接一个数据库
//Statement
一个接口,提供了执行SQL语句并获取查询结果的方法
//PreparedStatement
用来执行预编译的SQL语句
//ResultSet
一个接口,提供了对结果集进行处理的方法
5.【JDBC DRIVER API】——了解
1. JDBC-ODBC 桥
2. 部分java技术的本地API驱动程序
3. 全部基于java技术实现的本地API驱动程序
4. 全部基于java技术的本地协议驱动程序
6.【配置JDBC的环境】——重要
下载JDBC MYSQL驱动包
解压后得到jar文件,在项目中导入
7.【操作数据库】——重要
加载JDBC驱动
打开连接
执行查询
操作结果集
关闭连接
二.数据库环境创建:
//数据库为:mydb 执行以下sql语句
CREATE TABLE student(
name VARCHAR(20) NOT NULL,
class VARCHAR(20) NOT NULL
);
INSERT INTO student VALUES(1,'吴小亮','0101');
INSERT INTO student VALUES(2,'刘京生','0101');
INSERT INTO student VALUES(3,'李向名','0102');
INSERT INTO student VALUES(4,'高大山','0102');
INSERT INTO student VALUES(5,'王前','0103');
INSERT INTO student VALUES(6,'李云飞','0103');
三.代码实例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SN_1_JDBC {
// 1.连接数据库的连接字符串
private static final String url = "jdbc:mysql://localhost:3306/mydb";
// 2.数据库用户名
private static final String user = "root";
// 3.数据库密码
private static final String pwd = "183686";
// 4.驱动的名称 就是用来给JDBC反射驱动的
private static final String driver = "com.mysql.jdbc.Driver";
public static void main(String[] args) {
try {
// 5. 加载JDBC驱动
Class.forName(driver);
// 6. 打开连接 (通过驱动和数据管理器获取数据库的连接通道)
Connection conn = DriverManager.getConnection(url, user, pwd);
// 7. 通过连接对象打开状态
Statement st = conn.createStatement();
// 8. 通过Statement对象来查询
String sql = "SELECT * FROM student";
ResultSet rs = st.executeQuery(sql);
// 9. 操作结果集
while (rs.next()) {
System.out.print(rs.getInt("sid") + "-" + rs.getString("name") + "-" + rs.getString("class") + "\n");
}
// 6. 关闭连接
conn.close();
st.close();
rs.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
四.程序优化与深入:
1.其中dbconfig.properties配置文件如下
driver=com.mysql.jdbc.Driver
dburl=jdbc:mysql://localhost:3306/mydb
uname=root
upwd=666
2. SN_2_JDBC 类:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 案例
* @author yujie
*
*/
public class SN_2_JDBC {
public static void main(String[] args) {
showAll();
insert();
delete();
update();
}
/**
* 查找信息
*/
private static void showAll() {
try {
Connection conn = ConnectionFactory.getConnection();
String sql = "SELECT * FROM student";
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(sql);
while (rs.next()) {
System.out.print(rs.getInt("sid") + "-" + rs.getString("name") + "-" + rs.getString("class") + "\n");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
/**
* 增加信息
*/
private static void insert() {
try {
Connection conn = ConnectionFactory.getConnection();
String sql = "INSERT INTO student VALUES (10,'吴缸','110')";
Statement stat = conn.createStatement();
int count = stat.executeUpdate(sql);
System.out.println("插入了" + count + "条记录。");
conn.close();
stat.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 删除信息
*/
private static void delete() {
try {
Connection conn = ConnectionFactory.getConnection();
Statement stat = conn.createStatement();
String sql = "DELETE FROM student WHERE sid = 2";
int count = stat.executeUpdate(sql);
System.out.println("删除了" + count + "条记录。");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 修改信息
*/
private static void update() {
try {
Connection conn = ConnectionFactory.getConnection();
Statement stat = conn.createStatement();
String sql = "UPDATE student SET name = '孙悟空' WHERE name = '高大山'";
int count = stat.executeUpdate(sql);
System.out.println("更改了" + count + "条记录。");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3. ConnectionFactory 类:
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class ConnectionFactory {
private static String driver;
private static String dburl;
private static String uname;
private static String upwd;
static {
Properties properties = new Properties();
InputStream is = ConnectionFactory.class.getClassLoader().getResourceAsStream("dbconfig.properties");
try {
properties.load(is);
driver = properties.getProperty("driver");
dburl = properties.getProperty("dburl");
uname = properties.getProperty("uname");
upwd = properties.getProperty("upwd");
System.out.println("配置文件读取成功!");
} catch (IOException e) {
System.out.println("配置文件读取异常!");
}
}
/**
* 获取连接对象
*
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException {
// 1. 加载JDBC驱动
Class.forName(driver);
// 2. 打开连接
Connection conn = DriverManager.getConnection(dburl, uname, upwd);
return conn;
}
}