JDBC——用Java语言操作数据库

本文介绍了Java中的JDBC接口,包括DriverManager、Connection、Statement和PreparedStatement的使用。重点讲解了PreparedStatement如何实现参数化查询,提高查询效率并防止SQL注入攻击。同时提到了数据库连接池的概念,通过DruidDataSourceFactory创建数据库连接池,优化数据库资源管理。
摘要由CSDN通过智能技术生成

JDBC:一套标准接口

//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");	
//Class.forName("com.mysql.jdbc.Driver");	
//获取连接对象
String url = "jdbc:mysql://localhost:3306/db2?useSSL=false";
//String url = "jdbc:mysql://127.0.0.1:3306/db2?useSSL=false";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//("jdbc:mysql://localhost:3306/db2", "root", "123456")
//获取执行SQL的对象
Statement stat = conn.createStatement();
//定义SQl
String sql = "SELECT * FROM user";
//执行SQL
ResultSet rs = stat.executeQuery(sql);//受影响的行数
//处理结果
//System.out.println(rs);
//释放资源
rs.close();
stat.close();
conn.close(); 

API详解

DriverManager

Connection

Statement

ResultSet

PreparedStatement(Statement的增强版)
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对SQL语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。

//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");	
//获取连接对象
String url = "jdbc:mysql://localhost:3306/db2?useSSL=false";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//("jdbc:mysql://localhost:3306/db2", "root", "123456")
//获取执行SQL的对象
PreparedStatement preSql = conn.prepareStatement("select * from user where id = ?");
preSql.setString(1,"1");
//执行SQL
ResultSet rs = preSql.executeQuery();
//处理结果
while(rs.next()){
   System.out.println( result.getString("username"));
}       
//释放资源
rs.close();
preSql.close();
conn.close(); 

PreparedStatement可以有效地防止SQL语句注入攻击。
什么是SQL语句注入攻击?
攻击者在向数据库服务器发送查询请求时,会在查询语句中添加恶意代码,从而对服务器造成伤害。例如:破坏服务器的安全性,通过恶意查询访问数据库服务器中的敏感数据,改变数据库查询结果,或者把数据库查询的结果暴露出来。
如何防止SQL语句注入攻击?

  1. 通过限制SQL语句的输入
  2. 使用参数化查询
  3. 编写安全的SQL语句
  4. 定期更新系统
  5. 使用Web应用防火墙
    PreparedStatement不允许占位符?有多个值,实现了参数化查询,有效防止了SQL注入攻击。

数据库连接池

//导入jar包

//定义配置文件 druid.properties

//加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("路径src/druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接Connection
Connection connection = dataSource.getConnection();

System.out.println(connection);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值