JDBC-数据库的几种连接方式(笔记)
Posted Vodka~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC-数据库的几种连接方式(笔记)相关的知识,希望对你有一定的参考价值。
package Connection;
import org.junit.Test;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* @author Vodka
* @date 2021/06//16:09
*/
public class ConnectionTest {
方法一:
//测试连接,并监督异常
@Test
public static void main(String args[]) throws SQLException{
//创建驱动对象
Driver driver = new com.mysql.cj.jdbc.Driver();
//统一资源定位符,定位Mysql数据的端口 , jdbc:mysql:协议, ip地址,mysql默认端口号,数据库名称
String url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
//将用户名和密码都封装在Properties中
Properties info = new Properties();
info.setProperty("user","Vodka");
info.setProperty("password","6666666");
Connection con = driver.connect(url,info);
System.out.println(con);
}
方法二:
MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
static final String JdbcDriver = "com.mysql.cj.jdbc.Driver";
static final String DbUrl = "jdbc:mysql://127.0.0.1:3306/iot";
// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
// 数据库的用户名与密码,需要根据自己的设置
static final String USER = "vodka";
static final String PASS = "666666";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
// 注册 JDBC 驱动
Class.forName(JdbcDriver);
// 打开链接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DbUrl,USER,PASS);
// 执行查询
System.out.println(" 实例化Statement对象...");
stmt = conn.createStatement();
String sql;
sql = "SELECT Sno, Sname FROM student";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while(rs.next()){
// 通过字段检索
int Sno = rs.getInt("Sno");
String Sname = rs.getString("Sname");
// 输出数据
System.out.print("Sno: " + Sno);
System.out.print(", Sname: " + Sname);
System.out.print("\\n");
}
// 完成后关闭
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace();
}finally{
// 关闭资源
try{
if(stmt!=null) stmt.close();
}catch(SQLException se2){
}// 什么都不做
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye MySql!");
}
方式三:对方式一的迭代,这种方法不出现第三方的api,让程序有更好的移植性
@Test
public void testConnectionTwo() throws ClassNotFoundException, SQLException {
1.使用Java反射机制,获取Driver实现类对象
Class Pro = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = Pro.newInstance(); //该方法已经被弃用
//2.提供数据库连接,后面要加上SSL,时区,以及字符编码
String Url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
//3.提供连接需要的用户名和密码
Properties UserInfo = new Properties();
UserInfo.setProperty("user","vodka");
UserInfo.setProperty("password","666666");
//4.通过驱动,获取连接
Connection conn = driver.connect(Url,UserInfo);
System.outprinln(conn);
}
方式四: 使用DriverManager 代替 Driver
@Test
public void ConnectionTestFour() throws ClassNotFoundException,SQLException{
//1.先利用反射机制,获得驱动的实现类对象
Class Pro = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver)Pro.newInstance(); //该方法已经被弃用
//2.提供数据库连接,用户名称以及密码
String Url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
String UserName = "vodka";
String PassWord = "6666668";
//3.注册驱动,获得连接
DriverManager.registerDriver(driver);
Connection conn = DriverManager.getConnection(Url,UserName,PassWord);
System.out.println(conn);
}
方法五:对方法四的优化
public static void main(String args[]) throws ClassNotFoundException ,SQLException{
//1.利用反射机制,动态获得驱动的实现类对象
Class.forName("com.mysql.cj.jdbc.Driver");
//2.提供数据库连接,用户名称以及密码
String Url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
String User = "vodka";
String PassWord = "66668888";
//3.直接就可以通过驱动,获取数据库的连接,无须注册驱动,因为Mysql的实现类中驱动程序里已经注册驱动了,加载使用即可
Connection conn = DriverManager.getConnection(Url,User,PassWord);
System.out.println(conn);
}
// 方式六:将连接数据库有关的信息写到配置文件中,要进行连接时,再进行读取,实现数据与配置代码的分离,降低了耦合性(解耦)
public static void main(String agrs[]) throws Exception{
//1.利用反射获取实现类对象,再用实现类对象中的加载器的方法,读取相应文件的输入流
InputStream IS = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
//利用Properties键值对,利用Properties实例对象来加载文件输入流,再读取相应属性的值
Properties pros = new Properties();
pros.load(IS);
//读取相应属性值
String User = pros.getProperty("User");
String PassWord= pros.getProperty("PassWord");
String Url = pros.getProperty("Url");
String DriverClass = pros.getProperty("DriverClass");
//2.利用反射获得实现类,加载驱动
Class.forName(DriverClass);
//3.通过驱动,建立连接
Connection conn = DriverManager.getConnection(Url,User,PassWord);
System.out.println(conn);
}
}
以上是关于JDBC-数据库的几种连接方式(笔记)的主要内容,如果未能解决你的问题,请参考以下文章