jdbc(培训笔记)
jdbc 笔记
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: 活动域对象。
9、 JAVA培训之JDBC编程02_JDBC操作技术(下)笔记
使用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数据库。
jdbc笔记分析
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学习笔记
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方法。
JDBC笔记整理
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理论笔记
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对象,该方法只用于查询语句。
JDBC课堂笔记
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(教材培训笔记)
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笔记
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学习笔记
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";//以下这些都需要写在有异常的代码块里,所以需要提取出来。
JDBC学习笔记总结
JDBC精简学习笔记总结前言:本文之目的在于记录JDBC的整个流程,已备后来之记忆、查询。
所涉理论,稍作简述,亦使读者不会因之而生厌。
另外,本文总结自Time研究室的《JDBC 数据库程序设计》(中国铁道出版社),特此声明。
非是做广告,只为良心。
废话讲毕,正式开题:JDBC概述:要与数据库进行信息通信,首先要与数据库进行连接。
然后在这条“连接线”上,向数据库管理系统传送SQL命令。
数据库管理系统接收命令后,会进行一些操作合法性的检查(其实,要与数据库建立连接,也要通过数据库管理系统的审核,例如账号、密码是否正确)。
若命令合法,系统将执行该命令,并通过JDBC API将所得结果封装在Java对象里。
然后程序就可以从该对象里读取所需数据。
以上便是JDBC使用的整个过程的一个概述,其中我们所要关心的只是由程序负责处理的部分,至于由数据库管理系统负责的部分,我们只需关心其结果(例如,能否建立连接,能否正确执行命令),而无需关心其具体实现。
以上红字所标属部分,合法性检查以及执行SQL命令都是由数据库管理系统执行操作,我们只需简单了解其机制。
而建立连接、传送SQL命令、读取数据则是此处需要我们重点关心的内容。
第一讲:JDBC的常规使用方法:1、建立连接:建立连接分为两个关键步骤:①加载驱动程序;②建立连接。
此处所涉及到的Java类有:Class、Driver、DriverManager。
其中Driver类便是我们所提到的驱动程序,由数据库生产厂商提供,此处我们以mysql数据库为例。
在此之前,希望读者对JDBC的原理能有一些了解,以便能更容易理解我接下来所说的内容。
另外,要建立连接,我们还要提供3个必不可少的参数:①数据库名称;②数据库账号;③数据库密码。
其中,数据库名称封装在建立连接所需要的URL中。
关键代码:①加载驱动程序:Class.forName(“com.mysql.jdbc.Driver”);②建立连接:Connection conn=DriverManager.getConnection(url,name,pwd);此处,String url=”jdbc:mysql://localhost:3306/”+数据库名称String name=数据库账号String pwd=数据库密码需要说明的是,这两句关键代码所用的方法都会抛出异常,故应将这两句放在try-catch块里。
达内jdbc笔记完全版
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学习笔记
最典型的Oracle JDBC程序:1.查询语句:import java.sql.*;publicclass TestJDBC {publicstaticvoid main(String[] args) {ResultSetrs = null;Statement stmt = null;Connection conn = null;try {Class.forName("oracle.jdbc.driver.OracleDriver");//new oracle.jdbc.driver.OracleDriver();conn =DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1: 1521:SXT", "scott", "tiger");stmt = conn.createStatement();rs = stmt.executeQuery("select * from dept");while(rs.next()) {System.out.println(rs.getString("deptno"));System.out.println(rs.getInt("deptno"));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {try {if(rs != null) {rs.close();rs = null;}if(stmt != null) {stmt.close();stmt = null;}if(conn != null) {conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}}2.DML语句Insertimport java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;publicclass TestDML {publicstaticvoid main(String[] args) {Statement stmt = null;Connection conn = null;try {Class.forName("oracle.jdbc.driver.OracleDriver");//new oracle.jdbc.driver.OracleDriver();conn =DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1: 1521:SXT", "scott", "tiger");stmt = conn.createStatement();String sql = "insert into dept2 values (98, 'GAME', 'BJ')";stmt.executeUpdate(sql);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {try {if(stmt != null) {stmt.close();stmt = null;}if(conn != null) {conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}}}3.DML语句2 从命令行输入3个值,并把这三个值插入depart2表当中。
JDBC学习流程笔记
JDBC 学习流程笔记目录一、DriverManager (1)二、Connection接口 (2)三、ResultSet (2)数据库驱动包的处理方法:1.新建lib包,将驱动包放入lib包2.驱动包右键->Build Path->add to Build Path一、DriverManager用于加载驱动,并创建与数据库的链接,JDBC连接Oracle示例.txt •DriverManager.registerDriver(new OracleDriver()),注意:在实际开发中,并不推荐采用这个方法注册驱动。
如果采用此种方式,会导致驱动程序加载两次。
•Class.forName(“oracle.jdbc.driver.OracleDriver”);采用此种方式不会导致驱动对象在内存中重复出现。
•DriverManager.getConnection(url, user, password),根据url获取数据库的链接。
二、Connection接口用于代表数据库的链接,Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成。
常用方法:createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务。
三、ResultSet用于代表Sql语句的执行结果。
Resultset封装执行结果时,采用的类似于表格的方式。
获取数据的get方法:特别说明:在默认情况下,我们的rs结果集,只能向前移动,这样rs 结果就不能复用,如果希望复用,则可以这样做:statement=ct.createStatement(ResultSet.TYPE_SCROLL_INSENSITI VE,ResultSet.CONCUR_READ_ONLY);ResultSet 的可选项有.txt关于ResultSet的具体请参见帮助文档。
JDBC学习笔记
JDBC学习笔记(该笔记由SD0601张亚玲提供)(我们所学习的均为jdbc2.0规范,jdbc1.0为直接连接,而jdbc2.0它有JNDI服务,在服务器启动时自动创建一个连接池,定义了一个DataSource接口,用其标准才能使用JDBC连接池)一、关于JDBCl. 连接到数据库的方法答:1) ODBC(Open Database Connectivity)一个以C语言为基础访问SQL为基础数据库引擎的接口,它提供了一致的接口用于和数据库沟通以及访问数据。
2) JDBCJava版本的ODBC2. JDBC应用编程接口答:JDBC应用编程接口是:1)标准的数据访问接口,可以连到不同的数据库;2)JAVA编程语言的一组类和接口。
JDBC应用编程接口能够:1)连接到数据库;2)发SQL查询字符串到数据库;3)处理结果。
JDBC应用编程接口有二个主要的部分:1)JAVA应用程序开发接口面向JAVA应用程序开发者;2)JDBC驱动程序开发接口。
3. JDBC Driver答:1) 一大堆实现了JDBC类和接口的类;3)提供了一个实现java.sql.Driver接口的类。
4. JDBC Driver的四种类型答:1) JDBC-ODBC桥由ODBC驱动提供JDBC访问,JDBCZ转化为ODBC。
4)Native BridgeJava对数据库的访问转化为数据库的客户端对数据库的访问,所以需要安装数据库的客户端(API)。
5)pure java直接发送到数据库被数据库监听。
纯的Java driver,将JDBC调用转入DBMS,与网络协议无关。
然后通过服务器将调用转为DBMS协议。
6)本地协议纯的java driver,将JDBC调用直接转为DBMS使用的网络协议5. JDBC开发者接口答:1) java.sql--java 2平台下JDBC的主要功能,标准版(J2SE)7)javax.sql--java 2平台下JDBC增强功能,企业版(J2EE)6. 使用URL确认数据库答:我们使用URL来确定一个数据库(正确的Driver,正确的主机,正确的协议,正确的协议,正确的用户名和密码);语法:protocol:subprotocol:subname范例:jdbc:db2:MyTestjdbc:db2://localhost:6789/MyTest-------------------------------oracle--------------------------------驱动:oracle.jdbc.driver.OracleDriverURL:jdbc:oracle:thin:@<machine_name><:port>:dbname注:machine_name:数据库所在的机器的名称;(或IP)port:端口号,默认是1521-------------------------------mysql--------------------------------驱动:org.gjt.mm.mysql.DriverURL:jdbc:mysql://<machine_name><:port>/dbname注:machine_name:数据库所在的机器的名称;(或IP)port:端口号,默认3306----------------------------pointbase---------------------------------驱动:com.pointbase.jdbc.jdbcUniversalDriverURL:jdbc:pointbase:server://<machine_name><:port>/dbname注:machine_name:数据库所在的机器的名称;(或IP)port:端口号,默认是9092---------------------------SQL Server---------------------------------驱动:com.microsoft.jdbc.sqlserver.SQLServerDriverURL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbnam e>注:machine_name:数据库所在的机器的名称;(或IP)port:端口号,默认是1433--------------------------DB2---------------------------------------------驱动:com.ibm.db2.jdbc.app.DB2DriverURL:jdbc:db2://<machine_name><:port>/dbname注:machine_name:数据库所在的机器的名称;(或IP)port:端口号,默认是50007. javax.sql包JDBC2.0的增强功能答:1) 数据源接口;8)连接池;9)分布式交易;10)行集;二、基本的JDBC应用1、创建一个基本的JDBC应用答:1) 步骤一:注册一个driver;①driver被用于连接到数据库;② JDBC应用编程接口使用第一个能成功连接到给定URL的driver;③在同一时间可以装载多个driver注册一个driver的方法:①使用类loader(装载;实例化;注册入DriverManager)Class.forName("oracle.jdbc.driver.OracleDriver");a.Class.forName("Com.ibm.db2.jdbc.app.DB2Driver");b.Class.forName("Com.ibm.db2.jdb.DB2Driver");c.Class.forName("Com.microsoft.jdbc.sqlServer.SQLServerDriver);d.Class.forName("oracl.jdbc.driver.OracleDriver");e.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");②实例化一个Drivera.Driver drv = new COM.cloudscape.core.RmiJdbcDriver();2) 步骤二:建立一个到数据库的连接;第一种方法:DriverManager调用getConnection(urlString)方法,实际上调用的是driver的connect(urlString)方法;Connection con= DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.26:1521:tarenadb","tarena","tar ena");①当一个driver肯定地对应到一个数据库URL,DriverManager建立一个连接;②当没有driver匹配,返回null然后下一个driver被检验;③假如没有建立连接,抛出一个SQLExcepiton异常第二种方法:调用driver的connect方法。
我的JDBC笔记
JDBCJAVA API工作原理:与数据连接、发送SQL语句、处理结果。
以下是4个重要环节。
DriverManager :依据数据库的不同,管理JDBC驱动Connection :负责连接数据库并担任传送数据的任务Statement :由Connection 产生、负责执行SQL语句ResultSet:负责保存Statement执行后所产生的查询结果java.sql中核心的类和接口驱动类型●本地java驱动java—jdbc驱动—本地Db驱动—Databse●网络纯java驱动java—jdbc—中间件—jdbc—Databse●本地java编写的驱动Java—jdbc驱动—Database●JDBC-ODBC+ODBC驱动java—jdbc-odbc—odbc—Databse☐网络服务可以采用多种技术来提高系统性能,这些服务包括:⏹负载均衡⏹缓存技术⏹连接池技术⏹容错机制JDBC编程步骤1、基本步骤(1)加载连接数据库的JDBC驱动程序●Class.forName(“com.mysql.jdbc.Driver”);推荐这种方式,不会对具体的驱动类产生依赖。
●DriverManager.registerDriver(com.mysql.jdbc.Driver);会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
●Sys tem.setProperty(“jdbc.drivers”,“driver1:driver2”);虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。
(2)创建与数据库的连接对象,Connection(3)获取发送SQL语句的对象,比如Statement(4)发送SQL语句,对目标数据库中的数据表进行访问更新与查询(查询操作将返回结果集ResultSet)(5)如果返回结果集,那么遍历结果集(6)倒序关闭资源, (ResultSet、Statement、Connection)最基本编程实例如下(注:其中语句随后将被封装到DAO组件当中):2.程序3.程序说明:(1)url格式:jdbc:<subprotocal>:[database locator]- jdbc---指出要使用JDBC技术- subprotocal---定义驱动程序类型- database locator---提供网络数据库的位置和端口号(包括目标数据库所在的主机名或ip、端口和目标数据库名)- 常用数据库url格式:MySQL :jdbc:mysql://MyDbComputerNameOrIP:3306/testOracle :jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCLSQLServer :jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;DatabaseName=master(2)查询和更新操作- st.executeQuery(): 查询操作,有结果集ResultSet返回- st.executeUpdate():更新操作,返回值为int型(如果操作的是DML语句,则返回被操作的行数;如果操作的是DDL语句,则返回0)(3)遍历结果集- 结果集中默认的游标位置在第一条记录的前面,因此遍历结果集时必须要next,否则出现Before start of result set异常。
JDBC学习笔记
JDBC学习笔记Java相关课程系列笔记之四笔记内容说明JDBC(范传奇老师主讲,占笔记内容100%);目录 一、 JDBC 概述 (1)1.1什么是 JDBC.......................................................................................................................1 1.2什么是驱动...........................................................................................................................1 1.3 SQL lite................................................................................................................................. 1 1.4如何使用 Java 连接某种数据库......................................................................................... 1 1.5连接数据库并操作...............................................................................................................1 1.6连接数据库时常见的错误 (1)二、 JDBC 核心API........................................................................................................................3 2.1 Connection............................................................................................................................ 3 2.2 Statement...............................................................................................................................3 2.3 ResultSet................................................................................................................................3 2.4 DriverManager......................................................................................................................3 2.5 UUID.....................................................................................................................................4 2.6案例:使用 JDBC 连接数据库,并操作 SQL 语句.........................................................4 2.7案例:通过 JDBC 创建表...................................................................................................5 2.8案例:使用 JDBC 向表中插入数据...................................................................................5 2.9遍历 Student_chang 表 (6)三、 JDBC 核心 API :PreparedStatement (7)3.1 Statement 的缺点..................................................................................................................7 3.2 PreparedStatement 的优点................................................................................................... 7 3.3 PreparedStatement 的常用方法........................................................................................... 7 3.4案例详见第五章 StudentDAO 类. (8)四、 Connection 封装 (9)五、 DAO....................................................................................................................................... 10 5.1持久类封装.........................................................................................................................10 5.2 DAO 层............................................................................................................................... 10 5.3 Properties 类........................................................................................................................10 5.4案例:注册系统.. (10)六、批处理 (14)6.1批处理的优点.....................................................................................................................14 6.2 JDBC 批处理 API...............................................................................................................14 6.3案例:详见 8.4案例 step7 (14)七、事务处理 (15)7.1事务特性 ACID..................................................................................................................15 7.2 JDBC 中对事务的支持(API ) (15)八、 DAO 事务封装 (16)8.1 ThreadLocal 原理............................................................................................................... 16 8.2原理图.................................................................................................................................16 8.3 ThreadLocal 核心 API........................................................................................................16 8.4案例:登录系统(使用 ThreadLocal 实现连接共享).. (16)九、分页查询 (20)9.1分页查询的基本原理 19.2为何使用分页查询 (20)9.3 Oracle分页查询SQL语句 (20)9.4 MySQL分页查询SQL语句 (20)9.5“假”分页 (21)9.6案例:分页查询 (21)2一、JDBC概述1.1什么是 JDBC1)Java的设计者希望使用相同的方式访问不同的数据库。
jdbc笔记
简介JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API。
J2SE的一部分,由java.sql,javax.sql包组成。
连接数据的步骤注册驱动(只做一次)建立连接(Connection)创建执行SQL的语句(Statement)执行语句处理执行结果(ResultSet)释放资源快速起步示例packagecn.itcast.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;public class Base {public static void main(String[] args) throws Exception {test();}static void test() throws SQLException {DriverManager.registerDriver(new com.mysql.jdbc.Driver());Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "123456");Statement st = conn.createStatement();ResultSetrs = st.executeQuery("select * from user");while (rs.next()) {System.out.println("id=" + rs.getObject("id") + ","+ rs.getObject(2) + "," + rs.getObject(3) + "\t"+ rs.getObject(4));}rs.close();st.close();conn.close();}}F3 键打开类或添加源文件包Alt + / 代码提示如何在eclipse中查看javax包中的源代码1.点“window”-> "Preferences" -> "Java" -> "Installed JRES"2.此时"Installed JRES"右边是列表窗格,列出了系统中的JRE 环境,选择你的JRE,然后点边上的"Edit...",会出现一个窗口(Edit JRE)3.选中rt.jar文件的这一项:“c:\program files\java\jre_1.5.0_06\lib\rt.jar”点左边的“+”号展开它,4.展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择你的JDK目录下的“src.zip”文件5.一路点"ok",结束。
JDBC全套详细笔记(心血放出)
目录一、JDBC编程步骤 (3)(一)注册(实例,加载)一个Driver (3)(二)建立连接 (5)(三)获得一个Statement对象 (5)(四)通过Statement执行Sql语句 (6)(五)遍历结果集 (6)(六)关闭数据库连接(释放资源) (6)二、Statement (7)(一)Statement (7)1.executeQuery (7)2.executeUpdate (7)3.execute (7)4.例子 (7)5.要点 (8)(二)PreparedStatement (8)(三)CallableStatement (9)(四)Statement的两个不足 (10)1.特定的情况下,效率低 (10)2.类型安全得不到保证 (10)三、ResultSet (10)四、事务 (12)(一)事务的四大特性 (12)1.原子性 (13)2.一致性 (13)3.分离性 (13)4.持久性 (13)(二)事务处理三步曲 (13)(三)事务并发和事务隔离级别 (14)(四)例子 (14)五、MetaData(元数据) (15)(一)结果集元数据ResultSetMetaData (15)(二)数据库元数据DatabaseMetaData (16)六、JDBC2.0核心特性 (17)(一)Scrollability结果集可滚动 (17)1.ResultSet类中的Course方式主要有: (17)2.ResultSet类中的数据是否允许修改主要有: (17)3.绝对定位 (18)4.相对定位 (18)5.判断位置 (18)6.例子 (18)(二)Updatability结果集可更新 (19)1.更新步骤: (19)2.插入步骤: (20)3.删除步骤: (21)(三)Batchupdates可批量更新 (22)1.对于Statement的批量更新处理: (22)2.对于PreparedStatement的批量跟新处理 (22)3.例子 (22)七、SQL3.0规范中的新类型 (24)一、JDBC编程步骤(一)注册(实例,加载)一个Driver方式一:Class.forName(“oracle.jdbc.driver.OracleDriver”);JAV A规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动注册到驱动程序管理器中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
几家提供者正将 JDBC 驱动程序加到他们现有的数据库中间件产品中。 (4)本地协议纯 Java 驱动程序 这种类型的驱动程序将 JDBC 调用直接转换为 DBMS 所使用的网络协议。 这将允许从客户机机器上直接调用 DBMS 服务器, 是 Intranet 访问的一个很实用的解决 方法。 由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者 已在着手做这件事了。 据专家预计第(3)、( 4)类驱动程序将成为从 JDBC 访问数据库的首方法。 第(1)、( 2 )类驱动程序在直接的纯 Java 驱动程序还没有上市前会作为过渡方案来使 用。 对第(1)、 ( 2)类驱动程序可能会有一些变种,这些变种要求有连接器,但通常这些是 更加不可取的解决方案。 第( 3)、 ( 4)类驱动程序提供了 Java 的所有优点,包括自动安装 (例如,通过使用 JDBC 驱动程序的 appletapple t 来下载该驱动程序) 。 5、JDBC 的 API java.sql 包和 javax.sql 包 DriverManage r 类(驱动管理器) ,它可以创建连接,它本身就是一个创建 Connection 的工厂 (Factory)。 Driver 接口 入口 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 的数据库的驱动名字叫 o 加到环境变量 PATH 中。 jdbc14.jar,这个 jar 文件中出访的驱动程序的.class 文件 要使用这个驱动程序,要先将他
Properties extends Hashtable<String,String>,专门处理Properties文件,提供load(InputStream is)
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
一,注册加载驱动 driver,也就是强制类加载 1、Class.forName(driver); driver = "oracle.jdbc.driver.OracleDriver"; 2、Driver d=new Driver 类(); Driver d = new oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver(d); 3、编译时利用虚拟机的系统属性 java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver 类名(文件) 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 连接是通过 DriverManage r 的静态方法 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.39:1521:TARENADB MySql URL 的写法 例: jdbc:mysql://192.168.8.21:3306/test SQLServer URL 的写法 例:jdbc:microsoft:sqlserver://192.168.8.21:1433 java -Djdbc.drivers=驱动全名 类名 使用系统属性名,加载驱动 -D 表示为系统属性赋值 使用 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 。
if(con!=null) try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } CallableStatement 是可以用非 sql 语句来访问数据库,他是通过调用存储过程(PL/SQL )来 访问数据库的。可以直接使用连接来调用 prepareCall(...)方法,来执行这个存储过程, "..." 是存储过程的名字。 对于系统时间要去数据库时间 TimeStamp 和 Date 都可以保存时间 TimeStamp 可以保存时、分、秒的数据,Date 只保存日期年月的信息。 SQLException 是检查异常必须处理要么 throws ,要么 try{}catch(){} getErrorCode()可以获得错误码,可以对错误进行查询。
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
作业:修改 StudentDao 的设计以及实现和测试程序,来完成从命令行传递学生的信息。
JDBC 第二天
2007 年 6 月 5 日
一、提问 如何进行代码复用 继承复用、组合复用 私有复用:一个方法在一个类的内部使用 工具方法:使用静态方法,使用类名直接调用 二、Statement execute(sql); 当不知道执行的 SQL 语句是什么类型的时候执行 ,返回值是 boolean executeQuery(sql); 执行查询语句 executeUpdate(sql); 执行更新语句
JDBC 第一天
一、JDBC 原理概述
2007 年 6 月 4 日
1,JDBC 是一套由 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 所提出的安全性、通过防火墙 的访问等方面的额外要求。
ExceptionInInitializerError
三、PreparedStatement 可以使用参数替代 sql 语句中的某些参数使用 "?" 代替,他先将带参数的 sql 语句发送到数 据库,进行编译,然后 PreparedStatement 会将参数发送给数据库。 在使用 PreparedStatement 时,在设置相应参数时,要指明参数的位置和类型,以及给出参数 值 根据不同的参数类型使用不同的 setXXX(参数的位置,参数值)来设置参数 例: public void insert(Student s){ Connection con=ConnectionFactory.getConnection();//建立连接 String sql="insert into student(id,name) values(?,?)"; PreparedStatement ps=null; try { ps=con.prepareStatement(sql);//创建一个 PreparedStatement int index=1; ps.setInt(index++,s.getStuId()); //为参数赋值 ps.setString(index++,s.getName()); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(ps!=null) try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }