JDBC: Java数据库连接(Java DataBase Connectivity)
总体过程:
- 注册驱动
- 建立连接Connection
- 创建执行SQL语句
- 执行语句
- 处理执行结果ResultSet
- 释放资源
一、获取数据库连接
import org.junit.Test;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class ConnectionTest {
@Test
public void testConnection1() throws SQLException {
//获取连接:方式一
Driver driver=new com.mysql.jdbc.Driver();
//jdbc:mysql://localhost:3306/dbname
String url ="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
//将用户名和密码封装在properties里面
Properties info=new Properties();
info.setProperty("user","root");
info.setProperty("password","123456");
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
//方式二:方式一的迭代 反射获取driver的对象 在如下的程序中不出现第三方的api,使得程序具有更好的可移植性
@Test
public void testConnection2() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException {
//1.获取Driver实现类对象:使用反射
Class cl = Class.forName("com.mysql.jdbc.Driver");
Driver driver=(Driver)cl.newInstance();
//2.提供要连接的数据库
String url ="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
//3.提供连接需要的用户名和密码
Properties info=new Properties();
info.setProperty("user","root");
info.setProperty("password","123456");
//4.获取连接
Connection conn = driver.connect(url, info);
System.out.println(conn);
;
}
//方式三:使用DriverManager替换Driver
@Test
public void testConnection3() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
//注册驱动
Class cl = Class.forName("com.mysql.jdbc.Driver");
Driver driver=(Driver)cl.newInstance();
DriverManager.registerDriver(driver);
//方法四:可以一行代码:Class.forName("...") 省略手动注册驱动... static
//还可以全省略了..对于mysql来说
//提供另外三个连接的基本信息
String url ="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
String user="root";
String password="123456";
//最终版本:要将数据库连接需要的4个基本信息声明在配置文件中
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
}
最终版本:要将数据库连接需要的4个基本信息声明在配置文件中
配置文件:
user=root
password=123456
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
driverClass=com.mysql.jdbc.Driver
public void testConnection4() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException, IOException {
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.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");
//加载驱动
Class.forName(driverClass);
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
好处:
- 实现了数据与代码的分离,实现了解耦
- 如果需要修改配置文件信息,可以避免程序重新打包
二、使用PreparedStatement实现CRUD操作
在java.sql包中有3个借口分别定义了对数据库的调用的不同方式:
- Statement:用于执行静态SQL语句,并返回它所生成结果的对象
- PreparedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象多次高效地执行该语句
- CallableStatement:用于执行SQL存储过程
Statement弊端
- 拼串操作
- 存在sql注入
解决方法就是换成PreparedStatement