Java database connectivity(java数据库链接)
本章讲的是java程序链接数据库的api(类,接口)
java程序可以链接不同的数据库,但是不同的数据库具体的链接细节不同,
jdbc链接数据库步骤:
1.在项目中添加java文件
JDBC 常用工具类位于 sql 包内,使用时需导入import java.sql.*
使用时可能 抛出 SQLException 异常
下载 MySQL 驱动包,解压后得到 jar 库文件:http://dev.mysql.com/downloads/connector/j/
打开 IDE,在对应项目中创建一个lib文件夹
将jdbc文件导入 jar 库文件,同时将此文件设置为库
2.加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 数据库驱动
3.建立与数据库的链接,获得链接对象
// 连接本地 RUNOOB 数据库,需设置时区
static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";
static final String USER = "root"; // 数据库账号
static final String PASS = "root"; // 数据库密码
Connection conn = DriverManager.getConnection(DB_URL,USER,PASS); // 建立连接
conn.close(); // 关闭连接
4.发送SQL
Statement stmt = = conn.createStatement(); // 创建 Statement 对象
// executeQuery 执行查询操作,返回 ResultSet 结果集
ResultSet rs = stmt.executeQuery("SELECT * FROM websites");
// executeUpdate 执行更新操作,返回 int 数据表示受影响行数
int len = stmt.executeUpdate("DELETE * FROM websites");
stmt.close(); // 关闭 Statement 对象
预编译PreparedStatement
PreparedStatement 类继承自 Statement 类,在 JDBC 开发中用来取代前者。有以下两个优势:
可对 SQL 语句进行预编译,可以灵活地修改 SQL 语句,提高开发效率。
把用户输入单引号转义,防止恶意注入,保护数据库安全。
Connection connection = DriverManager.getConnection();
String sql = "INSERT INTO test(id,name) VALUES (?,?)";
PreparedStatement stmt = connection.preparedStatement(sql); // 创建对象并预编译
stmt.setInt(1, 755); // 在第一个占位符(?)位置插入数字
stmt.setString(2, "MrJoker"); // 在第二个占位符(?)位置插入字符串
stmt.executeUpdate(); // 更新并执行
statement和preparestatement的区别
相同点:都是向数据库发送sql
statement:将参数直接拼到sql中,要拼接字符串,写起来麻烦,安全性差(可在参数 拼接or 1=1)
preparedStatement:先用?占位,然后通过setobject方法赋值,写起来不用拼接字符串,安全可靠,在赋值时进行检测,可以防止sql注入