1. JDBC
1.1代码实现
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3309/db02?characterEncoding=utf-8&useSSL=false", "root", "root");
String sql = "Select * from tb_user where username = ? and password = ? ";
// 获取执行sql的框架
PreparedStatement pps = connection.prepareStatement(sql);
pps.setObject(1,userName);
pps.setObject(2,password);
// 执行sql
ResultSet resultSet = pps.executeQuery();
// 处理数据
if (resultSet.next()) {
System.out.println("登录成功");
} else {
System.out.println("登录失败");
}
// 关闭资源
resultSet.close();
pps.close();
connection.close();
1.2详解api
1.2.1 DriverManager
API | 说明 |
---|---|
registerDriver(java.sql.Driver driver) | 注册驱动jar包 |
Connection getConnection(String url, String user, String password) | 获取数据库连接对象 |
上面2个API真正的重点在第二个上getConnection()
,第一个在开发中是不写的!!!
1.2.1.1注册驱动
//在开发中我们通常使用下面代码来实现驱动的注册
Class.forName("com.mysql.jdbc.Driver");
1.2.1.2获取连接
Connection getConnection(String url, String user, String password)
在开发中我们在填写数据库连接地址的时候可以使用如下两种方式(MySQL)
方式一:完整版
jdbc:mysql://IP:端口/数据库名称
方式二:简写版(仅限于连接本地的MySQL,端口必须是3306)
jdbc:mysql:///数据库名称
在开发中我们通常还需要给我们的连接地址设置参数
我们url暂时可以写成下面的格式
jdbc:mysql://IP:端口/数据库名称?characterEncoding=utf-8&useSSL=false
1.2.2 Connection
Connection conn = DriverManager.getConnection(url, "root", "root");
// 开启事务
conn.setAutoCommit(false);
// 提交
conn.commit();
// 回滚
conn.rollback();
API | 说明 |
---|---|
conn.createStatement() | 创建执行sql的对象(一般不用) |
conn.prepareStatement() | 创建预编译执行sql的对象 |
conn.setAutoCommit(false) | 开启事务 |
conn.commit() | 提交事务 |
conn.rollback() | 回滚事务 |
1.2.3Statement
用处:执行sql语句
API | 说明 |
---|---|
statement.executeUpdate() | 增删改 |
statement.executeQuery() | 查 |
1.2.4ResultSet
作用:封装数据库查询的结果
API | 说明 |
---|---|
resultSet.next() | 判断是否有数据,游标下移 |
resultSet.getXXX("字段名") | 获取字段名对应的值 |
1.2.5 jdbc基本连接实例(有sql注入风险)
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取连接
String url = "jdbc:mysql://192.168.10.199:3306/db02?userSSL=false";
Connection conn = DriverManager.getConnection(url, "root", "root");
// 3. 创建执行sql的对象
Statement statement = conn.createStatement();
String sql = "select * from dept ";
// 4.执行,获取结果
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
// 5.对结果进行处理
float deptno = resultSet.getFloat("DEPTNO");
String dName = resultSet.getString("DNAME");
String loc = resultSet.getString("LOC");
System.out.println(deptno+"|"+dName+"|"+loc);
}
// 6.关闭连接,释放资源
resultSet.close();
statement.close();
conn.close();
1.2 .sql注入&解决方案
1.2.1 什么是sql注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
1.2.2 sql注入产生的原因
用户输入的参数被当做了sql关键字进行了解析执行
1.2.3 解决办法
使用PreparedStatement代替Statement,使用占位符。在执行sql的时候,PreparedStatem会自动将有特殊含义的字符转换,使其失去特殊含义
Comments NOTHING