JDBC的开发步骤

  1. 加载并注册数据库驱动(Driver类)
  2. 获取数据库连接(Connection对象)
  3. 获取SQL语句执行者(Statement对象)
  4. 执行SQL语句
  5. 操作结果集(ResultSet对象)
  6. 回收数据库资源

1.加载并注册数据库驱动

JDBC定义驱动接口java.sql.Driver,MYSQL数据库的驱动包为接口java.sql.Driver提供了实现类com.mysql.jdbc.Driver。在实际的开发过程中一般采用Class类中的forName方法加载驱动类,具体实现代码如下

  1. //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  2. //Driver这个类中有静态代码块,一上来就执行了,所以等同于我们注册了两次驱动,没必要
  3. Class.forName("com.mysql.jdbc.Driver");//mysql1.5之后的版本可以不写这一句

加载类时,将执行加载类的静态代码块,而com.mysql.jdbc.Driver类有一个静态代码块,具体如下

  1. try {
  2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  3. } catch (SQLException e) {
  4. e.printStackTrace();
  5. }

因此,Driver类再加载过程中就完成了对驱动的注册

2.获取数据库连接

DriverManager类是驱动管理类,管理一组JDBC驱动程序,他通过属性driver存入很多驱动类。当DriverManager获取连接的时候,他会把driver里的各个驱动的URL和创建连接时传进来的URL逐一进行比较,遇到对应的URL,则会尝试建立连接。通过DriverManager类获取连接(Connection对象)具体实现代码如下。

  1. Connection conn = DriverManager.getConnection(String url,String username,String password);

从上述代码片段中可以看出DiverManager类的getConnection()方法共有三个参数,分别是数据库URL、登陆数据库的用户名和密码,如果三者均匹配成功,就可获去数据连接,为JDBC实现对数据库的操作奠定基础。

3.获取SQL语句执行者

  1. Statement statement = conn.createStatement();

4.执行SQL语句并操作结果集

Statement对象提供三种方法执行SQL语句。

execute()执行SQL语句

executeUpdate()执行DDL和DML语句

executeQuery()执行实现查询功能的SQL语句,返回值是一个结果集(ResultSet对象)

  1. 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注入引发的问题,同时也提升了代码的可维护性和可读性。

优点

  1. PreparedStatement能够执行参数化的SQL语句
  2. PreparedStatement比Statement效率更高
  3. PreparedStatement可以防止SQL注入攻击

使用PreparedStatement对象操作数据库

  1. 加载并注册数据库驱动(Driver类)
  2. 获取数据库连接(Connection对象)
  3. 书写要执行的SQL语句,其中,操作的数据用占位符 “?” 表示。
  4. 获取SQL语句执行者(PrearedStatement对象)
  5. 为SQL语句中的参数赋值
  6. 执行SQL语句
  7. 操作结果集(ResultSet对象)
  8. 收回数据库资源

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,
出现下图

08-JDBC - 图1

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自动导包虽然非常智能但需要注意看提示中包的位置