(1)概念

  • JDBC:Java DataBase Connectivity
  • JDBC是官方定义的一套操作所有关系型数据库的规则,各个数据库厂商去实现这套接口,并提供数据驱动jar包。我们可以使用JDBC编程,真正执行的代码是驱动jar包的实现类

屏幕快照 2018-11-18 下午3.22.11.png

(2)第一个JDBC

public class Main {

  1. private static final String URL = "jdbc:mysql://localhost:3306/test";
  2. private static final String USERNAME = "root";
  3. private static final String PASSWORD = "root";
  4. public static void main(String[] args) throws Exception {
  5. //加载驱动程序
  6. Class.forName("com.mysql.cj.jdbc.Driver");
  7. //获得数据库连接
  8. Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  9. //获取sql执行对象
  10. Statement statement = connection.createStatement();
  11. // 进行增删改查操作
  12. ResultSet resultSet = statement.executeQuery("select * from card");
  13. while (resultSet.next()){
  14. int money = resultSet.getInt("money");
  15. String username = resultSet.getString("name");
  16. System.out.println(username+" , "+money);
  17. }
  18. // 关闭数据库资源
  19. resultSet.close();
  20. statement.close();
  21. connection.close();
  22. }

}


<a name="BoFfc"></a>
### (3)流程分析
<a name="nG3xh"></a>
#### 注册驱动

- Class.forName加载类到内存,类中有个静态代码块,执行了DriverManager.registerDriver(new Driver());
- Class.forName()这行代码可以不写,后续版本后加了自动引入

public class Driver extends NonRegisteringDriver implements java.sql.Driver { public Driver() throws SQLException { }

static {
    try {
        DriverManager.registerDriver(new Driver());
    } catch (SQLException var1) {
        throw new RuntimeException("Can't register driver!");
    }
}

}
```

Connection

  • 数据库连接对象
  • 获取执行sql的对象
    • Statement createStatement() throws SQLException;
    • PreparedStatement prepareStatement(String sql) throws SQLException;
  • 管理事务
    • 开启事务:void setAutoCommit(boolean autoCommit)
    • 提交事务:void commit();
    • 回滚事务:void rollback();

Statement

  • boolean execute(string sql)
  • int executeUpdate(string sql)
    • 返回影响的行数:执行DML(insert update delete)语句,DDL(create alter drop)语句
  • ResultSet executeQuery(string sql)
    • DQL语句

中文乱码

url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8