JDBC
1.介绍
JDBC定义了一套规范标准,它对应的是各种接口与抽象类(通常对应java.sql包下面的各种类与接口),具体实现交给各数据库厂商去完成, MySQL的有自己的实现类并打成jar包发布,供程序开发人员使用;Oracle也有自己的实现jar包。
我们开发人员在使用的时候,要根据连接数据库的不同,去对应的官网上下载对应数据库版本与程序语言的数据库驱动(Java语言对应的是一个jar包)。(比如我们使用MySQL 5.1,就要去MySQL官网下载Java语言对应的jar包)
JDBC : Java DataBase Connectivity (java数据库链接)
是让java链接数据库的API
API : Application Programming Intergace (应用程序接口)
就是函数库
所以 JDBC 就是提供java连接数据库的应用程序接口的,只是接口或者抽象类
而JDBC就是java中提供的一个规范,基本都是接口和抽象类作为父类,具体的实现,是数据库厂商去弄的,只不过这些厂商需要按照我的接口标准来实现
如果我们要想操作数据库,就需要把厂商开发的实现类,导入进来
然后在项目上右键 -> Build Path -> Configure Build Path…,将之加入我们项目的CLASSPATH。
2. JDBC使用步骤
第0步: 导包
第1步:注册驱动 (仅仅做一次)
Class.forName(\"com.mysql.jdbc.Driver\");
第2步:建立连接(Connection)
Connection conn=DriverManager.getConnection(\"jdbc:mysql://127.0.0.1:3306/_06_\",\"root\",\"root\");
第3步:创建运行SQL的语句(Statement)
String sql =\"select * from test\";Statement stmt= conn.createStatement();
第4步:运行语句
Result rs = stmt.executeQuery(sql);
第5步:处理运行结果(ResultSet)
while (rs.next()) {// 在循环遍历中,把数据取出来System.out.print(rs.getInt(\"id\") + \" \");// 如果传入是整型值 就会获取对应的列,比如下面 就是获取第一列的值,不建议使用System.out.print(rs.getInt(1) + \" \");System.out.print(rs.getString(\"id\") + \" \");// 字符串不能用int来接收,除非这个 字符串是纯数字// System.out.print(rs.getInt(\"name\") +\" \");System.out.print(rs.getString(\"name\") + \" \");System.out.print(rs.getString(\"course\") + \" \");System.out.print(rs.getDouble(\"score\")+\" \");// 3 对应的是name列,如果更改表结构,把name列放到第四位了,那么这里就获取不到name了// 所以 不灵活,不推荐使用System.out.println(rs.getString(3));}
第6步:释放资源
rs.close();stmt.close();conn.close();
其中 如果是添加,删除,更新操作,可以没有第5步,查询肯定会有第五步
3.代码优化
上面程序中,有可能会导致释放资源出现问题
比如查询语句写错了等,这时候会抛出异常,那么关闭语句就不会执行
所以我们应该使用try…catch…finally来优化一下
以刚才的练习为例,对test_jdbc表的查询进行优化
Connection conn = null;Statement stmt = null;ResultSet rs = null ;try {// 1 加载驱动Class.forName(\"com.mysql.jdbc.Driver\");// 2 创建数据库连接对象// 导包使用的都是java.sql的conn = DriverManager.getConnection(\"jdbc:mysql://127.0.0.1:3306/_06_\", \"root\", \"root\");// 3 创建语句传输对象String sql = \"select * from test_jdbc\";stmt = conn.createStatement();// 4 接收数据库结果集rs = stmt.executeQuery(sql);while (rs.next()) {// 在循环遍历中,把数据取出来System.out.print(rs.getInt(\"id\") + \" \");System.out.print(rs.getString(\"name\") + \" \");System.out.println(rs.getDouble(\"money\")+\" \");}} catch (Exception e) {e.printStackTrace();}finally{try {if (rs != null) {rs.close();}if (stmt != null) {stmt.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}