java.JDBC
JDBC
获取数据库连接
Driver接口实现类
Driver接口介绍
- java.sql.Driver接口是所有的DBUtils驱动程序需要实现的接口。提供给不同的数据库厂商使用
- 程序中不需要直接去访问实现了的Driver接口的类,而是有驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实习
- Oracle的驱动:oracle.jdbc.driver.OracleDriver
- mySql 的驱动:com.mysql.jdbc.Driver
加载与注册DBUtils驱动
-
加载驱动:Class.forName("com.mysql.jdbc.Driver");
-
注册驱动:DriverManager.registerDriver(com.mtsql.jdbc.Driver)
-
通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因
为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用
DriverManager.registerDriver() 方法来注册自身的一个实例。
-
URL
- URL的标准由三部分组成
- jdbc:子协议:子名称
- 协议:DBUtils URL中的协议总是jdbc
- 子协议:用于标识一个数据库驱动
- 子名称:用于定位数据库,包含主机名(对应服务器的ip地址)、端口号、数据库名
- 常用的DBUtils URL
- Mysql的连接URL编写方式:
- jdbc:mysql://主机名称:mysql服务端口号/数据库名称
- jdbc:mysql://localhost:3306/test
- jdbc:mysql://localhost:3306/xinzhi?useUnicode=true&characterEncoding=utf8(如果程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
- 8.0后需要加上&useSSL=false&serverTimezone=UTC",MySQL在高版本需要指明是否进行SSL连(认证和加密),serverTimezone=Asia/Shanghai 使用UTC(世界统一时间)和中国的时间差八个小时
- Oracle的连接URL编写方式:
- jdbc:oracle:thin:@主机名称:oracle服务端口号:数据库名称
- jdbc:oracle:thin:@localhost:1521:test
- SQLServer的连接URL编写方式
- jdbc:oracle:thin:@主机名称:sqlserver服务端口号:DatabaseName=数据库名称
- jdba:sqlserver://localhost:1433:DatabaseName=test
- Mysql的连接URL编写方式:
用户名和密码
- user,password可以用“属性名=属性值”方式告诉数据库
- 可以调用DriverManager类的getConnection()方法建立到数据库的连接
数据库连接方式举例
连接数据库
@Test
public void test() throws Exception {
//1.数据库连接的4个基本要素
String url = "jdbc:mysql://localhost:3308/test";
String user = "root";
String password = "asd";
String driverName = "com.mysql.jdbc.Driver";
//实例化Driver,加载驱动(可忽略)
Class<?> clazz = Class.forName(driverName);
Driver driver = (Driver) clazz.newInstance();
//3.注册驱动(可忽略)
DriverManager.registerDriver(driver);
//4.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
简写连接数据库
@Test
public void test2() throws Exception {
//1.数据库连接的4个基本要素
String url = "jdbc:mysql://localhost:3308/test";
String user = "root";
String password = "asd";
String driverName = "com.mysql.jdbc.Driver";
//实例化Driver,加载驱动(可忽略)
// Class<?> clazz = Class.forName(driverName);
// Driver driver = (Driver) clazz.newInstance();
//3.注册驱动(可忽略)
// DriverManager.registerDriver(driver);
//4.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
将基本要素放入properties
mysql.username=root
mysql.password=asd
mysql.url=jdbc:mysql://localhost:3308/test?rewriteBatchedStatements=true
mysql.dirvername=com.mysql.jdbc.Driver
@Test
public void test4() throws Exception {
InputStream is = com.ccl.jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(is);
// Properties properties = new Properties();
// properties.load(com.ccl.jdbcTest.class.getClassLoader().getResourceAsStream("jdbc-study/jdbc.properties"));
String url = properties.getProperty("mysql.url");
String user = properties.getProperty("mysql.username");
String password = properties.getProperty("mysql.password");
//4.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
将连接数据库的代码封装为一个工具类
public class jdbcUtil {
public static void closeResourse(Connection conn, Statement ps){
try {
if (conn != null){
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
try {
if (ps != null){
ps.close();
System.out.println("Close");
}
}catch (SQLException e){
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
try {
InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(is);
String url = properties.getProperty("mysql.url");
String user = properties.getProperty("mysql.username");
String password = properties.getProperty("mysql.password");
//4.获取连接
conn = DriverManager.getConnection(url, user, password);
} catch (IOException | SQLException e) {
e.printStackTrace();
}
return conn;
}
}
通过statement操作数据库
@Test
public void testStatement1() {
Connection connection = null;
Statement statement = null;
try {
connection = jdbcUtil.getConnection();
statement = connection.createStatement();
String sql = "insert into user_table values('CCL',123456,1234)";
statement.execute(sql);
//返回值:执行成功或者失败
//boolean execute = statement.execute(sql);
//返回受影响的行数
//String sql = "insert into user_table values('CCL',123456,1234),('Leesin',123456,1234)";
//int i = statement.executeUpdate(sql);
//System.out.println(i);
} catch (SQLException e) {
e.printStackTrace();
}
jdbcUtil.closeResourse(connection,statement);
}