java Database connectivity(JDBC),即在java中写sql语句,对mysql数据库中数据进行CRUD操作。其相关类库在java.sql.*下面。JDBC质是sum制定好的一套接口。mysql数据库厂家对JBDC接口进行实现。如:
public class MySQL implements JDBC(){
//获取连接,不同的厂家才能实现连接不同的数据库,如:ORACLE,MYSQL
public void getConnection(){
System.out.println("连接mysql数据库");
}
}
使用者不需要关心底层是什么数据库,只用关心JDBC接口。如下:
public class Main {
public static void main(String[] agrs){
//是什么数据库就new哪个数据库实现的对象
JDBC jdbc=new MySQL();
jdbc.getConnection();
}
}
mysql数据库实现的类在mysql-connector-java-版本-bin.jar(mysql的驱动)。开发JDBC之前,需要把jar包配置到classpath之中。必须能让类加载器能够找到驱动。
一、JDBC执行增删改业务
package com.fan;
//mysql5.0以后的版本不支持com.mysql.jdbc.Driver,必须用后面这个
import com.mysql.cj.jdbc.Driver;
import java.sql.*;
/*JDBC编程六步:
* 1,注册驱动(通知java要连接哪个数据库)
* 2,获取数据库连接(开启java和mysql两个进程的通道)
* 3,获取数据库操作对象
* 4,执行SQL语句
* 5,处理查询结果集(第四步是select语句,才有这一步)
* 6,释放连接(JDBC是进程间的通信,占用很多资源)
* */
public class Test {
public static void main(String[] args) throws SQLException {
//1,注册驱动
//使用了多态,后面的com.mysql.jdbc.Driver是mysql实现的java.sql.Driver这个接口
//两个Driver前缀最多省一个,不然jvm分不清
java.sql.Driver driver=new Driver();
DriverManager.registerDriver(driver);
//2,获取数据库连接
//url是统一资源定位符,每个url都包括了:
//协议+IP地址+端口号+资源名
//协议:提前规定好的数据传输格式
//端口号:定义某个计算机上的服务
//资源是指该服务上的某个资源
//localhost就是本机IP地址,等同于127.0.0.1
//oracle的url应该写为:oracle:jdbc:thin:@localhost:1521:资源名
String url="jdbc:mysql://localhost:3306/mydata";String user="root";String password="ysh123";
//在执行getConnection的时候,底层new了一个com.mysql.cj.jdbc.JDBC4Connection类
//该类实现的是java.sql.Connection这个接口
Connection con=DriverManager.getConnection(url,user,password);
//3,获取操作对象
//创建一个Statement对象,用来把SQL语句发送到数据库,通过一个连接可以创建多个Statement对象
Statement stam=con.createStatement();
//4,执行SQL语句
String sql="delete from student where sid=11";
//executeUpdate一般执行update,delete,insert,返回值int类型,表示受影响的记录数
//而executeQuarry一般执行select语句,返回ResultSet类型
int count=stam.executeUpdate(sql);
System.out.println(count);
//5,释放连接,先释放Statement,再释放Connection
stam.close();
con.close();
}
}
二、JDBC处理查询结果
package com.fan;
import java.sql.*;
public class Test {
public static void main(String[] args) {
//1,注册驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con=null;Statement sta=null;
//2,获取连接
try{
String url="jdbc:mysql://localhost:3306/mydata";
String user="root";String password="ysh123";
con=DriverManager.getConnection(url,user,password);
//3,创建连接对象对应的Statement对象
sta=con.createStatement();
//4,用sta对象传输SQL语句,executeQuery专门执行查询语句,返回一个ResultSet的对象
String sql="select sid,sname,ssex from student";
ResultSet rs=sta.executeQuery(sql);
//5,处理查询结果集
//ResultSet中的next()方法,执行后光标后移一位,返回布尔类型表示还有没有下一个元素。最开始不指向数据
//类似于集合的迭代器
while(rs.next()){
System.out.println(rs.getString("sid")+"\t"+rs.getString("sname")+"\t"+rs.getString("ssex"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
//6,关闭连接对象和Statement对象
if (con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (sta!=null){
try {
sta.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
三、用配置文件读取数据
可以把要输入程序的变量写在一个.properties配置文件中:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydata
user=root
password=ysh123
在主程序中用ResourceBoudle调用:
ResourceBundle db=ResourceBundle.getBundle("resource/db");
String driver=db.getString("driver");
String url=db.getString("url");
String user=db.getString("user");
String password=db.getString("password");
这样要连接的数据库发生改变只用修改配置文件,不用修改源码