java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。
- 大多数JDBC驱动程序都支持事务;
- 与数据库建立连接的标准方法是调用DriverManager.getConnection方法;
- JDBC提供了三个类,用于向数据库发送SQL语句。Connection接口中的三个方法可用于创建这些类的实例:
(1)Statement:由方法createStatement所创建。Statement对象用于发送简单的SQL语句。
(2)PreparedStatement:由方法prepareStatement所创建。PreparedStatement对象有可能比Statement对象的效率更高,因为它已被预编译过并存放在那以供将来使用。
(3)CallableStatement:由方法prepareCall所创建。
jdbc连接数据库并执行SQL语句进行crud实例:
涉及到的包:都是SQL的:驱动管理,连接对象、处理对象、结果集
DriverManager:依据数据库的不同,管理JDBC驱动;
Connection:负责连接数据库并担任传送数据的任务
Statement:负责执行SQL语句;
ResultSet:负责保存Statement执行后所产生的查询结果
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
executeUpdate执行insert、delete、update的SQL操作,此处之举删除SQL为例,对应插入、修改和删除一样,只需将sql改成对应的插入、修改数据库语言即可
void delete() {
// TODO Auto-generated method stub
String url = "jdbc:mysql://192.168.1.45:3306/employ";
String uerName = "root";
String password = "udd@123";
// 1.注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection conn = null;
Statement stmt = null;
try {
// 2.获得连接对象
conn = DriverManager.getConnection(url, uerName, password);
// 3.获得处理对象
stmt = conn.createStatement();
// 4.进行crud
String sql = "DELETE FROM emp WHERE emp_no=99";// 删除SQL
/**
* executeUpdate执行增删改,操作数据的SQL;executeQuery执行查询语句
*/
int lines = stmt.executeUpdate(sql);// 返回操作影响的数据库行数
System.out.println("影响行数:" + lines);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 5.释放资源
try {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
executeQuery执行select查询语句,返回结果集ResultSet,比executeUpdate多一个结果集处理
private static void query() {
// TODO Auto-generated method stub
String url = "jdbc:mysql://192.168.1.45:3306/employ";
String uerName = "root";
String password = "udd@123";
// 1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 2.获得连接对象
conn = DriverManager.getConnection(url, uerName, password);
// 3.获得处理对象
stmt = conn.createStatement();
// 4.进行crud
String sql = "select * FROM emp";// 查询SQL
/**
* executeUpdate执行增删改,操作数据的SQL;executeQuery执行查询语句
*/
rs = stmt.executeQuery(sql);
// 5. 解析结果集
while (rs.next()) {// 判断游标下移是否有数据
int empNo = rs.getInt("emp_no");
// 数据库下标从1开始rs.getInt(1)
String empName = rs.getString("emp_name");
boolean sex = rs.getBoolean("sex");
double salary = rs.getDouble("salary");
String birthDay = rs.getString("birthday");
Emp emp = new Emp(empNo, empName, salary, sex, birthDay);
System.out.println(emp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 6.释放资源
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
代码涉及到的库表:
emp对象
public class Emp {
private Integer empNo;
private String empName;
private double salary;
private boolean sex;
private String birthday;
public Emp(Integer empNo, String empName, double salary, boolean sex, String birthday) {
this.empNo = empNo;
this.empName = empName;
this.salary = salary;
this.sex = sex;
this.birthday = birthday;
}
@Override
public String toString() {
return "Emp [ 姓名:" + empName + ", 员工号:" + empNo + ", 薪资:" + salary + ", 性别:" + (sex ? "男" : "女") + ", 生日:" + birthday + "]";
}
}