二、基础使用
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、常用数据库URL
mysql
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=value2
oracle
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 |