首页 > 数据库技术 > 详细

JDBC基础知识点

时间:2021-09-06 01:08:26      阅读:17      评论:0      收藏:0      [点我收藏+]

1.JDBC

1.1JDBC概念和实现原理

JDBC 是java 语言操作数据库的一种技术。 JDBC是Hiberante,Mybatis,JDBCTemplate,DBUtils 等工具或者框架的基础。
JDBC是一个接口,只定义接口方法,不实现内容。如果一个数据库厂商想让Java开发人员使用他们家的数据库,就需要实现
JDBC接口,打成一个工具包jar,这个工具包就称之为数据库驱动包。
JDBC 想要连接MySQL ,就需要一个MySQL的驱动包。

1.2加载驱动

Class.forName("com.mysql.jdbc.Driver");
但是我们之前学过的反射,得知以上语句只是为了获得Driver类 的Class 类对象而已,毫无实际意义
通过源码:
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can‘t register driver!");
}
}
该代码块是用来加载驱动的,我们通过Class.forName("com.mysql.jdbc.Driver"),可以让虚拟机加载Driver,刚好出发Driver类中的静态代码块。
从JDBC3开始,不需要写加载数据库驱动这句话了。

1.3获取数据库连接

获取数据库连接
两种写法:
String url="jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf8";
String userName="root";
String password="root";
Connection connection = DriverManager.getConnection(url, userName, password);
System.out.println(connection);
第二种写法:
String url="jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf8";
Properties properties = new Properties();
properties.setProperty("user","root");
properties.setProperty("password","root");
/**
* info a list of arbitrary string tag/value pairs as
* * connection arguments. Normally at least a "user" and
* * "password" property should be included.
*/
Connection connection = DriverManager.getConnection(url, properties);
System.out.println(connection);

1.4创建Statement

创建Statement
connection.createStatement( );
只有statement对象才能执行SQL语句
DML语句 executeUpdate
DQL语句 executeQuery

1.5ResultSet

resultSet.next() 将光标指向下一行数据,如果有数据,返回true
resultSet.getString("列名") 获取字符串类型的列的数据
resultSet.getInt("列名") 获取数字类型的列的数据
resultSet.getDouble("") 获取double类型的列的数据

2.SQL注入

注册案例
出现了SQL注入的问题,登录 人员只要进行一个稍微的变化,错误的账号和密码就能进入
请输入您的用户名:
skfjsdkfsd
请输入您的密码:
a‘ or ‘‘=‘
select * from user where username=‘skfjsdkfsd‘ and password=‘a‘ or ‘‘=‘‘
结论: Statement 这个类执行的SQL语句,有SQL注入的风险!!!!

3.PreparedStatement 接口

它是Statement 接口的子接口,可以有效的防止SQL注入
PreparedStatement
通过:connection.prepareStatement(sql); 获取该对象
SQL语句中需要传递值的地方先用?占位,然后通过statement对象传递 值。
执行SQL的时候,无需再次传入SQL:statement.executeQuery();
PreparedStatement 和 Statement 相比:它是一个预编译SQL的技术
Statement: 每一条SQL语句,都需要先编译,后运行,1W ,编译1W,执行1W次
PreparedStatement: 我先给数据库发送一个SQL模板,编译一次,后面每次执行无需再 编译。

JDBC基础知识点

原文:https://www.cnblogs.com/xjl920912/p/15227353.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!