一、加载与注册 JDBC 驱动
加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名。
通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例
Class.forName(driverClass)//加载MySql驱动Class.forName("com.mysql.jdbc.Driver")//加载Oracle驱动Class.forName("oracle.jdbc.driver.OracleDriver")
二、建立连接
JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
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”)); }
<a name="uqtb0"></a># 四、ResultSet```javapublic class DbUtil {public static final String URL = "jdbc:mysql://localhost:3306/imooc";public static final String USER = "liulx";public static final String PASSWORD = "123456";private static Connection conn = null;static{try {//1.加载驱动程序Class.forName("com.mysql.jdbc.Driver");//2. 获得数据库连接conn = DriverManager.getConnection(URL, USER, PASSWORD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}public static Connection getConnection(){return conn;}}//模型package liulx.model;import java.util.Date;public class Goddess {private Integer id;private String user_name;private Integer sex;private Integer age;private Date birthday; //注意用的是java.util.Dateprivate String email;private String mobile;private String create_user;private String update_user;private Date create_date;private Date update_date;private Integer isDel;//getter setter方法。。。}public List<Goddess> query() throws SQLException {Connection conn = DbUtil.getConnection();Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");List<Goddess> gs = new ArrayList<Goddess>();Goddess g = null;while(rs.next()){g = new Goddess();g.setUser_name(rs.getString("user_name"));g.setAge(rs.getInt("age"));gs.add(g);}return gs;}
五、使用 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)
为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
@Testpublic void testC3P0() throws Exception {ComboPooledDataSource ds = new ComboPooledDataSource();ds.setJdbcUrl("jdbc:mysql://localhost:3306/day17");ds.setDriverClass("com.mysql.jdbc.Driver");ds.setUser("root");ds.setPassword("root");ds.setInitialPoolSize(3);ds.setMaxPoolSize(6);ds.setMaxIdleTime(1000);Connection conn = ds.getConnection();PreparedStatement pstm = conn.prepareStatement("delete from employee where id=?");pstm.setObject(1, 3);pstm.executeUpdate();conn.close();}@Testpublic void testname() throws Exception {//自动加载src目录下的c3p0-config.xml配置文件ComboPooledDataSource ds = new ComboPooledDataSource();Connection conn = ds.getConnection();conn.prepareStatement("delete from employee where id=4;").execute();conn.close();}<default-config><property name="jdbcUrl">jdbc:mysql://localhost:3306/day17</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="user">root</property><property name="password">root</property><property name="initialPoolSize">10</property><property name="maxPoolSize">25</property><property name="maxIdleTime">3000</property></default-config>
