JDBC数据可的访问步骤
//1. 加载驱动程序 com.mysql.cj.jdbc.Driver 版本:8.0
Class.forName("JDBCDriverClass的完全限定名");//反射机制
//2.建立连接 使用DriverManager类的静态方法getConnection
Connection connection = DirverManager.getConnection(databaseUrl);
//3.创建语句
Statement statement = connection.createStatement();
//4.执行语句
statement.excute("SQL语句");//增删改操作
ResultSet resultSet = statement.execuQuery("SLQ语句");///查询操作
//5.处理ResultSet:遍历ResultSet的每条记录
while(resultSet.next()) resultSet.getString(n)
- JDBC数据库驱动
数据库 | 驱动程序JDBCDriverClass的完全限定名 | 来源 | classpath(数据库连接字符串,类似URL,每个数据库实例都有唯一的URL) |
---|---|---|---|
Access(桌面数据库:在同一台机器上) | sun.jdbc.odbc.JdbcOdbcDriver | 已在JDK中 | jdbc:odbc:dataSource |
MySQL | com.mysql.jdbc.Driver | mysql-connector-java-5.1.26.jar | jdbc:mysql://hostname:port/dbname |
MySQL | com.mysql.cj.jdbc.Driver | mysql-connector-java-8.0.15.jar | jdbc:mysql://localhost:3306/javacourse?serverTimezone=GMT |
ORACLE | oracle.jdbc.driver.OracleDriver | ojdbc6.jar | jdbc:oracle:thin://@hostname:port#oracleDBSID |
-
加载JDBC驱动
//使用反射方式加载:将驱动程序加载到JVM中,将该类导入到JVM中,目的不是得到该类的实例方法 Class.forName(" com.mysql.jdbc.Driver ");
-
连接数据库,获取连接对象
//方法原型 static Connection getConnection (String url, String user, String password) throws SQLException //方法实例 String url= "jdbc:mysql://localhost:3306/javacourse”; Connection con = DriverManager.getConnection(url, "root", "root");
-
创建语句对象
//方法原型 Statement createStatement() throws SQLException //方法实例 Statement sta = con.createStatement();
-
执行SQL语句
-
执行
DELETE、UPDATE、INSERT
之类的数据库操作语句 D M L \color{#F00}DML DML,该类语句无返回结果,使用statement对象的executeUpdate
方法执行。 -
由于参数是SQL语句字符串,因此如果SQL语句语法错误,Java编译器是无法检测出来的。(特别是SQL语句里的引号)
int executeUpdate(String sql) throws SQLException /*参数sql是要执行的SQL语句(字符串),执行成功返回受影响的行数,执行失败则抛出SQLException异常,必须捕捉*/ sta.executeUpdate("INSERT INTO Friends VALUES('田七', '重庆', 456712, '2003-2-25', 7500)");
-
执行SELECT数据查询语句 ( D Q L ) \color{#F00}(DQL) (DQL),从数据库中获取所需数据,使用statement的
executeQuery
方法执行;ResultSet executeQuery(String sql) throws SQLException /*参数sql是要执行的SQL语句,查询成功返回包含有结果数据的ResultSet对象,否则抛出SQLException异常,必须捕捉*/ ResultSet rs = sta.executeQuery("SELECT * FROM Friend"); //注意会返回ResultSet对象
-
-
遍历
ResultSet
使用
executeQuery
方法执行SELECT
语句,从返回的ResultSet
中获取对象,常使用的方法方法原型 说明 boolean next()throws SQLException**
将 结 果 集 游 标 \color{#F00}结果集游标 结果集游标往下移动一行,这时 ResultSet
引用指向的就是当前游标(遍历到的当前记录)。如果已经到达结果集最后,将会返回false,有可能抛异常,必须捕捉X getX(String columnName) throws SQLException
获得当前记录某个字段的值,X是指具体的数据类型,视数据库表中字段的具体情况而定,并且每个数据类型都有两种重载方法,一种是以字段名称为参数,另一种是以字段索引为参数 ( 字 段 索 引 从 1 开 始 ) \color{red}(字段索引从1开始) (字段索引从1开始),有可能抛异常,必须捕捉 X getX(int columnIndex) throws SQLException
ResultSet rs = statement.executeQuery("SELECT * FROM Friend");); while(rs.next()){ //取得一行记录,放在rs里 rs.getString(“col_name”); //如果字段数据类型是字符串,getString rs.getInt(“col_name”); //如果字段数据类型是整数,getInt rs.getDouble(col_index); //如果字段数据类型是浮点数,getDouble rs,getDate("HireDate"); //… //类型是数据库中的数据类型,非java中数据类型 }
完整示例代码
package Unit32.DataBase;
import java.sql.*;
/**
* @program: JAVAStudy
* @description:
* @author: Felix
* @create: 2020-04-03 21:16
**/
public class SampleTest {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/javacourse?serverTimezone=GMT";
Connection conn = null;
String root = "root";
String pwd = "jmm123";
System.out.println("正在连接数据库...");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("Driver loaded");
conn = DriverManager.getConnection(url, root, pwd);
if(conn != null){
System.out.println("数据库连接成功");
}
Statement sta = conn.createStatement();
ResultSet rs = sta.executeQuery("select * from student s");
System.out.println();
System.out.println("===================================");
System.out.println("查询到的数据如下:");
while(rs.next()){
String ssn = rs.getString("ssn");
String firstName = rs.getString("firstName");
String mi = rs.getString("mi");
String lastName = rs.getString("lastName");
Date birthDate = rs.getDate("birthDate");
String street = rs.getString("street");
String phone = rs.getString("phone");
String zipCode = rs.getString("zipCode");
String deptID = rs.getString("deptId");
//ssn,firstName,mi,lastName,birthDate,street,phone,zipCode,deptID
Student stud = new Student(ssn,firstName,mi, lastName, street, phone, zipCode, deptID, birthDate);
System.out.println(stud);
}
conn.close();
sta.close();
rs.close();
} catch (ClassNotFoundException e) {
System.out.println("数据库驱动加载错误,"+e.toString());
} catch (SQLException e) {
System.out.println("数据库连接错误,"+e.toString());
}
}
}