jdbc(培训笔记)
- 格式:pdf
- 大小:228.87 KB
- 文档页数:15
create user username identified by oral此时的新用户没有任何权限,无法操作,要授权Grant create session to username最基本的回话权限JDBC1.Why?使用JDBC可以实现java应用程序与数据库进行交互.2.What? 主要学习哪些内容?使用JDBC API对数据库进行CRUD操作.第一章1. 应用程序连接数据库的方式?1) ODBC(OPEN DATEBASE CONNECTIVITY)开放数据库互联:一个以c语言为基础编写的实现与数据库互联的API,提供了一致的接口来访问不同的数据库.2) JDBC(java datebase connectivity):实现java应用程序与数据库进行交互,java版的ODBC.2. JDBC 能完成的功能:1) 能够建立与数据库的连接2) 发送一个SQL语句到数据库服务器3) 能够处理sql语句所执行后返回的结果集3. JDBC API 包含的内容?1) 应用程序接口2) 驱动程序接口4. JDBC driver1) 一组实现了JDBC API 的类或者是接口的集合2) 提供了一个实现了java.sql.Driver接口的类同一种数据库的不同版本的驱动程序也不一样5. JDBC Driver的种类.1) JDBC ODBC 桥Application→ JDBC ODBC 桥(type1)→ODBC→DB相当于java程序中访问c语言的东西2) 本地API本部分用java实现Application→JDBC Driver(type2)→DB Client Library(客户端软件)→DB缺点:必须装客户端软件3) JDBC 网络纯java驱动Application→JDBC Driver(type3)→Server网络服务器(并不是数据库服务器)→DB好处: 可配置型高,写的程序最少4) 本地协议纯java驱动Application→JDBC Driver(type4)→DB使用最多6. JDBC 编程人员使用到的接口?1) java.sql.*; :JDBC 编程的主要接口2) javax.sql.*; :JDBC编程的增强接口7. JDBC 编程中主要的接口和类1) Driver: 数据库驱动程序必须实现的接口2) DriverManager: 用来管理驱动程序3) Connection: 表示与数据库的一个特定的连接4) Statement: 用来发送并执行静态的SQL语句异构的5) PrepaerdStatement: 用来执行预编译的sql语句,继承与Statement 同构的6) CallableStatement: 用来执行procedure (存储过程)或者是function(方法) 同构的7) ResultSet: 表示结果集,用来处理sql执行的结果8) DatebaseMetadata: 用于获取数据库的相关信息9) ResultSetMetadata: 用于获取结果集的相关信息10) Types: 用来表示一般sql类型(JDBC类型)常量的类8. 使用唯一的URL确定数据库URL可以指定编码Oracle:URL: jdbc:oracle:thin:@localhost:1521:dbserverlocalhost 是ip地址dbserver 数据库服务器的名字driver: oracle.jdbc.driver.OracleDrivermysql:driver: com.mysql.jdbc.DriverURL: jdbc:mysql://localhost:3306/briupdb9. JDBC2.0 增强特性1) 数据源datasource: 专门创建连接的.用的是工厂模式2) 连接池connection pool: 提高效率的3) 分布式事务distrbute transaction:第二章1. JDBC 编程的步骤1) 注册驱动有三种①通过类装载器Class.forName(“oracle.jdbc.driver.OracleDriver”);②直接实例化驱动程序Driver driver=new oracle.jdbc.driver.OracleDriver();DriverManager.registerDriver(driver);③通过虚拟机(VM)参数-Djdbc.drivers=oracle.jdbc.driver.OracleDriver2) 建立连接①Connection conn=DriverManager.getConnection( “url”, ”user”, ”passwd”);②driver.connect(“url”,Properties);3) 创建StatementStatement stm=conn.createStatement();PreparedStatement pstm=conn.prepareStatement();CallableStatement cstm=conn.prepareCall();4) 执行sql语句三种不同的方法ResultSet rs=stm.executeQuery();rs表示结果集Int a=stm.executeUpdate();a表示执行sql语句后收到影响的记录数Boolean b=stm.execute();b表示有无ResultSet返回5) 处理结果集While(rs.next()){Rs.getxx(x);X可以是列的序数也可以是列名}6) 释放资源Rs.close();Stm.close();Conn.close();作业:创建一张表t_product(id,name,price,sum)1)插入10条记录2)把第五条记录的name改成”toshiba”3)把第三条删除4)以上每一步执行完毕都查询一次结果,并输出到控制台.select name from v$datebase;查询数据库名用properties的load方法和store方法是相反的.Ctrl+shift+F 格式化Ctrl+shift+o 导包第四章1. 异常Throwable→Error(在程序中不需要捕获的错误信息,系统崩溃,VM错误) ||→Exception(在应用程序中需要捕获且有可能恢复)|→checked(需要显示的捕获)|→unChecked(RuntimeException,不需要显示的捕获)runtimeexception(包括NULLPointException)3.JDBC编程中的异常1)SQLException(连接数据库出错以及其它的一些异常(sql语句错),需要捕获)2)SQLWarning(访问数据库的一些警告信息,不需要捕获)(很难发现)getNextException()一系列的异常getNextWarning()getError()getMessage()4.JDBC当中的元数据1)DatebaseMetadataa.数据库元数据,用来描述数据库的综合信息b.通过Connection.getDatabaseMetaData():2)ResultSetMetaDataA.结果集元数据,描述结果集的一些信息B.通过ResultSet.getResultMetaData();5.事务(ACID)6.事务边界的划分:开始边界A.当创建一个Connection对象B.调用mit();(一个事务的结束表示着另外一个事务的开始)结束边界mit();B.Connection.rollback();7.使用事务过程中可能出现的异常情况:1)脏读→一个事物读取到了另外一个事物没有提交的数据时间事务1 事务2T(time)1 开始事务T2 开始事务T3 查询账户,余额为1000T4 查询账户,余额为1000T5 取款100,余额变为900T6 查询账户,余额为900T7 撤销事务,余额1000T8 余额900?1000?2)不可重复读→一个事务读取到了另外一个事务已更新的数据时间事务1 事务2T(time)1 开始事务T2 开始事务T3 查询账户,余额为1000T4 查询账户,余额为1000 T5 取款100,余额变为900T6 提交事务T7 查询账户,余额为900T83)虚读(幻影读) 一个事物读取到了另外一个事务已经提交的新插入的数据时间事务1 事务2T(time)1 开始事务T2 开始事务T3 统计记录为1000T4 注册新用户T5 提交事务T6 统计记录为10018.事务的隔离级别TRANSACTION_NONE表示不支持事务TRANSACTION_READ_UNCOMMITED读取没有提交的数据TRANSACTION_READ_COMMITED 读已提交的数据TRANSACTION_PEPEATABLE_READ解决了脏读和不可重复读TRANSACTION_SERIALIZABLE事务的最高隔离级别隔离级别脏读不可重复读虚读READ_COMMITED 否是是PEPEATABLE_READ 否否是SERIALIZABLE 否否否Oracle支持两种: READ_COMMITED, SERIALIZABLENls_languageNls_data_language每写的任何一个类,都对应着Class类的一个对象....那什么时候创建的对象啊?调用静态方法是通过他的Singleton.getInstance();相当于Singleton.getClass().getInstance();锁的是Singleton.getClass()1.5 和1.6第五章JDBC2.01.ResultSet的可滚动性(默认只能向下(向前)移动)1)TYPE_FORWARD_ONLY: 只能向下(向前)移动2)TYPE_SCOLL_SENSTIVE: 既可以向前(向下)也可以向后(向上)滚动,并且对其他操作是敏感的3)TYPE_SCOLL_INSENSTIVE: 既可以向前(向下)也可以向后(向上)滚动,并且对其他操作是不敏感的2.ResultSet的可更新性(默认是不可以更新)1)CONCUR_READ_ONLY: 表示只读(不可更新)2)CONCUR_UPDATABLE: 表示可以更新使用的限制条件:1)只能查询一张表当中的内容2)在查询语句中不能使用连接条件(join)3)在查询的列中必须包含主键列(前提是有主键列)4)在查询的列中必须包含所有具有非空约束却没有默认值的列HOLD_CURSORS_OVER_COMMIT表示提交时关闭3.批处理1)Statement2)PreparedStatement4.高级数据类型BlobClob第六章2.0扩展内容1.连接池连接池就是在应用程序启动的时候创建多个连接,然后把这多个连接放入到一个连接池(集合)中,当并发访问需要的连接数量超过连接池中的数量,应用程序可以动态的去增加连接的数量.连接池中的连接由应用程序动态的创建,使用,释放.2.数据源(工厂模式Factory)直接在程序中创建连接的缺点:1)安全2)可移植性3)连接的维护问题数据源接口Javax.sql.DataSourceoracleConnectionPoolDateSource3.JNDI(java naming derectory interface) java命名和目录服务接口能够向应用程序提供查询和使用远程服务,服务可以是任何企业级服务.对于jdbc程序来说就是只能够查询和访问远程的数据源.有效的避免了程序员直接操作和提供服务相关联的代码.DAO模式Data access object数据访问对象1)data access: 数据访问2)active domain object: 活动域对象。
使用JDBC进行增加、修改、删除数据所有的操作方法:executeUpdate()
使用JDBC查询数据库?
int id=rs.getInt("id");
String name=rs.getString("name");
String password=rs.getString("password");
int age=rs.getInt("age");
通过ResultSet接口中的getXxx()方法,可以取出数据,按类型取
getInt、getString、getFloat…
在开发中往往使用表格对数据显示进行处理
范例:用户输入信息,并将信息插入到数据库之中
必须准备一个表单,用于输入数据
问题:使用Statement需要一个完整的SQL语句,但是如果输入的内容中包含“'”,会造成数据输入的不正确。
解决:使用Statement的子接口——PreapredStatement
建议大家,在开发中不要去使用Statement对象,而去使用PreapredStatement操作数据库以上是JDBC1.0的使用,而且也是用的最多的,必须掌握的
JDBC2.0批处理
了解:移动游标
性能一个比一个差
这些定位操作,都是在内存之中,而且是将全部的数据取出来,再进行定位性能很差,不建议使用
一定注意,此类操作性能很差,如果数据量较少,可以采用此种方式,如果数据量较大,绝对不要使用重点了解以下概念:批处理
下次任务:如何使用JDBC连接Oracle数据库。
1. 课程回顾mysql加强1)数据约束(表约束)默认值:default 默认值非空:not null唯一:unique主键:primary key (非空+唯一)自增长:auto_increment外键:foreign key 约束两种表2)关联查询(多表查询)2.1 交叉连接(产生笛卡尔积:原因:连接条件不足够)表数量-12.2 内连接查询:inner join只有满足连接条件的数据才会显示!!!2.3 左【外】连接查询:left [outer] join左表的数据必须全部显示,用左表去匹配右表的数据,如果右表有符号条件的数据则显示符合条件的数据;如果不符合条件,则显示null。
2.4 右【外】连接查询:right [outer] join右表的数据必须全部显示,用右表去匹配左表的数据,如果左表有符号条件的数据则显示符合条件的数据;如果不符合条件,则显示null。
2.5 自连接查询3)存储过程-- 创建存储过程语法delimeter 结束符号create procedure 名称(IN/OUT/INOUT 参数名称参数类型)begin带逻辑的sql语句end 结束符号--调用存储过程CALL 存储过程名称(实际参数);今天的目标:jdbc基础2 jdbc入门2.1 之前操作数据1)通过mysql的客户端工具,登录数据库服务器(mysql -u root -p 密码)2)编写sql语句3)发送sql语句到数据库服务器执行2.2 什么是jdbc?使用java代码(程序)发送sql语句的技术,就是jdbc技术!!!!2.3 使用jdbc发送sql前提登录数据库服务器(连接数据库服务器)数据库的IP地址端口数据库用户名密码2.4 JDBC接口核心的APIjava.sql.* 和javax.sql.*|- Driver接口:表示java驱动程序接口。
所有的具体的数据库厂商要来实现此接口。
|- connect(url, properties): 连接数据库的方法。
JDBC提供了三个类,用于向数据库发送SQL语句。
Connection接口中的三个方法可用于创建这些类的实例。
下面列出这些类及其创建方法:(1)Statement:由createStatement方法所创建。
Statement对象用于发送简单的SQL语句。
(2)PreparedStatement:由prepareStatement方法所创建。
PreparedStatement对象用于发送带有一个或多个输入参数(IN参数)的SQL 语句。
PreparedStatement拥有一组方法,用于设置IN参数的值。
执行语句时,这些IN参数将被送到数据库中。
PreparedStatement的实例扩展了Statement,因此它们都包括了Statement的方法。
PreparedStatement对象有可能比Statement对象的效率更高,因为它已被预编译过并存放在那以供将来使用。
(3)CallableStatement:由prepareCall方法所创建。
CallableStatement 对象用于执行SQL储存程序─一组可通过名称来调用(就像函数的调用那样)的SQL语句。
CallableStatement对象从PreparedStatement中继承了用于处理IN参数的方法,而且还增加了用于处理OUT参数和INOUT参数的方法。
不过通常来说createStatement方法用于简单的SQL语句(不带参数)、prepareStatement方法用于带一个或多个IN参数的SQL语句或经常被执行的简单SQL语句,而prepareCall方法用于调用已储存过程。
7. 事务事务由一个或多个这样的语句组成:这些语句已被执行、完成并被提交或还原。
当调用方法commit或rollback时,当前事务即告就结束,另一个事务随即开始。
缺省情况下,新连接将处于自动提交模式。
也就是说,当执行完语句后,将自动对那个语句调用commit方法。
Day01一.知识点1. 什么是JDBC1)JDBC Java语言用于访问数据库的标准2)由Sun公司指定3)各个数据库厂商提供实现2. JDBC核心API1)Connnection2)Statement3)ResultSetpackage com.tarena.day01;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class TestJABCDemo {public static void main(String[] args) throws Exception { Class.forName("oracle.jdbc.OracleDriver");Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.40:1521:tarena","csoracle","tarena");Statement stmt=con.createStatement();stmt.execute("select empno,ename from employee_zxw");ResultSet rs=stmt.getResultSet();while(rs.next()){System.out.println(rs.getInt(1)+","+rs.getString(2));}}}3. JDBC连接数据库步骤//装载并注册DriverClass.forName("oracle.jdbc.OracleDriver")//获取连接// url oracle: jdbc:oracle:thin:@ip:port:sidConnection con = DriverManager.getConnection(url,user,pwd)// 建立Statement并执行SQLStatement stmt = con.createStatement();boolean b = stmt.execute("...")如果是查询(b=true)ResultSet rs = stmt.getResultSet();如果不是查询(b=false)int updateCount = stmt.getUpdateCount();ResultSet rs = stmt.executeQuery("")int updateCount = stmt.executeUpdate("")// 通过ResultSet获得数据或元数据// 获得数据while(rs.next()) {rs.getXXX(int n)}//获得元数据ResultSetMetaData rsmd = rs.getMetaData();rsmd.getColumnCount();rsmd.getColumnName();rsmd.getColumnTypeName();4.如何做ConnectionUtilspackage com.tarena.day01;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Properties;public class ConnectUtils {private static String driver;private static String url;private static String userid;private static String password;static {try {// 获得当前类属性路径下的db.propertiesProperties props = new Properties();InputStream is = ConnectUtils.class.getClassLoader().getResourceAsStream("db.properties");props.load(is);driver = props.getProperty(driver);url = props.getProperty(url);userid = props.getProperty(userid);password = props.getProperty(password);Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, userid, password);}}打印出SQL表中数据类型package com.tarena.day01;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.Statement;import com.tarena.day1.ConnectionUtils;public class TestJABCDemo {public static void main(String[] args) throws Exception {/**传统连接JDBC方式*/// Class.forName("oracle.jdbc.OracleDriver");// Connection con=DriverManager.getConnection(// "jdbc:oracle:thin:@192.168.0.40:1521:tarena",// "csoracle","tarena");/**包装后连接JDBC方式*/Connection con=ConnectionUtils.getConnection();Statement stmt=con.createStatement();stmt.execute("select empno,ename from employee_zxw");ResultSet rs=stmt.getResultSet();while(rs.next()){System.out.println(rs.getInt(1)+","+rs.getString(2));}//rs.close();//stmt.close();/**stmt关闭,stmt2开启*/Statement stmt1=con.createStatement();stmt1.execute("insert into employee_zxw(empno,ename) values(1004,'jzf')");//int count=stmt1.executeUpdate("update");//System.out.println(count);int count=stmt1.getUpdateCount();System.out.println(count);stmt1.close();ResultSet rs1=stmt.getResultSet();ResultSetMetaData rsmd=rs1.getMetaData();int columnCount = rsmd.getColumnCount();for (int i = 1; i <= columnCount; i++) {System.out.print(rsmd.getColumnName(i) + " ");}System.out.println();System.out.println("------------------------------");while (rs.next()) {for (int i = 1; i <= columnCount; i++) {System.out.print(rs1.getString(i) + " ");}System.out.println();}con.close();}}5.注意程序中的SQL Injectionpackage com.tarena.day01;import java.sql.Connection;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import com.tarena.day1.ConnectionUtils;public class InsertUser {public static void main(String[] args) throws SQLException { Connection con=ConnectionUtils.getConnection();Statement stmt=con.createStatement();for(int i=0;i<100;i++){stmt.execute("insert into emp_bakzxw(time1,time2)values(1000,1000)");//此处眼严格尊重SQL语句,最好建议PrepareStatment }ResultSet rs = stmt.executeQuery("select * from emp_bakzxw");ResultSetMetaData rsmd = rs.getMetaData();int columnCount = rsmd.getColumnCount();/**打印表中数据成员*/for (int i = 1; i <= columnCount; i++) {System.out.print(rsmd.getColumnName(i) + " ");}System.out.println();System.out.println("------------------------------");/**打印表内内容*/while (rs.next()) {for (int i = 1; i <= columnCount; i++) {System.out.print(rs.getString(i) + " ");}System.out.println();}}}。
JavaJDBC理论笔记Blog:/IBM_hoojoemail:**************一、JDBC常用接口、类介绍JDBC提供对独立于数据库统一的API,用以执行SQL命令。
API 常用的类、接口如下:DriverManager管理JDBC驱动的服务类,主要通过它获取Connection数据库链接,常用方法如下:public static synchronized Connection getConnection(String url, String user, String password) throws Exception;该方法获得url对应的数据库的连接。
Connection常用数据库操作方法:Statement createStatement throws SQLException: 该方法返回一个Statement对象。
PreparedStatement prepareStatement(String sql) throws SQLException;该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译。
CallableStatement prepareCall(String sql) throws SQLException:该方法返回CallableStatement对象,该对象用于存储过程的调用。
上面的三个方法都是返回执行SQL语句的Statement对象,PreparedStatement、CallableStatement的对象是Statement的子类,只有获得Statement之后才可以执行SQL语句。
关于Connection控制事务的方法:Savepoint setSavepoint(): 创建一个保存点Savepoint setSavepoint(String name):创建一个带有名称的保存点void setTransactionIsolation(int level):设置事务隔离级别void rollback():回滚事务void rollback(Savepoint savepoint):回滚到指定保存点void setAutoCommit(boolean autoCommit): 关闭自动提交,打开事务void commit():提交事务Statement用于执行SQL语句的API接口,该对象可以执行DDL、DCL语句,也可以执行DML语句,还可以执行SQL查询语句,当执行查询语句是返回结果集,常用方法如下:ResultSet executeQuery(String sql) throws SQLException:该方法用于执行查询语句,并返回查询结果对应的ResultSet对象,该方法只用于查询语句。
1JDBC1.1JDBC概念1.1.1数据库驱动:数据库厂商提供的用来操作数据库的jar包1.1.2JDBC由于各大数据库厂商提供的数据库驱动各不相同, 导致了开发人员的学习成本十分的高. SUN公司为了简化数据库的操作, 提供了一套规范, 本质上就是一大堆的接口, 要求各大数据库厂商在提供驱动时都要实现JDBC这套接口, 实现之后, 只要学会JDBC这套接口, 所有的数据库驱动就都会使用了!JDBC由两个包组成, 分别是java.sql和javax.sql, 目前已经被集成到javase规范中!需要注意的是: JDBC中包含的就是一段接口, 真实操作数据库的代码都在具体的数据库驱动中. 也就是说在开发数据库程序时, 除了要导入JDBC相关的包之外, 还需要导入具体的数据库驱动包.1.2六个步骤实现JDBC程序 (!!掌握)//1.注册数据库驱动Class.for Name(“com.mysql.jdbc.Driver”);//2.获取数据库连接Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb1”, “root”, “root”);//简写形式为:Connection conn = DriverManager.getConnection(“jdbc:mysql:///mydb1”, “root”, “root”);//3.获取传输器Statement stat = conn.createStatement();//4.利用传输器发送sql到数据库执行, 返回执行结果ResultSet rs = stat.executeQuery(“select * from account”);int rows = stat.executeUpdate(“insert into account values(null, ‘y’, 666)”);//5.处理结果略//6.释放资源rs.close();stat.close();conn.close();1.3JDBC的增删改查(略) (!!掌握)1.4PreparedStatement (!!掌握)1.4.1Sql注入攻击//select * from user where username='张三'#'' and password=''//select * from user where username='张三' or '2=2' and password=''由于后台的SQL是拼接而来的, 其中的参数是用户提交的, 如果用户在提交参数时, 参杂了一些SQL关键字或者特殊符号, 就有可能会导致SQL语句语意的改变, 从而造成一些意外的操作!PreparedStatement优点:(1)可以防止sql注入攻击通过PreparedStatement对象发送sql, 是先把sql语句的骨架发送给数据库编译并确定下来, 后面发送的只能是参数的值, 不能影响sql语句的骨架, 即使参数中包含sql关键字或特殊符号, 也只会当成普通的文本来处理!(2)通过方法来设置参数, 省去了拼接SQL语句的麻烦!(3)可以提高程序的效率:通过PreparedStatement对象发送的sql语句(骨架)到数据库编译后会被数据缓存下来, 如果下次执行的sql与缓存中的相匹配, 就不再编译而是直接使用缓存中的语句, 可以减少sql语句编译的次数, 提高程序执行的效率!Statement对象发送的sql语句到数据库之后也会编译, 但是Statement对象是先拼接好再发送sql到数据库, 如果每次参数不同, 整条sql也就不同. 所以每次都需要编译!2批处理 (掌握)2.1批处理概述假设现有一大堆的sql要到数据库执行, 如果一条一条发送, 有多少条就需要发送多少次, 效率低下可以通过批处理提高发送sql语句的效率: 可以将这一大堆的sql添加到一个批中, 一次性将批发送给数据库, 数据库收到后打开批, 依次执行其中sql语句, 这样可以减少sql语句发送的次数, 从而提高程序执行的效率!2.2Statement方式来实现批处理优点:可以在一次批处理中添加结构不同的sql语句缺点:不能防止sql注入攻击没有预编译机制, 效率略低当发送结构相同的sql语句时, sql语句的骨架每次都需要编写。
JDBC第一天2007年6月4日一、JDBC原理概述1,JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口,由数据库厂商来实现,并规定了JAVA开发人员访问数据库所使用的方法的掉用规范。
2,JDBC的实现是由数据库厂商提供,以驱动程序形式提供。
3,JDBC在使用前要先加载驱动。
JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。
4、driver开发必须要实现Driver接口。
JDBC驱动程序的类型目前比较常见的JDBC驱动程序可分为以下四个种类:(1)JDBC-ODBC桥加ODBC驱动程序JavaSoft桥产品利用ODBC驱动程序提供JDBC访问。
注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。
因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。
(2)本地API这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。
注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。
(3)JDBC网络纯Java驱动程序这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。
这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。
所用的具体协议取决于提供者。
通常,这是最为灵活的JDBC驱动程序。
有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。
为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。
几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。
(4)本地协议纯Java驱动程序这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。
JDBC笔记1、单例模式使用场景⏹单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一个实例⏹单例模式的三个重要要素1.某个类只能有一个实例2.它必须自行创建这个实例3.它必须自行向整个系统提供这个实例⏹更具体说明如下1.单例模式的类只提供私有的构造函数2.类定义中含有一个该类的静态私有对象3.该类提供了一个静态的公有的方法用于创建或获取它本身的静态私有对象2、JDBC概述JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL 语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC为开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够使用java API编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。
JDBC实现原理JDBC原理JDBC与ODBC的区别(了解)二者皆可以实现对数据库的操作(连接、增删改查、建库建表)。
●JDBC是SUN开发的java连接数据库的标准●ODBC是微软开发的,C语言编写的,Java不能直接使用(Java 可以使用 ODBC,但最好是以JDBC-ODBC桥的形式使用)●JDBC 在很大程度上是借鉴了ODBC的,从他的基础上发展而来JDBC开发主要类(面试常见题)JDBC操作中的主要类有哪些:⏹JDBC API主要位于java.sql包中,关键的接口与类包括1.DriverManager类:驱动管理器,用于获得数据连接。
2.Connection接口:表示数据库连接。
3.Statement接口:负责执行SQL语句。
4.PreparedStatement接口:负责执行预准备的SQL语句。
5.ResultSet接口:表示SQL查询语句返回的结果集。
异常:i.SQLExceptionii.检查异常,必须处理或者抛出3、JDBC开发步骤3.0 准备工作获得数据库的驱动包,添加到classpath中驱动包:mysql-connector-java-5.1.xx.jar3.1 创建Java工程项目名的命名规范:项目名全部小写。
JDBC学习笔记一、概述JDBCJDBC从物理结构上说就是Java语言访问数据库的一套接口集合。
从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。
JDBC API:使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。
ODBC:基于C语言的数据库访问接口。
JDBC:是Java版的ODBC。
JDBC 特性:高度的一致性、简单性(常用的接口只有4、5个)。
驱动程序按照工作方式分为四类:1、JDBC-ODBC bridge + ODBC 驱动JDBC-ODBC bridge桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译成访问数据库命令。
优点:可以利用现存的ODBC数据源来访问数据库。
缺点:从效率和安全性的角度来说的比较差。
不适合用于实际项目。
2、基于本地API的部分Java驱动我们应用程序通过本地协议跟数据库打交道。
然后将数据库执行的结果通过驱动程序中的Java部分返回给客户端程序。
优点:效率较高。
缺点:安全性较差。
3、纯Java的网络驱动(中间协议) (本地协议)app JDBC 纯Java 中间服务器 DB缺点:两段通信,效率比较差优点:安全性较好4、纯Java本地协议:通过本地协议用纯Java直接访问数据库。
特点:效率高,安全性好。
二、JDBC 编程的步骤import java.sql.*;0.参数化String driverName = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/test"; //协议;库或服务器名称;服务器IP,端口String username = "root";String password = "";// Oracle的连接String driverName = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@192.168.0.23:1521:ora10g";// SQL Server 的连接String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test";//以下这些都需要写在有异常的代码块里,所以需要提取出来。