JDBC的开发步骤
- 加载并注册数据库驱动(Driver类)
- 获取数据库连接(Connection对象)
- 获取SQL语句执行者(Statement对象)
- 执行SQL语句
- 操作结果集(ResultSet对象)
- 回收数据库资源
1.加载并注册数据库驱动
JDBC定义驱动接口java.sql.Driver,MYSQL数据库的驱动包为接口java.sql.Driver提供了实现类com.mysql.jdbc.Driver。在实际的开发过程中一般采用Class类中的forName方法加载驱动类,具体实现代码如下
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());//Driver这个类中有静态代码块,一上来就执行了,所以等同于我们注册了两次驱动,没必要Class.forName("com.mysql.jdbc.Driver");//mysql1.5之后的版本可以不写这一句
加载类时,将执行加载类的静态代码块,而com.mysql.jdbc.Driver类有一个静态代码块,具体如下
try {DriverManager.registerDriver(new com.mysql.jdbc.Driver());} catch (SQLException e) {e.printStackTrace();}
因此,Driver类再加载过程中就完成了对驱动的注册
2.获取数据库连接
DriverManager类是驱动管理类,管理一组JDBC驱动程序,他通过属性driver存入很多驱动类。当DriverManager获取连接的时候,他会把driver里的各个驱动的URL和创建连接时传进来的URL逐一进行比较,遇到对应的URL,则会尝试建立连接。通过DriverManager类获取连接(Connection对象)具体实现代码如下。
Connection conn = DriverManager.getConnection(String url,String username,String password);
从上述代码片段中可以看出DiverManager类的getConnection()方法共有三个参数,分别是数据库URL、登陆数据库的用户名和密码,如果三者均匹配成功,就可获去数据连接,为JDBC实现对数据库的操作奠定基础。
3.获取SQL语句执行者
Statement statement = conn.createStatement();
4.执行SQL语句并操作结果集
Statement对象提供三种方法执行SQL语句。
execute()执行SQL语句
executeUpdate()执行DDL和DML语句
executeQuery()执行实现查询功能的SQL语句,返回值是一个结果集(ResultSet对象)
例
ResultSet resultSet = statement.executeQuery(sql);
结果集封装了执行查询SQL语句后返回的结果,程序可以通过遍历结果集获取每一行的数据。
第一步:调用next(),previous(),first(),last()等方法移动指针,再调用getXxx()方法获取指针指向行的特定列的值。该方法既可以用用列索引作为参数(性能更好),也可以用列名做参数(可读性更高)。
while(){
Object object = resultSet.getObject(1);
}
参数 “1” 表示获取当前指针指向行的第一列的数据,getObject()还可以用String类型的数据表的列名。
5.回收数据库资源
为了节省资源,提升性能,同时也为了世界的和平,包括Connection、Statement、ResultSet在内的JDBC资源在使用之后要及时关闭。顺序为:先开后关,后开后关(像不像数据结构中的栈:先进先出)
resultSet.close();
statement.close();
conn.close();
PreparedStatement对象的使用
SQL注入
SQL注入是比较常见的网络攻击方式,它利用现有程序的漏洞,将恶意的SQL命令注入后台数据库,最终达到欺骗服务器并实现攻击者意图的目的。
Statement对象可以通过三种方法向数据库发送SQL语句,而这三种方法均是通过传递字符串类型的SQL语句作为参数来实现的,由此可见,使用statement类会存在SQL注入的问题。
PreparedStatement与Statement对比
PreparedStatement对象可以对SQL语句进行预编译,这可以有效避免SQL注入引发的问题,同时也提升了代码的可维护性和可读性。
优点:
- PreparedStatement能够执行参数化的SQL语句
- PreparedStatement比Statement效率更高
- PreparedStatement可以防止SQL注入攻击
使用PreparedStatement对象操作数据库
- 加载并注册数据库驱动(Driver类)
- 获取数据库连接(Connection对象)
- 书写要执行的SQL语句,其中,操作的数据用占位符 “?” 表示。
- 获取SQL语句执行者(PrearedStatement对象)
- 为SQL语句中的参数赋值
- 执行SQL语句
- 操作结果集(ResultSet对象)
- 收回数据库资源
IDEA的使用
idea使用数据库工具
https://blog.csdn.net/cgl125167016/article/details/78939494
idea使用JUnit4
https://blog.csdn.net/Soinice/article/details/80695069
https://blog.csdn.net/u013905744/article/details/72902633
https://blog.csdn.net/he99774/article/details/78254262
idea抛异常的快捷方式
在idea中添加try/catch的快捷键
ctrl+alt+t
选中想被try/catch包围的语句,同时按下ctrl+alt+t,
出现下图

idea插件安装、删除
https://www.cnblogs.com/heflat/p/7998885.html
idea创建java工程并用JDBC连接数据库
https://blog.csdn.net/u012075383/article/details/78254482
idea创建.properties文件
https://blog.csdn.net/u013164931/article/details/76283884
详情请看笔记JDBC2
idea注意事项
idea自动导包虽然非常智能但需要注意看提示中包的位置
