JDBC简析及与mysql链接实例
JDBC
jdbc简介
JDBC(java DateBase Connectivity)是sun公司推出的用于java工程与数据库之间进行交互的一整套规范(实质上是一整套接口),并由各大数据库厂商根据自己的数据库产品进行实现,所以使用JDBC之前必须根据所使用的数据库向工程中导入对应的JDBC包。
jdbc常用接口简析
Connection:建立链接。
作用:从java搭建桥梁到数据库。
Statement:sql命令接口。
作用:从java发送sql命令到dbms。
ResultSet:结果集。
作用:如果是查询语句,dbms会返回一个虚拟的结果集。通过接口的方法可以获取到结果集中的数据。
PreparedStatement:是Statement接口的子接口。
作用:主要通过预编译手段防止注入式sql攻击。
SQL注入
SQL注入式攻击是指以前由于底层实现上sql语句常用“+”拼接的方式实现,这样就可利用拼接方式的漏洞,通过某些原本不能通过的验证。
//用户登录时,会在数据库中匹配用户的id及密码,错误返回false拒绝登录,正确返回true允许登录,sql语句为
String sql = "select * from user where id = '" + id + "' and pass = '" + pass + "'";
//当用户输入"id=0048"和"pass=ukahdi or 1==1";(虽然密码错误,但仍会通过登录验证),这就有了非法访问的风险。这时就需要使用PreparedStatement接口,这个接口中允许在sql语句中使用?作为占位符,则原语句可改写为
String sql = "select * from user where id = ? and pass = ?" ;
//通过PreparedStatement接口中的一系列set方法可以对占位符处的传入值的类型进行限制,从而防止注入式攻击的发生。
jdbc链接mysql实例
一个完整的链接操作通常有四步:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcTest {
public static void main(String[] args) throws Exception {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//创建链接并再控制台输出链接地址
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root") ;
System.out.println(connection);
//执行sql语句,用结果集接收结果,并在控制台打印结果集地址
String sql = "select * from user";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
System.out.println(resultSet);
//关闭链接,释放资源
connection.close();
statement.close();
resultSet.close();
}
}
如有错误或不当之处欢迎在评论区指出,博主会及时回复及修改,数据库学习即将告一段落,作此记录。