一.JDBC原理概述 1,JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口,由数据库厂商来实现,并规定了JAVA开发人员访问数据库所使用的方法的调用规范。 2,JDBC的实现是由数据库厂商提供,以驱动程序形式提供。 3,JDBC在使用前要先加载驱动。 JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。 驱动开发必须要实现Driver接口。 数据库驱动的实现方式 JDBC-ODBC桥接式 JDBC网络驱动,这种方式是通过中间服务器的协议转换来实现的 JDBC+本地驱动,这种方式的安全性比较差。 JDBC驱动,由数据库厂商实现。 二.JDBC的API java.sql包和javax.sql包 Driver接口(驱动),在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序 Class.forName("oracle.jdbc.driver.OracleDriver") DriverManager类(驱动管理器),它可以创建连接,它本身就是一个创建Connection的工厂(Factory)。 Connection接口,会根据不同的驱动产生不同的连接 Statement接口,发送sql语句 ResultSet接口(结果集),是用来接收select语句返回的查询结果的。其实质类似于集合。 三.JDBC应用步骤 1,注册加载一个driver驱动 2,创建数据库连接(Connection) 3,创建一个Statement(发送sql) 4,执行sql语句 5,处理sql结果(select语句) 6,关闭Statement 7,关闭连接Connection。 注意:6,7两个步骤是必须要做的,因为这些资源是不会自动释放的,必须要自己关闭 访问Oracle的数据库的驱动名字叫ojdbc14.jar,要使用这个驱动程序,要先将他加到环境变量CLASSPATH中。 注册加载驱动driver,也就是强制类加载 Class.forName(Driver包名.Driver类名)。 Driver d=new Driver类();//注意:这个方法不能用参数来构造 DriverManager.registerDriver(d); Oracle的Driver的全名oracle.jdbc.driver.OracleDriver mysql的Driver的全名com.mysql.jdbc.Driver SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver 创建连接 DriverManager.getConnection(String url,String username,String password); Connection连接是通过DriverManager的静态方法getConnection(.....)来得到的,这个方法的实质是把参数传到实际的Driver中的connect()方法中来获得数据库连接的。 Oracle的URL值是由连接数据库的协议和数据库的IP地址及端口号还有要连接的数据库的库名(DatebaseName) Oracle URL的格式 jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端口号):XXXXXXX(所使用的库名) 例:jdbc:oracle:thin:@192.168.0.20:1521:tarenadb MySql URL的写法 例: jdbc:mysql://localhost:3306/tarena SQLServer URL的写法 例:jdbc:microsoft:sqlserver://localhost:1433/test java -Djdbc.drivers=驱动的完整类名 使用虚拟机参数,加载驱动 -D表示为虚拟机参数赋值 java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver
四.JDBC基本方法 DriverManager:如果有多个驱动可用的话,DriverManager会根据URL选择其中一个可用的驱动.
Driver:可以选择固定的驱动 Driver driver = new oracle.jdbc.driver.OracleDriver(); String user = "sd0613"; String password = "sd0613"; Properties prop = new Properties(); prop.setProperty("user",user); prop.setProperty("password",password); driver.connect(url,properties);
executeQuery(sqlString);//返回结果集 executeUpdate(sqlString);//返回值为该次操作影响的记录条数,create table返回0 execute(sqlString); //适用于不知道具体的操作是什么,返回值是boolean类型的 //如果返回值是true,代表执行查询操作;否则代表执行更新操作.
ResultSet next()方法: 1.判断是否存在下一条记录 2.将游标移向下一条记录 getXXX(字段名或字段序号)//注意:字段序号从1开始
关闭问题: 使用Connection对象获得一个Statement,Statement中的executeQuery(String sql) 方法可以使用select语句查询,并且返回一个结果集 ResultSet通过遍历这个结果集,可以获得select语句的查询结果,ResultSet的next()方法会操作一个游标从第一条记录的前边开始读取,直到最后一条记录。executeUpdate(String sql) 方法用于执行DDL和DML语句,可以update,delete操作。 注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接时才可以使用的,所以在使用结束之后有可能其他的Statement还需要连接,所以不能先关闭Connection。 |