JDBC接口
java 连接数据库
- 需要 mysql 驱动的包
jdbc.properties 文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mydata
user=root
password=123456
jdbc.java 文件
import java.sql.*;
import java.util.*;
// 使用资源绑定器绑定属性配置文件
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
// 注册驱动 第一种
Driver driver = new Driver();
DriverManager.registerDriver(driver);
// 注册驱动 第二种
Class.forName(driver);
Class.forName("com.mysql.jdbc.Driver"); // 直接从 mysql 驱动包 Driver.class 执行类加载
// 获取连接
url:
jdbc:mysql://machine_name:port/dbname
jdbc:mysql://127.0.0.1:3306/mydata
Connection conn = DriverManager.getConnection(url, "root", "123456");
conn.setAutoCommit(false); // JDBC事务机制默认自动提交,设置 false 关闭自动提交
// 获取数据库操作对象
// Statement 专门执行 sql 语句
Statement stmt = conn.createStatement();
sql = "select * from t_user where name = ? and pwd = ?"; // ?表示一个占位符,不能用单引号括着
PreparedStatement ps = conn.prepareStatement(sql); // 预编译 sql 语句,防止sql注入
// 执行 sql 语句
stmt.executeUpdate(sql); // DML语句,返回 int 改动了多少条
rs = stmt.executeQuery(sql); // 查询语句,返回 ResultSet
while(rs.next()); // 执行下一行看是否有数据
rs.getString(1); // 获取某一行中第一列的数据,JDBC下标从1开始
rs.getString("name"); // 最好写列名
ps.setString(1, name); // 给 预编译 第一个 ? 传值
ps.setString(2, pwd); // 给 预编译 第二个 ? 传值
rs = ps.executeQuery();
conn.commit(); // 等待事务结束,手动提交
// 程序前半部分 sql 执行了,后半部分发生错误,sql 没有同时执行成功要进行回滚
catch(Exception e) {
// 回滚事务
if (conn != null) {
try {
conn.rollback();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
// 释放资源,数据库已经操作完毕,检查数据库是否关闭
finally {
try {
if (rs != null) {
rs.close();
}
}
try {
if (stmt != null) {
stmt.close();
}
} catch(SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
}
}