一、加载与注册 JDBC 驱动

加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名。
通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例

  1. Class.forName(driverClass)
  2. //加载MySql驱动
  3. Class.forName("com.mysql.jdbc.Driver")
  4. //加载Oracle驱动
  5. Class.forName("oracle.jdbc.driver.OracleDriver")

二、建立连接

JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

  1. DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");

三、访问数据库 数据库连接被用于向数据库服务器发送命令和 SQL 语句,在连接建立后,需要对数据库进行访问,执行 sql 语句 在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式:

  • Statement
  • PrepatedStatement

  • CallableStatement ```java conn.createStatement(); conn.prepareStatement(sql);

//1.加载驱动程序 Class.forName(“com.mysql.jdbc.Driver”); //2. 获得数据库连接 Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); //3.操作数据库,实现增删改查 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(“SELECT user_name, age FROM imooc_goddess”); //如果有数据,rs.next()返回true while(rs.next()){ System.out.println(rs.getString(“user_name”)+” 年龄:”+rs.getInt(“age”)); }

  1. <a name="uqtb0"></a>
  2. # 四、ResultSet
  3. ```java
  4. public class DbUtil {
  5. public static final String URL = "jdbc:mysql://localhost:3306/imooc";
  6. public static final String USER = "liulx";
  7. public static final String PASSWORD = "123456";
  8. private static Connection conn = null;
  9. static{
  10. try {
  11. //1.加载驱动程序
  12. Class.forName("com.mysql.jdbc.Driver");
  13. //2. 获得数据库连接
  14. conn = DriverManager.getConnection(URL, USER, PASSWORD);
  15. } catch (ClassNotFoundException e) {
  16. e.printStackTrace();
  17. } catch (SQLException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. public static Connection getConnection(){
  22. return conn;
  23. }
  24. }
  25. //模型
  26. package liulx.model;
  27. import java.util.Date;
  28. public class Goddess {
  29. private Integer id;
  30. private String user_name;
  31. private Integer sex;
  32. private Integer age;
  33. private Date birthday; //注意用的是java.util.Date
  34. private String email;
  35. private String mobile;
  36. private String create_user;
  37. private String update_user;
  38. private Date create_date;
  39. private Date update_date;
  40. private Integer isDel;
  41. //getter setter方法。。。
  42. }
  43. public List<Goddess> query() throws SQLException {
  44. Connection conn = DbUtil.getConnection();
  45. Statement stmt = conn.createStatement();
  46. ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
  47. List<Goddess> gs = new ArrayList<Goddess>();
  48. Goddess g = null;
  49. while(rs.next()){
  50. g = new Goddess();
  51. g.setUser_name(rs.getString("user_name"));
  52. g.setAge(rs.getInt("age"));
  53. gs.add(g);
  54. }
  55. return gs;
  56. }

五、使用 JDBC 驱动程序处理元数据

Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。根据这些信息,JDBC可以访问一个实现事先并不了解的数据库。 获取这些信息的方法都是在DatabaseMetaData类的对象上实现的,而DataBaseMetaData对象是在Connection对象上获得的。

DatabaseMetaData类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以详细的了解数据库的信息:

  • getURL():代表数据库的URL,返回一个String类对象
  • getUserName():返回用户名
  • isReadOnly():返回一个布尔值,是否只许读操作
  • getDatabaseProductName():产品名称
  • getDatabaseProductVersion():数据库的版本号
  • getDriverName():驱动名称
  • getDriverVersion():驱动版本号

ResultSetMetaData类:获取关于ResultSet对象中列的类型和属性信息的对象

  • getColumnName(int column):获取指定列的名称
  • getColumnCount():返回当前对象的列数
  • getColumnTypeName(int column):检索指定列的数据库特定的类型名称
  • isNullable(int column):指示指定列的值是否为空
  • isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。



六、数据库连接池(connection pool)

为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。

  1. @Test
  2. public void testC3P0() throws Exception {
  3. ComboPooledDataSource ds = new ComboPooledDataSource();
  4. ds.setJdbcUrl("jdbc:mysql://localhost:3306/day17");
  5. ds.setDriverClass("com.mysql.jdbc.Driver");
  6. ds.setUser("root");
  7. ds.setPassword("root");
  8. ds.setInitialPoolSize(3);
  9. ds.setMaxPoolSize(6);
  10. ds.setMaxIdleTime(1000);
  11. Connection conn = ds.getConnection();
  12. PreparedStatement pstm = conn.prepareStatement("delete from employee where id=?");
  13. pstm.setObject(1, 3);
  14. pstm.executeUpdate();
  15. conn.close();
  16. }
  17. @Test
  18. public void testname() throws Exception {
  19. //自动加载src目录下的c3p0-config.xml配置文件
  20. ComboPooledDataSource ds = new ComboPooledDataSource();
  21. Connection conn = ds.getConnection();
  22. conn.prepareStatement("delete from employee where id=4;").execute();
  23. conn.close();
  24. }
  25. <default-config>
  26. <property name="jdbcUrl">jdbc:mysql://localhost:3306/day17</property>
  27. <property name="driverClass">com.mysql.jdbc.Driver</property>
  28. <property name="user">root</property>
  29. <property name="password">root</property>
  30. <property name="initialPoolSize">10</property>
  31. <property name="maxPoolSize">25</property>
  32. <property name="maxIdleTime">3000</property>
  33. </default-config>