JDBC全称为java database connectivity(Java数据库连接),是sun公司指定的java数据库连接技术的简称。它是sun公司和数据库开发商共同开发出来的独立于DBMS的应用程序接口,它为java程序员进行数据库编程提供了统一的API。
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBC {
public static void main(String[] args){
Connection con = null;
PreparedStatement pStatement = null;
ResultSet res = null;
try{
// 1.注册驱动
Driver driver = new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver(driver);
//2.获取连接
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
String user = "root";
String password = "123456";
con = DriverManager.getConnection(url, user, password);
//3.获取数据库操作对象
String sql = "select * from students where sno=?";
pStatement = con.prepareStatement(sql);
pStatement.setInt(1,1026);
//4.执行sql语句
res = pStatement.executeQuery();
//5.处理查询结果集
if(res.next()){
System.out.println("查询成功,查询结果如下:");
System.out.print("学号为:"+res.getInt(1));
System.out.print(" 姓名为:"+res.getString("name"));
System.out.print(" 分数为:"+res.getInt(3));
}
}catch (SQLException e){
e.printStackTrace();
}finally {
//6.释放资源,try中的变量无法在finally中使用,关闭资源需从小到大依次关闭
try {
if (res != null) {
res.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (pStatement != null) {
pStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Driver driver = new com.mysql.cj.jdbc.Driver();
//第一个Driver是接口,第二个Driver是实现类
DriverManager.registerDriver(driver);
此处的两行代码也可用如下代码代替:
Class.forName("com.mysql.cj.jdbc.Driver");
该方法为类加载方法,要求JVM查找并加载指定的类,即该JVM会执行类的静态代码段,此方法将给定的类加载到Java虚拟机中。
Driver类:
resgisterDriver(Driver driver)(DriverManager类中的一个方法)方法:
修饰和类型 | 方法和说明 |
---|---|
static void | resgisterDriver(Driver driver) 注册给定的驱动程序 |
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
String user = "root";
String password = "123456";
con = DriverManager.getConnection(url, user, password);
url:统一资源定位符(某个资源的绝对路径)
其中包括:
- 协议
- IP地址
- 端口号(port)
- 资源名(此处的资源名为数据库名)
在数据库驱动的url后加上需加上“serverTimezone=UTC”,否则会报如下错误:
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'
is unrecognized or represents more than one time(提示系统时区出现错误)
getConnection(String url, String user, String password)(DriverManager类中的一个方法)方法:
修饰和类型 | 方法和说明 |
---|---|
static Connection | getConnection(String url, String user, String password) 尝试建立与给定的数据库URL的连接 |
String sql = "select * from students where sno=?";
pStatement = con.prepareStatement(sql);
pStatement.setInt(1,1026);
prepareStatement(String sql)(Connection类中的一个方法)方法:
类型 | 方法和说明 |
---|---|
PreparedStatement | prepareStatement(String sql) 创建一一个PreparedStatement对象, 用于将多参数化的SQL语句发送到数据库 |
setInt(int parameterIndex, int x)(prepareStatement类中的一个方法)方法:
类型 | 方法和说明 |
---|---|
void | setInt(int parameterIndex, int x) 将指定的参数设置为给定的Java int值 |
res = pStatement.executeQuery();
executeQuery()(PreparedStatement类中的一个方法)方法:
类型 | 方法和说明 |
---|---|
ResultSet | executeQuery() 执行此PreparedStatement对象中的SQL查询语句,并返回查询的ResultSet对象。 |
if(res.next()){
System.out.println("查询成功,查询结果如下:");
System.out.print("学号为:"+res.getInt(1));
System.out.print(" 姓名为:"+res.getString("name"));
System.out.print(" 分数为:"+res.getInt(3));
}
next()(ResultSet类中的一个方法)方法:
类型 | 方法和说明 |
---|---|
boolean | next() 将光标从当前位置向前移动一行 |
getString(int columnIndex)、getString(String columnLabel)(均为ResultSet类中的方法)方法:
类型 | 方法和说明 |
---|---|
String | getString(int columnIndex) 检索当前行中指定列(1,2,3…)的ResultSet对象为String的内容 |
String | getString(String columnLabel) 检索当前行中指定列(列名)的ResultSet对象为String的内容 |
在fianlly中关闭资源能保证资源一定释放(在try块中若其中一个语句抛出异常,则后面语句中的.close()会无法执行)。