黑马程序员小鲁哥哥白话笔记-JDBC(一)

合集下载

黑马程序员__JDBC事务及将查询结果封装成对象通用

黑马程序员__JDBC事务及将查询结果封装成对象通用

---------------------- android培训、java培训、期待与您交流!----------------------事务(ACID):1、原子性(atomicity):组成事物处理的语句形成了一个逻辑单元,不能只执行其中的一部分;2、一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)3、隔离性(isolcation):一个事务处理对另一个事务处理的影响;4、持续性(durability):事务处理的效果能够被永久保存下来;Connection.setAutoCommit(false);--à打开事务mit( );--à提交事务Connection.rollback( );--à回滚事务保存点(SavePoint)1、当只想撤销事务中的部分操作时可使用SavePoint2、 SavePoint sp=connection.setSavePoint( );3、 Connection.rollback(sp);mit( );JTA:1、跨越多个数据源的事务,使用JTA容器实现事务;2、分成两阶段提交erTransaction tx=(UserTransaction)ctx.lookup(“jndiName”); Tx.begin( );隔离级别:读未提交(Read uncommitted)、读已提交(Read committed)、可重复读(Repeatable read)、可串行化(Serializable)--à脏读、不可重复读、幻读批处理:PreparedStatement,addBatch( );PreparedStatement.executeBatch( );可滚动的结果集:Statement st=connection.createStatement(Result.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs=st.executeQuery(sql);rs.beforeFirst( );rs.afterLast( );rs.first( );rs.isFirst( );st( );rs.isLast ( );rs.absolute(9);rs.moveToInsertRow( );可更新的结果集:Conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs.updataString(“col name”,”new value”);rs.updataRow( );DatabaseMetaData(数据库的元数据信息)和ParameterMetaData(参数的元数据信息)1、 DatabaseMetaData meta=connection.getMetaData( );2、通过DatabaseMetaData可以获得数据库相关的信息,如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别、是否支持滚动结果集等ParameterMetaData pmd=preparedStatement.getParameterMetData( );通过ParameterMetaData可以获得参数信息;ResultSetMetaData meta=rs.getMetaData( );通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等;可以将ResultSet放入Map(key:列名 value:列值);ORM(object、relation、map):-----à利用反射做的通用模块---à将查询结果封装为对象package cn.itcast.jdbc;publicclass ORMTest {publicstaticvoid main(String[(参考:)] args)throws IllegalArgumentException, SQLException, IllegalAccessException, InvocationTargetException{User user=(User) getObject("select id as Id,name as Name,birthday as Birthday,money as Money from user where id=1",User.class);System.out.println(user);}static Object getObject(String sql,Class clazz)throws SQLException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;try{conn=JDBCUtils.getConnection();ps=conn.prepareStatement(sql);rs=ps.executeQuery();ResultSetMetaData rsmd=rs.getMetaData();int count=rsmd.getColumnCount();String[] colNames=new String[count];for(int i=1;i<=count;i++){ colNames[i-1]=rsmd.getColumnLabel(i);}Object obj=null;if(rs.next()){obj=new User();for(int i=0;i<colNames.length;i++){ String colName=colNames[i];String methodName="set"+colName; Method[] ms=obj.getClass().getMethods();for(Method m:ms){if(methodName.equals(m.getName())){m.invoke(obj, rs.getObject(colName));}}}}return obj;}finally{JDBCUtils.free(conn, ps, rs);}}}----------------------android培训、java培训、期待与您交流!----------------------详细请查看:/heima。

JDBC知识点总结

JDBC知识点总结

JDBC知识点总结JDBC(Java Database Connectivity)是Java语言访问关系型数据库的标准接口。

它提供了一组方法和类,使得Java程序能够和数据库进行连接、查询和更新等操作。

下面是关于JDBC的知识点总结。

1.JDBC的工作机制JDBC通过驱动程序(Driver)将Java程序和数据库连接起来。

驱动程序的主要作用是提供与数据库通信的实现。

JDBC的工作机制可以分为以下几个步骤:- 加载驱动程序:使用Class.forName(方法加载驱动程序类。

- 建立连接:使用DriverManager.getConnection(方法建立与数据库的连接。

- 创建语句对象:使用连接对象的createStatement(方法或prepareStatement(方法创建Statement或PreparedStatement对象。

- 执行SQL语句:使用Statement或PreparedStatement对象的executeQuery(、executeUpdate(等方法执行SQL语句。

- 处理结果:对于查询操作,可以通过ResultSet对象获取结果集中的数据;对于更新操作,可以通过返回的整数值判断操作是否成功。

- 关闭连接:使用Connection对象的close(方法关闭连接。

2.JDBC的核心接口- Connection接口:表示数据库连接对象。

可以通过DriverManager.getConnection(方法获取Connection对象。

- Statement接口:用于执行静态SQL语句,不带参数。

- PreparedStatement接口:用于执行带有参数的SQL语句,可以提高SQL语句的效率和安全性。

- CallableStatement接口:用于执行存储过程。

- ResultSet接口:表示查询结果集。

可以通过Statement或PreparedStatement的executeQuery(方法获取ResultSet对象。

黑马程序员小鲁哥哥白话笔记-JDBC(二)

黑马程序员小鲁哥哥白话笔记-JDBC(二)

小鲁哥哥白话笔记-JDBC(API详解)前一章里我们让大家对JDBC的api有了一些了解,今天我们就聊一聊如何使用JDBC。

首先我们就聊一聊JDBC的注入问题:SQL注入问题假设有登录案例SQL语句如下:SELECT * FROM 用户表WHERE NAME = 用户输入的用户名AND PASSWORD = 用户输的密码;此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录。

但是当用户输入的账号为XXX 密码为:XXX’OR ‘a’=’a时,则真正执行的代码变为:SELECT * FROM 用户表WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’OR ’a’=’a’;此时,上述查询语句时永远可以查询出结果的。

那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。

为此,我们使用PreparedStatement来解决对应的问题。

那么PreparedStatement是一个什么类呢,它起到了什么作用,下面给大家详细的聊一聊它是什么,他有什么作用:使用PreparedStatement预处理对象时,建议每条sql语句所有的实际参数,都使用逗号分隔。

String sql = "insert into sort(sid,sname) values(?,?)";;PreparedStatement预处理对象代码:PreparedStatementpsmt = conn.prepareStatement(sql)常用方法:1.执行SQL语句:●intexecuteUpdate(); --执行insert update delete语句.●ResultSetexecuteQuery(); --执行select语句.●boolean execute(); --执行select返回true 执行其他的语句返回false.2.设置实际参数●void setXxx(int index, Xxx xx) 将指定参数设置为给定Java的xx值。

jdbc的名词解释

jdbc的名词解释

jdbc的名词解释在现代的软件开发中,Java Database Connectivity(JDBC)是一项十分重要的技术。

JDBC是Java平台上用于访问数据库的一套API,它提供了一种与各种数据库交互的标准方式。

通过JDBC,开发人员可以方便地连接到数据库、执行SQL语句以及处理查询结果。

1. JDBC驱动程序JDBC驱动程序是连接Java程序与数据库之间的桥梁。

它负责与数据库进行通信,并将Java代码转换成数据库可以理解的请求。

不同的数据库供应商会提供相应的JDBC驱动程序,以便与特定数据库进行通信。

开发人员需要根据要访问的数据库类型选择相应的驱动程序。

2. 连接(Connection)JDBC中的Connection是一个与数据库之间的物理连接。

通过Connection对象,可以与数据库建立连接、执行SQL语句、提交或回滚事务等操作。

在使用JDBC之前,开发人员需要先通过DriverManager获取一个Connection对象。

获取Connection时,需要提供数据库的URL、用户名和密码等信息。

3. 语句(Statement)JDBC中的Statement用于执行SQL语句。

通过Statement对象,可以向数据库发送SQL语句的请求,并获取执行结果。

Statement提供了多种方法,用于执行不同类型的SQL语句,如查询(executeQuery)、插入(executeUpdate)等。

在执行SQL语句之前,需要先通过Connection对象创建一个Statement对象。

4. 结果集(ResultSet)ResultSet是JDBC用于获取查询结果的对象。

当执行一个查询语句后,如果有查询结果返回,在执行结果集方法后可以获取到查询结果的数据。

ResultSet提供了诸如getXXX()方法来获取特定字段的值,以及移动游标等操作。

通过ResultSet,可以方便地处理查询结果并将数据展示给用户。

黑马程序员JavaEE就业笔记串讲---JDBC

黑马程序员JavaEE就业笔记串讲---JDBC

黑马程序员JavaEE就业笔记串讲---JDBC 【JDBC的概述】JDBC:Java DataBase Connectivity Java数据库的连接.* 是SUN公司统一提供的一套接口规范(JDBC).各个数据库生产商提供实现. 驱动:两个硬件设备之间通信的桥梁.【JDBC的开发步骤】注册驱动:获得连接:获得执行SQL语句对象:释放资源:JDBC的API:【Connection】创建执行SQL的对象:进行事务管理:【Statement】执行SQL语句:执行批处理:【ResultSet】获得结果集中的数据:* getXXX(int idx);* select cname,cid from category;* getXXX(String name);默认情况下:next();* 正常的情况下结果集只能向下的.【自定义连接池】(了解)* SUN公司提供了一个连接池的接口.(javax.sql.DataSource).* 定义一个连接池:实现这个接口.* 使用List集合存放多个连接的对象.【自定义连接池的代码】public class MyDataSource implements DataSource{// 创建一个List集合用于存放多个连接对象.private List<Connection> list = new ArrayList<Connection>();// 在程序开始的时候,初始化几个连接,将连接存放到list中.public MyDataSource() {// 初始化3个连接:for(int i=1;i<=3;i++){Connection conn = JDBCUtils.getConnection();list.add(conn);}}@Override// 获得连接的方法:public Connection getConnection() throws SQLException { if(list.size() <= 0){for(int i=1;i<=3;i++){Connection conn = JDBCUtils.getConnection();list.add(conn);}}Connection conn = list.remove(0);return conn;}// 归还连接的方法:public void addBack(Connection conn){list.add(conn);}...}【自定义连接池中问题及如何解决】问题?1.如果使用自定义连接池,那么需要额外记住自定义连接池中的API.2.能不能使用面向接口的编程方式.解决:不额外提供API方法,就可以解决上述两个问题!!!能不能还调用Connection的close方法.能不能增强Connection的close方法,原有的销毁变为归还!!!如何增强Connection的close方法:* 增强一个Java类中的某个方法有几种方式???* 一种方式:继承的方式.* 能够控制这个类的构造的时候,才可以使用继承.* 二种方式:装饰者模式方式.* 包装对象和被包装的对象都要实现相同的接口.* 包装的对象中需要获得到被包装对象的引用.***** 缺点:如果接口的方法比较多,增强其中的某个方法.其他的功能的方法需要原有调用.* 三种方式:动态代理的方式.* 被增强的对象实现接口就可以.【继承和装饰者的案例】/*** 继承的方式增强一个类中某个方法:*/class Man{public void run(){System.out.println("跑....");}}class SuperMan extends Man{public void run(){// super.run();System.out.println("飞....");}}/*** 使用装饰者的方式完成类的方法的增强*/interface Waiter{public void server();}class Waiteress implements Waiter{@Overridepublic void server() {System.out.println("服务...");}}class WaiteressWrapper implements Waiter{ private Waiter waiter;public WaiteressWrapper(Waiter waiter) { this.waiter = waiter;}@Overridepublic void server() {System.out.println("微笑...");// this.waiter.server();}}【使用装饰者模式增强Connection的close方法】public class MyConnection implements Connection{private Connection conn;private List<Connection> list;public MyConnection(Connection conn,List<Connection> list) { this.conn = conn;this.list = list;}@Overridepublic void close() throws SQLException {list.add(conn);}...}连接池的getConnection方法:@Override// 获得连接的方法:public Connection getConnection() throws SQLException {if(list.size() <= 0){for(int i=1;i<=3;i++){Connection conn = JDBCUtils.getConnection();list.add(conn);}}Connection conn = list.remove(0);MyConnection myConn = new MyConnection(conn, list);return myConn;}【常见的开源的数据库连接池】:DBCP:DBCP(DataBase connection pool),数据库连接池。

黑马程序员小鲁哥哥白话笔记-内部类

黑马程序员小鲁哥哥白话笔记-内部类

小鲁哥哥白话笔记-内部类大家学完Static关键字后,马上又进入了另一项挑战,就是内部类。

What??类里面还能定义类,这不是多此一举吗?很多同学第一次听到这个名词后都有这个反应,且听小鲁哥哥慢慢道来,听完后会让你有一种“原来这就是内部类啊”,没有啥啊。

何为内部类:将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。

这是官方说法,其实就是“大房子里边套了个小单间,房间虽少但是五脏俱全”。

举个栗子:publicclass大房子{//大房子的代码class小房子{//小房子的代码}}内部类有几个分支:成员内部类,局部内部类,匿名内部类。

通过和学生的了解,大家对成员内部类和局部内部类都没有问题,就是遇到匿名内部类就难住了,不知道怎么理解,也没有头绪。

成员内部类和局部内部类就简单举个例子,重点讲一讲匿名内部类。

成员内部类:publicclass InnerDemo {publicstaticvoid main(String[] args) {//Outer o = new Outer();//o.method();Outer.Inner i = new Outer().new Inner();i.function();}}class Outer {privateint num = 10;publicvoid method() {Inner i = new Inner();i.function();}class Inner {publicvoid function() {System.out.println(num);}}}局部内部类:package com.itheima_02;/** 局部内部类* 在方法内,出了方法之后就无法使用***/publicclass InnerDemo3 {publicstaticvoid main(String[] args) {Outer o = new Outer();o.method();}}class Outer {publicvoid method() {int num = 10;class Inner {publicvoid function() {System.out.println("function");}}Inner i = new Inner();i.function();}publicvoid test() {//Inner i = new Inner();//System.out.println(num);}}好了,重点讲一下匿名内部类,这个同学学完了,脑子里第一反应就是,这怎么用??先给大家看一看匿名内部类的例子:new 父类或接口(){//进行方法重写};//已经存在的父类:public abstract class Person{public abstract void eat();}//定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量Person p = new Person(){public void eat() {System.out.println(“我吃了”);}};//调用eat方法p.eat();其实很简单,匿名内部类一般应用于接口,为了不再写一个类去实现这个接口,直接在类里去通过new 接口+实体模块的方式去实现这个接口。

第1关:jdbc基础知识

第1关:jdbc基础知识

JDBC基础知识JDBC(Java Database Connectivity)是Java语言访问数据库的标准API。

它提供了一组用于在Java应用程序和数据库之间进行连接、执行SQL语句和处理结果的类和接口。

以下是一些JDBC的基础知识:1. 数据库驱动程序(Database Driver):JDBC需要数据库供应商提供的数据库驱动程序来连接到具体的数据库。

驱动程序实现了JDBC接口,使得Java应用程序可以与数据库进行通信。

2. 连接数据库:使用JDBC连接数据库需要提供数据库的连接URL、用户名和密码。

通过调用`DriverManager.getConnection()`方法,可以获得与数据库的连接。

3. 执行SQL语句:JDBC提供了`Statement`和`PreparedStatement`两个接口来执行SQL语句。

`Statement`用于执行静态的SQL语句,而`PreparedStatement`用于执行动态的SQL语句,可以通过参数化的方式传递参数。

4. 处理查询结果:执行SQL查询语句后,可以使用`ResultSet`对象来处理查询结果。

`ResultSet`提供了访问查询结果集的方法,可以按行遍历结果、获取特定列的值等。

5. 事务管理:JDBC支持事务处理,可以通过设置连接的自动提交模式或手动控制事务提交和回滚。

使用`Connection`对象的`commit()`和`rollback()`方法可以控制事务的提交和回滚。

6. 资源释放:在使用完数据库连接、语句和结果集等资源后,需要手动关闭它们,以释放资源。

通过调用相应对象的`close()`方法来关闭连接、语句和结果集。

7. 异常处理:JDBC操作可能会出现异常情况,如数据库连接失败、SQL语句错误等。

应该使用异常处理机制(try-catch语句块)来捕获和处理异常,以确保程序的稳定性和可靠性。

这些是JDBC的基础知识,使用JDBC可以实现Java应用程序与数据库的交互。

JDBC课堂笔记

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(教材培训笔记)

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所使用的网络协议。

黑马程序员小鲁哥哥白话笔记-接口

黑马程序员小鲁哥哥白话笔记-接口

小鲁哥哥白话笔记-接口大家前边学习了抽象类和抽象方法,知道了abstract这个关键字的用处,我们在了解和掌握接口之前我们先回顾一下抽象类和抽象方法。

我们从字面意思就能了解到,抽象方法肯定是抽象的,那怎么去理解抽象这个概念,一个方法的最关键的是什么,就是方法(函数)里边的逻辑代码,我们把代码去掉,只保留方法名,这样我们就不知道这个方法具体是做什么的了,这也就是抽象方法的来源。

如果一个类中有抽象方法,那这个类必须为抽象类。

下面举个栗子://如果类中有抽象方法,类也必须为抽象类,在类的前边添加abstract关键字abstractclass Instrument{privateint i; //定义一个变量publicabstractvoid play(int n);//这是一个抽象方法,public String what(){return"Instrument";}publicabstractvoid adjust();//这是一个抽象方法}我们复习了抽象类和抽象接口,下面我们来了解接口。

其实接口我们可以把它理解为更深层次的抽象类,因为抽象类还有具体的实现方法(函数),但是接口中的方法(函数)都是抽象的,没有具体的实现代码块(jdk1.8版本添加了接口可以添加非抽象方法,我就不做延伸了,我们可以把接口中都是抽象函数这个定义适用于jdk1.7及以下版本)。

接口:Interface这个关键字产生了一个完全抽象的类,它根本没有提供任何具体方式,它允许创建者确定方法名,参数列表和返回类型,但是没有任何方法体。

也就是说接口只提供了形式,而为提供任何具体的实现。

那我们如何创建一个接口呢,我们就要用到Interface这个关键字了,我们需要用Interface关键字来代替class关键字。

我们给一个例子://用关键字interface代替class关键字,而且接口中不能有带方法体的方法interface Instrument{void play(int a);//定义一个带参数的方法String adjust();//定义一个带返回值的方法void eat();//一般的方法}大家应该看到了,我的接口里边的方法没有被声明是public还是private,因为只要是接口里边的方法,默认都是public的。

黑马程序员小鲁哥哥白话笔记-JDBC(一)

黑马程序员小鲁哥哥白话笔记-JDBC(一)

小鲁哥哥白话笔记-JDBC(API详解)前边我们讲过SQL的一些基本操作,大家都是通过图形化工具对数据本身进行操作,今天我们讲一讲如何通过java代码去操作数据库,java中定义了一种规范,叫做JDBC.JDBC:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL 语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

是Java访问数据库的标准规范JDBC的使用是有标准的步骤的,大家根据固定的模式去写自己的JDBC代码就可以。

JDBC一共6个步骤:1.注册驱动.2.获得连接.3.获得语句执行平台4.执行sql语句5.处理结果6.释放资源.下边给大家聊一聊JDBC里API的使用:一、注册驱动:代码:Class.forName("com.mysql.jdbc.Driver");JDBC规范定义驱动接口:java.sql.Driver,MySql驱动包提供了实现类:com.mysql.jdbc.DriverDriverManager工具类,提供注册驱动的方法registerDriver(),方法的参数是java.sql.Driver,所以我们可以通过如下语句进行注册:DriverManager.registerDriver(new com.mysql.jdbc.Driver());以上代码不推荐使用,存在两方面不足1.硬编码,后期不易于程序扩展和维护2.驱动被注册两次。

通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。

如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。

通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册public class Driver extends NonRegisteringDriver implements java.sql.Driver { static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}……}二、获得链接代码:Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb”,”root”,”root”);获取连接需要方法DriverManager.getConnection(url,username,password),三个参数分别表示,url需要连接数据库的位置(网址)user用户名password 密码url比较复杂,下面是mysql的url:jdbc:mysql://localhost:3306/mydbJDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。

黑马程序员:javaweb基础阶段笔记之第十四章WEB14-JDBC案例篇

黑马程序员:javaweb基础阶段笔记之第十四章WEB14-JDBC案例篇

黑马程序员:javaweb基础阶段笔记之第十四章WEB14-JDBC案例篇今日任务使用JDBC技术完成对商品的添加修改查询及分页的操作教学导航1.1上次课内容回顾:JSP的模式:* JSP的设计模式:* JSP的模式一:JSP + JavaBean设计模式:* JSP的模式二:JSP + Servlet + JavaBean设计模式:MVC设计模式.* M:Model* V:View* C:Controller* MVC和EE开发三层结构的关系:* 反射:(*****)* 获得类的字节码对象:Class对象.三种获得的方式.* 类名.class;* 类的实例.getClass();* Class.forName();* 获得构造器:Constructor* 获得属性:Field* 获得方法:MethodJDBC的事务管理:* 事务的概念:指的是逻辑上的一组操作,要么一起成功,要么一起失败.* 事务的特性:* 原子性:事务的不可分割* 一致性:事务执行的前后,数据完整性保持一致.* 隔离性:一个事务的执行不应该受到另一个事务的干扰* 持久性:事务一旦结束,将会永久修改到数据库.* 如果不考虑隔离性:* 脏读:一个事务读到另一个未提交的数据.* 不可重复读:一个事务读到另一个事务已经提交的update的数据,导致多次的查询结果不一致.* 虚读:一个事务读到另一个事务已经提交的insert的数据,导致多次的查询结果不一致.* 解决读问题:* 未提交读:以上情况都能发生.* 已提交读:解决脏读,但是不可重复读和虚读有可能发生* 重复读:解决脏读和不可重复读,但是虚读有可能发生.* 串行化:可以解决以上的所有情况.* JDBC进行事务的管理:* Connection:* setAutoCommit(boolean flag);* commit();* rollback();* DBUtils进行的事务的管理:1.2完成对商品的CRUD的操作,进行条件查询,分页查询.1.2.1需求:购物的网站中需要显示商品的信息,在商品信息的显示中,如果商品的信息比较多.需要将比较多的商品进行分页的显示.进行条件查询.同时对商品进行修改,插入,删除.1.2.2分析:1.2.2.1技术分析:使用MVC设计模式JSP + Servlet + JavaBean + JDBC实现商品信息的CRUD的操作.1.2.2.2步骤分析:【步骤一】:创建数据库和表* create database web_14;* use web_14;* create table `product` (`pid` varchar (96),`pname` varchar (150),`market_price` double ,`shop_price` double ,`pimage` varchar (600),`pdate` date ,`is_hot` double ,`pdesc` varchar (765),`pflag` double ,`cid` varchar (96));【步骤二】:创建工程导入jar包.* msysql驱动* c3p0的包* dbutils的包* beanUtils的包:两个.* JSTL的包:两个【步骤三】:创建包结构.【步骤四】:创建一个首页:<h1>欢迎来到商品信息管理平台</h1><h3><a href="${ pageContext.request.contextPath }/ProductFindAllServlet">查询所有商品</a></h3>1.2.3代码实现:1.2.3.1商品的查询的功能:在首页上点击【查询所有商品】链接:提交到Servlet中:* 调用业务层-->调用DAO:* 将商品列表保存到request域中:* 转发到商品列表页面:在商品列表的页面中显示商品:1.2.3.2商品的添加的功能:在首页点击【添加】链接:跳转到添加页面.在添加页面中输入信息:点击【提交】提交到Servlet在Servlet中:* 接收数据:* 封装数据:* 调用业务层:* 页面跳转* 重复提交的问题:* 添加完商品之后,转发到一个页面,刷新该页面.* 网速很慢,点击提交的按钮,其实已经在提交了但是网速慢,不停的点击提交.* 解决重复提交的根本解决办法:令牌机制(一次性).* 生成随机的令牌保存在session中.* 在表单的提交的时候,将随机的令牌放入到表单的隐藏字段中.* 在Servlet中获得session中和表单中的令牌是否一致.* 如果一致执行插入操作,不一致跳转到其他页面.将令牌销毁.* 代码实现:// 判断是否是重复提交:String token1 = (String)request.getSession().getAttribute("token");String token2 = request.getParameter("token");// 清空session中的令牌:request.getSession().removeAttribute("token");if(!token2.equals(token1)){request.setAttribute("msg", "亲!您已经提交过!请不要重复提交了!");request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);return;}1.2.3.3商品的信息的修改:在列表页面上点击【修改】链接:提交到Servlet:根据id查询该商品.将商品的信息显示到修改页面:在修改的页面上修改数据,点击【提交】按钮:提交到Servlet:完成商品信息的修改:1.2.3.4商品的信息的删除:在列表页面上点击【删除】链接:提交到Servlet:调用业务层完成删除的操作:***** 扩展删除多条记录:1.2.3.5商品模糊查询:1.2.3.6商品分页显示:分页条: 【首页】【上一页】[1][2][3][4]【下一页】【尾页】分页功能的实现:* 物理分页:一次只查10条记录,点击下一页,再去查询后10条.使用SQL语句进行控制的分页.* 缺点:经常需要和数据库交互.* 优点:数据量特别大,不会导致内存的溢出.* 逻辑分页:一次性将所有数据全都查询出来,根据需要进行截取.List集合进行控制. subList();* 缺点:数据量如果特别大,容易导致内存溢出.* 优点:与数据库交互次数少.* 不同的数据库对分页的语句也是不一样的:* MYSQL进行分页: 使用limit关键字.* select * from xxx where .. Group by ... Having ... Order by ... limit a,b; -- a:从哪开始b:查询的记录数.* 根据页数计算limit后面的两个参数:* currPage begin pageSize1 0 102 10 103 20 10* begin = (currPage - 1) * pageSize;* 参数的传递:* 前台--->后台:currPage* 后台--->前台:currPage,totalPage(总页数),totalCount(总记录数),pageSize,List集合.* 使用JavaBean封装参数:* 后台--->前台:传递一个JavaBean就可以.* Oracle进行分页: 使用SQL语句嵌套.* SQL Server数据库进行分页: 使用top 关键字.* 在首页上添加一个分页查询的链接:。

JDBC学习流程笔记

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概念

jdbc概念JDBC(Java Database Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,它允许Java程序与关系数据库进行交互。

JDBC是一种前端-后端技术,它让程序员可以使用 Java 编写数据库操作代码,而无需关心底层的数据库实现。

JDBC的主要特点如下:1.可跨平台:JDBC是与各种类型的数据库运行的平台无关的,它可以跨不同的操作系统和不同数据库之间进行数据传输。

2.易于使用:它提供了简单的接口,可以更容易地编写代码,实现数据库的高效率的访问。

3.支持SQL:JDBC完全支持SQL标准,可以处理实际的SQL语句,使Java应用程序可以很容易地创建、更新和查询数据库。

4.高性能:JDBC可以满足大多数开发环境的高效使用要求,并能在实时应用程序中提供更高的可用性。

5.具有标准接口:JDBC定义了一个标准的接口,使不同的应用程序可以使用同一接口与任何数据源进行交互。

6.灵活性:JDBC支持各种传输协议,比如TCP/IP和HTTP等,使应用程序能够同时访问本地和远程的数据库。

JDBC框架由四个层次组成:1.应用程序层:应用程序是JDBC规范的客户端,可以使用JDBC编写Java开发程序,根据不同的数据库执行SQL语句。

2.API(应用编程接口)层:API层是JDBC上层层的中介层,它将应用程序的JDBC函数调用转换成JDBC驱动程序的函数调用。

3.JDBC 驱动层:JDBC驱动程序层是由各个数据库厂商发行的单独的库,其它层调用该层的函数,将JDBC请求发送给真正的数据库服务器。

4.Network层:Network层是JDBC的最底层,它负责将JDBC驱动程序的请求发送给目标数据库服务器,并将得到的数据返回给JDBC客户端。

JDBC学习笔记

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的设计者希望使用相同的方式访问不同的数据库。

【黑马程序员】JavaWeb之核心技术--JDBC高级事务管理

【黑马程序员】JavaWeb之核心技术--JDBC高级事务管理

【黑马程序员】JavaEE就业班同步笔记第一阶段:JavaWeb之核心技术--JDBC高级事务管理1 使用MVC设计模式完成转账的案例:1.1 需求:设计一个页面,输入三个值,一个是付款人,一个是收款人,一个是转账的金额.不能出现付款人的钱被扣除而收款人没有收到钱的情况发生.而且要使用MVC的设计模式.1.2 分析:1.2.1 JSP的开发模式:【动态网页开发模式的发展】【JSP的开发模式一】:了解JSP + JavaBean* 演示模式一的过程:* 在模式一开发中提供了一些JSP的标签:< jsp:useBean> ,<jsp:setProperty >,<jsp:getProperty> * 使用模式一进行简单的测试:[AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16<%// 接收数据:/* String username = request.getParameter("username");String password = request.getParameter("password");// 封装数据:User user = new User();user.setUsername(username);user.setPassword(password); */%><jsp:useBean id="user" class="er"scope="page"></jsp:useBean><%-- <jsp:setProperty property="username" name="user"/><jsp:setProperty property="password" name="user"/> --%><jsp:setProperty property="*" name="user"/><!-- 表单的元素的name属性的值与User中的属性名称一致就可以自动封装--><jsp:getProperty property="username" name="user"/>【JSP的开发模式二】:掌握JSP + Servlet + JavaBean 称为MVC的设计模式. MVC:M:Model:模型层V:View:视图层C:Controller:控制层【Java中的反射技术】(掌握)【Java中的内省技术】(了解)∙内省:用来获得JavaBean的属性及属性的get或set方法. JavaBean:就是一个满足了特定格式的Java类:* 需要提供无参数的构造方法:* 属性私有* 对私有的属性提供public的get/set方法.∙内省的代码:[AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07 08 09 10 11 12 13public void demo1() throws Exception{// 获得了Bean的信息BeanInfo beanInfo = Introspector.getBeanInfo (User.class);// 获得Bean的属性描述了PropertyDescriptor[] pds =beanInfo.getPropertyDescriptors();for(PropertyDescriptor pd:pds){System.out.println(pd.getName());/*pd.getReadMethod(); // 获得get方法pd.getWriteMethod();// 获得set方法.*/ }}使用内省封装一个MyBeanUtils: [AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07 08 09public class MyBeanUtils {public static void populate(Object obj,Map<String,String[]> map) throws Exception{// 获得类的所有的属性的名称:BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());// 获得类中所有的属性:PropertyDescriptor[] pds =beanInfo.getPropertyDescriptors();10 11 12 13 14 15 16 17 18 19for (PropertyDescriptor pd : pds) {if(map.containsKey(pd.getName())){Method method = pd.getWriteMethod();// 执行set方法:method.invoke(obj, map.get(pd.getName ())[0]);}}}}【事务的概述】∙什么是事务:* 事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么一起成功,要么一起失败.∙MYSQL的事务的管理:(了解)* 创建一个账号的表:[AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07 08 09 10create database web_13;use web_13;create table account(id int primary key auto_increment,name varchar(20),money double);insert into account values (null,'张森',10000); insert into account values (null,'凤姐',10000); insert into account values (null,'如花',10000);***** MYSQL的事务管理有两种方式:(MYSQL数据库事务默认是自动提交的.Oracle数据库事务默认是不自动提交.)1.手动开启事务* start transaction; -- 开启事务* 多条sql;* commit/rollback;2.设置一个自动提交参数* show variables like '%commit%'; -- 查看与commit相关参数. * set autocommit = 0; -- 将autocommit参数设置为OFF.【JDBC中的事务管理】(掌握)JDBC的事务的管理的API:[AppleScript] 纯文本查看复制代码?1 2 3setAutoCommit(Boolean autoCommit) commit()rollback()1.2.2 步骤分析:【步骤一】:创建一个页面:【步骤二】:导入JDBC相关的jar包和工具类. 【步骤三】:创建包结构.【步骤四】:提交到Servlet-->Service-->DAO 【步骤五】:页面跳转:1.3 代码实现:1.3.1 准备工作:1.3.2 代码实现:1.3.3 DBUtils实现事务管理:∙没有事务管理:QueryRunner(DataSource ds)Query(String sql,ResultSetHandler<T> rsh,Object... params) Update(String sql,Object... params)∙有事务管理:QueryRunner()Query(Connection conn,String sql,ResultSetHandler<T> rsh,Object... params)Update(Connection conn,String sql,ResultSetHandler<T> rsh,Object params)1.4 总结:1.4.1 事务特性:∙原子性:强调事务的不可分割.∙一致性:强调的是事务的执行的前后,数据的完整性要保持一致.∙隔离性:一个事务的执行不应该受到其他事务的干扰.∙持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库.1.4.2 如果不考虑事务的隔离性,引发一些安全性问题:∙一类读问题:* 脏读 :一个事务读到另一个事务还没有提交的数据.* 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在当前的事务中多次查询结果不一致.* 虚读/幻读:一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致.∙一类写问题:* 引发两类丢失更新:1.4.3 解决引发的读问题:设置事务的隔离级别:* read uncommitted :未提交读.脏读,不可重复读,虚读都可能发生.* read committed :已提交读.避免脏读.但是不可重复读和虚读有可能发生.* repeatable read :可重复读.避免脏读,不可重复读.但是虚读有可能发生.* serializable :串行化的.避免脏读,不可重复读,虚读的发生.***** MYSQL隔离级别:repeatable read Oracle隔离级别:read committed 1.4.4 演示脏读的发生:∙分别开启两个窗口:A,B∙分别查看两个窗口的隔离级别:select @@tx_isolation;∙设置A窗口的隔离级别为:read uncommitted:* set session transaction isolation level read uncommitted;∙分别在两个窗口中开启事务:* start transaction;∙在B窗口完成转账的操作:* update account set money = money - 1000 where name = '张森';* update account set money = money + 1000 where name = '凤姐';∙在A窗口查询数据:(钱已经到账---脏读)* select * from account; -- A事务读到了B事务还没有提交的数据.1.4.5 演示避免脏读,不可重复读发生∙分别开启两个窗口:A,B∙分别查看两个窗口的隔离级别:select @@tx_isolation;∙设置A窗口的隔离级别为:read committed:* set session transaction isolation level read committed;∙分别在两个窗口中开启事务:* start transaction;∙在B窗口完成转账的操作:* update account set money = money - 1000 where name = '张森';* update account set money = money + 1000 where name = '凤姐';∙在A窗口中进行查询:* select * from account; -- 避免脏读.∙在B窗口提交事务:* commit;∙在A窗口中再次查询:* select * from account; -- 转账成功.(不可重复读:一个事务读到另一个事务中已经提交的update的数据,导致多次查询结果不一致.)1.4.6 演示避免不可重复读:∙分别开启两个窗口:A,B∙分别查看两个窗口的隔离级别:select @@tx_isolation;∙设置A窗口的隔离级别为:repeatable read:* set session transaction isolation level repeatable read;∙分别在两个窗口中开启事务:* start transaction;∙在B窗口完成转账的操作:* update account set money = money - 1000 where name = '张森'; * update account set money = money + 1000 where name = '凤姐';∙在A窗口查询:* select * from account; -- 转账没有成功:避免脏读.∙在B窗口提交事务:* commit;∙在A窗口中再次查询:* select * from account; -- 转账没有成功:避免不可重复读.1.4.7 演示避免虚读的发生:∙分别开启两个窗口:A,B∙分别查看两个窗口的隔离级别:select @@tx_isolation;黑马程序员合肥中心编著∙设置A窗口的隔离级别为:serializable:* set session transaction isolation level serializable;∙在A,B两个窗口中分别开启事务:* start transaction;∙在B窗口中完成一个insert操作:* insert into account values (null,'王老师',10000);∙在A创建中进行查询的操作:* select * from account; -- 没有查询到任何结果.∙在B窗口提交事务:* commit; -- A窗口马上就会显示数据.。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

小鲁哥哥白话笔记-JDBC(API详解)
前边我们讲过SQL的一些基本操作,大家都是通过图形化工具对数据本身进行操作,今天我们讲一讲如何通过java代码去操作数据库,java中定义了一种规范,叫做JDBC.
JDBC:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL 语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

是Java访问数据库的标准规范
JDBC的使用是有标准的步骤的,大家根据固定的模式去写自己的JDBC代码就可以。

JDBC一共6个步骤:
1.注册驱动.
2.获得连接.
3.获得语句执行平台
4.执行sql语句
5.处理结果
6.释放资源.
下边给大家聊一聊JDBC里API的使用:
一、注册驱动:
代码:Class.forName("com.mysql.jdbc.Driver");
JDBC规范定义驱动接口:java.sql.Driver,MySql驱动包提供了实现类:com.mysql.jdbc.Driver
DriverManager工具类,提供注册驱动的方法registerDriver(),方法的参数是java.sql.Driver,所以我们可以通过如下语句进行注册:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
以上代码不推荐使用,存在两方面不足
1.硬编码,后期不易于程序扩展和维护
2.驱动被注册两次。

通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。

如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。

通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册public class Driver extends NonRegisteringDriver implements java.sql.Driver { static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
……
}
二、获得链接
代码:Connection con = DriverManager.getConnection
(“jdbc:mysql://localhost:3306/mydb”,”root”,”root”);
获取连接需要方法DriverManager.getConnection(url,username,password),三个参数分别表示,url需要连接数据库的位置(网址)user用户名password 密码url比较复杂,下面是mysql的url:
jdbc:mysql://localhost:3306/mydb
JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。

第一部分是jdbc,这是固定的;
第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;
第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE 名称(mydb)组成。

三、获得语句执行平台
String sql = "某SQL语句";
获取Statement语句执行平台:Statement stmt = con.createStatement();
常用方法:
intexecuteUpdate(String sql); --执行insert update delete语句. ResultSetexecuteQuery(String sql); --执行select语句.
boolean execute(String sql); --执行select返回true 执行其他的语句返回false.
四、处理结果集:
ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet 提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据:rs.next();//指向第一行
rs.getInt(1);//获取第一行第一列的数据
常用方法:
Object getObject(int index) / Object getObject(String name) 获得任意对象
String getString(int index) / Object getObject(String name) 获得字符串
intgetInt(int index) / Object getObject(String name) 获得整形
double getDouble(int index) / Object getObject(String name) 获得双精度浮点型五、释放资源:
与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。

rs.close();
stmt.close();
con.close();
今天先给大家介绍一下什么是JDBC以及JDBC相关的API的使用,下一次我们详细讲一讲如何使用JDBC。

相关文档
最新文档