二、基础使用
1、前期准备工作
笔记
前期准备工作
主要是下载jar
1、在根目录下新建一个lib文件夹
2、把下载好的驱动复制到lib下
3、添加jar包到工程中
Oracle的jdbc驱动
1、JDBC Thin(开发常用)
thin是for thin client的意思,这种驱动一般用在运行在WEB浏览器中的JAVA程序。 它不是通过OCI or Net8,而是通过Java sockets进行通信,是纯java实现的驱动, 因此不需要在使用JDBC Thin的客户端机器上安装orcale客户端软件,所以有很好的移植性,通常用在web开发中。2、JDBC OCI
oci是Oracle call interface的缩写,此驱动类似于传统的ODBC 驱动。 因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的Java程序的机器上安装客户端软件, 其实主要是用到orcale客户端里以dll方式提供的oci和服务器配置。3、JDBC KPRB
这种驱动由直接存储在数据库中的JAVA程序使用,是在服务器内部使用, 他使用默认或当前的会话连接来访数据库,不需要用户名密码等,也不需要数据库url其他
``` 查看数据库版本 select * from v$versio
查看具体的版本号对应的驱动 http://tiantian0521.blog.163.com/blog/static/4172088320117294265766
## 2、基础步骤
### 1、加载驱动
1. 加载驱动方式一\(推荐采取\)
```java
Class.forName("com.mysql.jdbc.Driver") ;
加载驱动方式二
DriverManager.registerDriver(newDriver());注意:在实际开发中并不推荐采用registerDriver方法注册驱动。
1、采用方式一的方式加载,这样不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,即不需要import相关的包,使程序的灵活性更高
2、方式二,查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
自动加载驱动
JDK6之后,JDBC已经升级到4.0了 自动加载java.sql.Driver,而不需要再调用class.forName。
2、建立连接
2.1、核心代码
//mysql
Connection connection = DriverManager
.getConnection("jdbc:mysql://127.0.0.1:3306/test",
"root",
"root");
//oracle
Connection connection = DriverManager
.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott",
"123456");
2.2、说明
参数一URL标准语法由三部分组成:
jdbc : 子协议 : 子名称 jdbc --- 协议, jdbc的协议总是jdbc 子协议 --- 驱动程序,各种驱动程序都有不同的子协议 子名称 即数据源的名称,是表示数据库的方法,为定位数据库提供确定的信息,每个子协议都自己的特有结构2.3、常用数据库URLmysql
MySQL Connector/J Driver 下载地址:http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar 驱动程序包名:MySQL-connector-Java-x.x.xx-bin.jar 驱动程序类名: com.mysql.jdbc.Driver JDBC URL: jdbc:mysql://<host>:<port>/<database_name> 默认端口3306,如果服务器使用默认端口则port可以省略 MySQL Connector/J Driver 允许在URL中添加额外的连接属性 jdbc:mysql://<host>:<port>/<database_name>?property1=value1&property2=value2oracle
Oracle Thin JDBC Driver 驱动程序包名:ojdbc6.jar 驱动程序类名: Oracle.jdbc.driver.OracleDriver JDBC URL: jdbc:oracle:thin:@<host>:<port>:<SID>
3、创建Statement对象
3.1、核心代码
Statement statement = connection.createStatement();
3.2、说明
创建一个Statement对象主要是调用该对象的方法执行SQL语句
返回相应的结果
3.3、编写sql语句
例如:
String sql1 = "SELECT * FROM EMP" Statement statement1 = connection.createStatement(); ResultSet rs1 = statement.executeQuery(sql1); String sql2 = "SELECT ename,empno,job FROM EMP" Statement statement2 = connection.createStatement(); ResultSet rs2 = statement.executeQuery(sql2);注意事项:
JDBC没执行一条SQL语句,都需要Connection对象的createStatement相关的方法来创建Statement对象,利用Statement对象向数据库执行sql语句
2、Statement对象常用方法(API: java.sql.Statement)
//执行查询操作则返回结果集 resultSet = statement.executeQuery(sql); //执行增删改操作返回int值 int count = statement.executeUpdate(sql); //理论上可以执行任何SQL语句,一般用来执行创建表的语句 boolean execute = statement.execute(sql) if(true){//true 表示执行的查询操作返回结果集 ResultSet resultSet = statement.getResultSet(); }else{//false 表示执行的增删改的操作 int updateCount = statement.getUpdateCount(); }
执行DML操作(insert update delete)
int executeUpdate(String sql); //返回影响的行数执行DQL操作
ResultSet executeQuery(String sql); //返回查询的对象信息返回多个结果的SQL操作
boolean execute(String sql, int[] columnIndexes) throws SQLException //如果结果为 ResultSet 对象,则返回 true;如果其为更新计数或者不存在更多结果,则返回 false //一般用于执行DDL操作执行示例图

4、处理结果
4.1、执行更新返回的是本次操作影响到的记录数。
int count = statement.executeUpdate(sql);
4.2、执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据
1、while()遍历结果集
while (resultSet.next()) { /** * 获取值 有两种方式 * 第一种 通过列名来获取 * 第二种 通过下标索引来获取 ----根据索引下标获取值 ,效率高一点,但是维护起来不方便 */ resultSet.getInt(1); long empno = resultSet.getLong("empno"); String ename = resultSet.getString("ENAME"); ... } 2、遍历结果集for()
//遍历结果集for() PreparedStatement ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); //注意,要设置ResultSet的参数,否则默认只能.next()操作,不能往前滚动 ResultSet rs = ps.executeQuery(); for(rs.first();!rs.isAfterLast();rs.next()){ String username = rs.getString("username"); ... }
3、ResultSet示意图

5、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反
关闭记录集
关闭声明
关闭连接对象
finally{ if(rs != null){ // 关闭记录集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(stmt != null){ // 关闭声明 try{ stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 关闭连接对象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } } }
6、jdbc开发步骤图

7、常用的对应的数据类型
| mysql | oracle | java |
|---|---|---|
| TIMESTAMP | Timestamp | java.sql.Timestamp |
| VARCHAR | VARCHAR2 CLOB | java.lang.String |
| TEXT | VARCHAR2 CLOB | java.lang.String |
| INT | NUMBER(10,0) | java.lang.Integer |
| date(年月日) | java.sql.Date | |
| date(年月日时分秒) | java.sql.Date |