DriverManager
······················
加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名
DriverManager 类是驱动程序管理器类,负责管理驱动程序
通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例
可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接
JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
JDBC URL的标准由三部分组成,各部分间用冒号分隔。
jdbc:<子协议>:<子名称>
协议:JDBC URL中的协议总是jdbc
子协议:子协议用于标识一个数据库驱动程序
子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
package connect;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/*
DriverManager 是驱动管理类
1. 可以通过重载的getConnection()方法获取数据库连接。较为方便
2.可以同时管理多个驱动程序:若注册了多个数据库连接,则调用getConnection()方法时传入的参数不同,即返回不同的数据库连接
*/
public class DriverManagerTest {
@Test
public void DriverManagerT() throws IOException, SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
//读取类路径下的jdbc.properties,准备连接数据库的变量
InputStream resourceAsStream = DriverConnection.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties1 = new Properties();
properties1.load(resourceAsStream);
String driverClass = properties1.getProperty("driver");
String user = properties1.getProperty("user");
String password = properties1.getProperty("password");
String jdbcUrl = properties1.getProperty("jdbcUrl");
//加载数据库驱动程序(注册驱动)(对应的Driver实现类中有注册驱动的静态代码块)
//DriverManager.registerDriver((Driver) Class.forName(driverClass).newInstance());
Class.forName(driverClass);
//Class.forName(driverClass2);可以加载其他数据库的驱动程序,同样调用getConnection方法即可连接不同的数据库
//通过DriverManger 的 getconnection方法获取数据库连接
Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
System.out.println(connection);
}
}
Statement
···············
通过调用 Connection 对象的 createStatement 方法创建该对象
该对象用于执行静态的 SQL 语句,并且返回执行结果
Statement 接口中定义了下列方法用于执行 SQL 语句:
ResultSet excuteQuery(String sql)
int excuteUpdate(String sql)
package connect;
import org.junit.Test;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/*
通过JDBC向指定的数据表插入一条数据
1.statement:用于执行SQL语句的对象
1.通过connection的createStatement()方法来获取
2.通过executeUpdate(sql)可以执行SQL语句
3.传入的SQL可以是INSERT,UPDate,DELETE,但不是SELECT
2.Connection,statement 都是应用程序与数据库服务器的连接资源,使用后一定关闭,在finally中关闭
关闭的顺序:先关闭后获取的
*/
public class statementTest {
@Test
public void statement() throws Exception {
//获取数据库连接(调用前面实现方法)
Connection connection = null;
Statement statement = null;
try {
DriverConnection driverConnection = new DriverConnection();
connection = driverConnection.getConnection();
//准备插入的SQL语句
String sql = "INSERT INTO customer (name, email, brith) VALUES('WWW','asdfsf.com','seg-654-46')";
sql = "DELETE FROM customer WHERE id = 1 ";
sql = "UPDATE customer SET name = 'tom' WHERE id = 2";
//执行插入
//1.获取操作SQL语句的statement对象:
// 调用connection的createstatement()方法来获取
statement = connection.createStatement();
//2.调用statement对象的executeUpdate(sql)执行SQL语句进行插入
statement.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭statement对象
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
connection.close();
}
}
}
//使用自定义工具类进行连接和关闭
//通用的更新方法: 包括INSERT,UPDATE,DELETE
public void update(String sql) throws Exception {
Connection connection = null;
Statement statement = null;
try {
connection = JDBCTools.getConnection();
statement = connection.createStatement();
statement.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.disConnect(statement,connection,null);
}
}
@Test
public void testUpdate() throws Exception {
update("UPDATE customer SET name = 'arli' WHERE id = 2");
}
}