学java不能不能先学java再学数据库有用吗

待会苹果要开发布会
我写完这篇文章就准备去看发布会了,因为我买了好几包瓜子和啤酒。由于苹果的保密做的越来越差劲,该曝光的信息差不多全部曝光了,我们这种熬夜看发布会的只不过是让这些信息更加真实,或者说是一种习惯了吧,因为每次苹果和锤子的发布会都必不可少的守着电脑看。
你要问我最期待什么新产品?可能是新款的 MacBook Pro 吧。因为新款 iPhone 从曝光信息看摄像头依然凸起、白带也是存在、ID 设计依然如此,哎、苹果在走下坡路了;由于我的笔记本是大学时期买的,到现在已经完美服役四五年了,虽然还是快的飞起,但是我就想换个新的。也不知道发了工资能不能买得起。伤感...
特么的,看完后,发现并没有新款的 MacBook Pro ...
废话不多说,直接上配置
一、新建jdbc.properties配置文件
master.jdbc.driverClassName=com.mysql.jdbc.Driver
master.jdbc.url=jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=UTF-8
master.jdbc.username=root
master.jdbc.password=123456
slave.jdbc.driverClassName=com.mysql.jdbc.Driver
slave.jdbc.url=jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=UTF-8
slave.jdbc.username=read
slave.jdbc.password=123456
配置文件的作用大家都清楚了,是因为我们可以在applicationContext.xml文件中以${master.jdbc.url}的形式读取内容,配置文件一般在/src/目录下。
二、配置applicationContext.xml
&!-- 将多个配置文件读取到容器中,交给Spring管理 --&
&bean id=&propertyConfigurer&
class=&org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&&
&property name=&locations&&
&value&classpath:global.properties&/value&
&value&classpath:jdbc.properties&/value&
&/property&
&!--master 配置数据源 --&
&bean id=&masterDataSource& class=&com.alibaba.druid.pool.DruidDataSource&
init-method=&init& destroy-method=&close&&
&property name=&driverClassName&&
&value&${master.jdbc.driverClassName}&/value&
&/property&
&property name=&url&&
&value&${master.jdbc.url}&/value&
&/property&
&property name=&username&&
&value&${master.jdbc.username}&/value&
&/property&
&property name=&password&&
&value&${master.jdbc.password}&/value&
&/property&
&!--slave 配置数据源 --&
&bean id=&slaveDataSource& class=&com.alibaba.druid.pool.DruidDataSource&
init-method=&init& destroy-method=&close&&
&property name=&driverClassName&&
&value&${slave.jdbc.driverClassName}&/value&
&/property&
&property name=&url&&
&value&${slave.jdbc.url}&/value&
&/property&
&property name=&username&&
&value&${slave.jdbc.username}&/value&
&/property&
&property name=&password&&
&value&${slave.jdbc.password}&/value&
&/property&
&bean id=&dataSource& class=&cn.mayongfa.service.imp.DynamicDataSource&&
&property name=&targetDataSources&&
&entry key=&slave& value-ref=&slaveDataSource& /&
&/property&
&property name=&defaultTargetDataSource& ref=&masterDataSource& /&
&!-- 配置Jdbc模板 --&
&bean id=&jdbcTemplate& class=&org.springframework.jdbc.core.JdbcTemplate&&
&property name=&dataSource& ref=&dataSource&&&/property&
&!-- 配置事务管理器 --&
&bean id=&transactionManager&
class=&org.springframework.jdbc.datasource.DataSourceTransactionManager&
p:dataSource-ref=&dataSource& /&
&!-- 数据源切换类 --&
&bean id=&dataSourceChoose& class=&cn.mayongfa.interceptor.DataSourceChoose& /&
&!-- 通过AOP配置提供事务增强,让service包下所有Bean的所有方法拥有事务 --&
上面配置我省略了 druid 数据连接池的一些配置和 service 层事务处理,文件并不完整,具体文件示例见GitHub:
如何使用阿?
我直接贴一个具体的 Service 层代码你就完全懂了。
public interface UserBasisService {
* @param entity
@DataSource
public long Save(UserBasis entity);
* @param ID
@DataSource
public Boolean Delete(long ID);
* 获取信息
* @param ID
@DataSource(DataSourceType.Slave)
public UserBasis getEntity(long ID);
* 根据条件获取数据条数
@DataSource(DataSourceType.Slave)
public int getListCount(Map&String, Object& whereMap);
* 获取所有
@DataSource(DataSourceType.Slave)
public List&UserBasis& getList();
就是直接打标签的形式切换就可以了,这里需要注意的有两点,也是我们曾经踩过的坑:
1.注意事务是在何处!就是说,要在一个事务开始之前做数据源的切换。
2.不要又想写又想读!还是在一个事务内不要有读的方法又有写的方法。
到这里读写分离和主从动态切换数据源的配置以及使用就完整了。接下来思考:我们是不是有时候项目都是要一主多从、多主多从?
一主多从、多主多从
一主多从的架构很多人都在使用,美其名是减小读数据的压力,我还是保留的看法,可能数据安全是最大的作用,再有就是你有数据报表和数据统计系统,使用一主多从架构可以避免生产服务器的访问压力过大。
配置一主多从架构其实根据我们上面的设计就很简单了,只需要在applicationContext.xml文件中配置多个从库数据源就可以,然后当你读取从库时,可根据你现有的从库数来进行一些负载均衡算法的切换,我这里就不再演示了。
多主多从是什么鬼?首先我需要说明的是多主多从这里并不是指的同一个业务数据库,是指不同的业务数据库,就是大家所说的「分库分表」中的分库,就是说我们一个项目中分出了不同的业务数据库,然后这些不同的数据库也可以有多个从库,可不是一个业务数据库有多个主库、多个从库,据我所知, MySql 的复制也是不建议这么做的。
了解清楚概念后,我们目标就清晰了,其实根据我们的数据源切换架构,再接着配置多个数据源就可以了。其实也是这么简单的意思,比如:项目中有个金币系统,用户完成我们期望的操作就会给他相应的金币,他可以用金币兑换我们商城里的物品。这时候,其实我们就应该有个金币库了,不要再去和业务共用一个数据库,所以,这时候就会用到我们「多主多从」的架构了。
写到这里,我看了以前开篇的 文章目录中没有具体的案例,其实示例代码都可以访问我的 Github 看到 ,我就不在写什么 API 调用什么的了。
阅读(...) 评论()适用于Java初学者的学习路线图
转载 &更新时间:日 10:17:52 & 作者:QQ
这篇文章主要介绍了学习Java的路线图的五个必经阶段,还有一些作者的想法分享给大家,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
对于Java初学者来说,想学习Java教程,需要明白,基础打好才能学得更好,Java教程之学习Java的路线图的五个必经阶段,希望能对Java学习者有所帮助。
第一个阶段-java基础阶段
  1.java语法
  2.面向对象
  3.常用的api
  4.界面编程
  5.多线程
  6.文件io
  7.java网络编程..
这是学习java开发的基础阶段,也是以后的学习基石。
第二个阶段-数据库阶段
  1.oracle
  2.mysql
  3.sql server
目前中国软件公司用的最多的三大主流数据库是sql server,mysql ,oracle .目前看来oracle数据库越来越流行了。一般情况下PHP对应MySQL数据库;ASP对应SQL数据库;JSP对应ORACLE数据库。所以大家会 经常看到市场上JAVA培训都是用的ORACLE数据库,其实你学会了ORACLE数据库,再去学习MySQL、SQL数 据库,你会觉得有很多相似的之处,学起来也容易上手了
第三个阶段-web开发阶段
  1.html
  3.java
这三个部分是进行web开发的必须技术一定要好好学习,毕竟互联网在我们的生活中无处不在。
第四个阶段-j2ee 中级部分
  1.servlet
这个阶段是接近企业的需求了,所以学习起来,难度偏大,如果前面没有学习扎实,会比较麻烦,我就是这样的,前面没有吃透,就学习j2ee 中级,搞得我消化不良。所以小弟我中心的告诫大家,把前面的学好,再学习第四个阶段,这里的mvc思想不太好理解,是学习的重点。同时要学习 tomcat/jboss/wl 这些服务器,所以你可能感到要学习的东西一下多了很多。
第五个阶段-j2ee 高级部分
  1.struts
  2.hibernate
  3.spring
学习完Servlet、JSP然后再去学习框架Struts、Hibernate、Spring等最前沿的最流行的网络编程必备的软件技能。框架的基础就是Servlet、JSP。首先大家应该学习的是Struts框架,典型的MVC模型。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具学JAVA需要先学数据库吗_百度知道
学JAVA需要先学数据库吗
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
山东新华电脑ss
山东新华电脑ss
采纳数:6937
获赞数:2364
老师手把手教从最基础开始
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。学java,该选择哪个数据库?
[问题点数:30分,结帖人hzc]
本版专家分:2074
结帖率 89.55%
CSDN今日推荐
本版专家分:2
本版专家分:291
本版专家分:1248
本版专家分:2
本版专家分:1113
本版专家分:502
本版专家分:24
本版专家分:57683
2011年12月 Java大版内专家分月排行榜第二2011年11月 Java大版内专家分月排行榜第二2010年9月 Java大版内专家分月排行榜第二
2011年10月 Java大版内专家分月排行榜第三
本版专家分:2074
本版专家分:16
本版专家分:40
本版专家分:120
本版专家分:1
本版专家分:16267
本版专家分:1
本版专家分:1
本版专家分:45
本版专家分:3
本版专家分:41
本版专家分:2
本版专家分:59
本版专家分:4
本版专家分:32
本版专家分:164
本版专家分:4310
本版专家分:59
本版专家分:2686
本版专家分:724
2014年1月 PHP大版内专家分月排行榜第二2013年12月 PHP大版内专家分月排行榜第二
2014年11月 PHP大版内专家分月排行榜第三2014年6月 PHP大版内专家分月排行榜第三2014年4月 PHP大版内专家分月排行榜第三2014年2月 PHP大版内专家分月排行榜第三2013年11月 PHP大版内专家分月排行榜第三
本版专家分:73
本版专家分:0
本版专家分:1775
本版专家分:448
本版专家分:106
本版专家分:5681
本版专家分:0
本版专家分:1
本版专家分:1
本版专家分:65
本版专家分:5
本版专家分:21
本版专家分:1
本版专家分:0
本版专家分:1
本版专家分:0
本版专家分:61
本版专家分:299
本版专家分:1809
匿名用户不能发表回复!
其他相关推荐
1999年,我刚开始参加工作。刚开始我作了一段时间的VB与asp,不久就离职,并且以java作为以后的主要方向,到2006年,我用java整整有6年了,而我也终于改用python做程序了。
回想当年,我为什么选择java呢?是一个很有意思,也很无奈的理由“钱、薪水”,因为其学习周期长,难学难用,当时的中文资料没有这么多。所以当时用java开发的待遇要远远高于用VB/ASP和PHP等的开发人员
此文仅代表个人观点
很多学员有这样的问题:我们应该学习什么语言,java、C#还是c++?好像很多公司都找会VC的人,java和C#有用吗?甚至有人说java或C#是小公司用的语言,C++是大公司用的语言。
注:下面讨论的C++不是指。net framework下的托管C++而是指非托管的C++.
首先解释一下java、C#、C++和VC的关系。
Java Web开发就该这样学 [王洋编著][电子工业出版社]
适合初学java的同学
看一下书本的官方介绍。下面是各章节介绍。链接在最后面
此书是由全国多名红帽架构师(RHCA)基于RHEL7系统共同编写的高质量Linux技术自学书籍,各章节知识点从实践出发且具有较强连贯性,极其适合Linux初学者或用作Linux相关辅助教材,专注于Linux系统与红帽认证。目前是国内最值得去读的Linux教材,也是最有价值的Linux实验手册,
章节包括有:
第0章 让我们谈谈学习方法和红
选择自己的发行版是Linux入门遇到的第一个纠结,很多人都会问用什么发型版本最好?这个问题,这一直都是个问题:
1。如果是初次接触Linux的建议就选择ubuntu的就OK了,因为使用ubuntu做入门的群体应该是占很大部分;
2。如果是之前使用过Linux,想换一个发现版本的呢?建议选择fedora或者centos。因为毕竟是公司出的,稳定度感觉比ubuntu好,作者之前就遇到再ub
开源许可证:红帽认证:(本图片来自网络,侵删)虚拟机安装红帽:
rhel镜像(官网或百度,时间不一,版本不一,可选校验)
vmware-tool 增强工具
虚拟机中选择安装/重新安装VMware Tools
root下运行
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom/
学完Java SE之后学什么好?
我觉得学习j2ee一定要循序渐进,千万不要太急了。把java基础打牢一点,再牢一点。各位,你们在后面学习什么struts,hibernate,spring,ajax..都很轻松。
第一个阶段(java基础阶段)
1.java 语法
2.面向对象
3.常用的api
4.界面编程
7.java网络编程..
转:http://jingyan.baidu.com/article/bcd.html
比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下就几个主要方面进行的比较:
一、 语言比较
PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的
浅谈 java 和 python普及常识java
优势:简单、安全、稳定、跨平台
一次编写,到处运行。
对于一个程序员而言,写出来的程序如果不需修改就能够同时在Windows、MacOS、LINUX等平台上运行,简直就是美梦成真的好事!而Java语言就让这个原本遥不可及的事离我们越来越近。使用Java语言编写的程序,只要做较少的修改,甚至有时根本不需修改就可以在不同平台上运行了,Java绝对是学习Java JDBC,看这篇就够了
JDBC ( DB Connection)---Java连接
JDBC是一种可用于执行SQL语句的JAVA API(ApplicationProgramming Interface应用程序设计接口)。它由一些Java语言编写的类和界面组成。
JDBC为数据库应用开发人员和数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯JAVA语言编写完整的数据库应用程序。
JDBC代表JAVA数据库连接。它是一个软件层,允许开发者在JAVA中编写客户端/服务器应用。
一、ODBC到JDBC的发展历程
ODBC是OpenDatabaseConnectivity的英文简写。它是一种用来在相关或不相关的数据库管理(DBMS)中存取数据的,用C语言实现的,标准应用程序数据接口。通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和接口。
1.ODBC的结构模型
ODBC的结构包括四个主要部分:应用程序接口、驱动器管理器、数据库驱动器和数据源。
应用程序接口:屏蔽不同的ODBC数据库驱动器之间函数调用的差别,为用户提供统一的SQL编程接口。
驱动器管理器:为应用程序装载数据库驱动器。
数据库驱动器:实现ODBC的函数调用,提供对特定数据源的SQL请求。如果需要,数据库驱动器将修改应用程序的请求,使得请求符合相关的DBMS所支持的文法。
数据源:由用户想要存取的数据以及与它相关的操作系统、DBMS和用于访问DBMS的网络平台组成。
虽然ODBC驱动器管理器的主要目的是加载数据库驱动器,以便ODBC函数调用,但是数据库驱动器本身也执行ODBC函数调用,并与数据库相互配合。因此当应用系统发出调用与数据源进行连接时,数据库驱动器能管理通信协议。当建立起与数据源的连接时,数据库驱动器便能处理应用系统向DBMS发出的请求,对分析或发自数据源的设计进行必要的翻译,并将结果返回给应用系统。
2.JDBC的诞生
自从Java语言于1995年5月正式公布以来,Java风靡全球。出现大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个Java语言的API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分发挥,比如平台无关性、面向对象特性等。随着越来越多的编程人员对Java语言的日益喜爱,越来越多的公司在Java上投入的精力日益增加,对java语言接口的访问数据库的API的要求越来越强烈。也由于ODBC的有其不足之处,比如它并不容易使用,没有面向对象的特性等等,SUN公司决定开发一Java语言为接口的数据库应用程序开发接口。在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)就成为Java语言的标准部件。
二、JDBC技术概述
JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface,应用程序设计接口)。
通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问,写另一个程序访问,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用时真正实现&WriteOnce,RunEverywhere!&
Java具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的数据库应用的编程语言。它所需要的是Java应用如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。
JDBC扩展了Java的能力,如使用Java和JDBCAPI就可以公布一个Web页,页中带有能访问远端数据库的Ap plet。或者企业可以通过JDBC让全部的职工(他们可以使用不同的操作系统,如Windwos,Machintosh和UNIX)在In tranet上连接到几个全球数据库上,而这几个全球数据库可以是不相同的。随着越来越多的程序开发人员使用Java语言,对Java访问数据库易操作性的需求越来越强烈。
JDBC API定义了一组用于与数据库通信的接口和类。这些接口和类位于java.sql包中。
JDBC是用来(让我们的程序)通过网络来操作数据库的,作用很重要;JDBC技术也是Java核心技术之一。凡是需要用网络操作数据库的程序,JDBC编程有问题,一切都是白搭。
三、JDBC技术及使用详解
从结构图中可以看出,通过JDBC API 让我们的Java应用程序可以利用JDBCDriver Manager[JDBC驱动管理],连接到JDBC驱动;体现在我们的工程中也就是要导入驱动jar包。
何谓驱动?
不同的数据库厂商或者同一厂商的不同数据库版本都会提供不同的驱动,任何应用程序都是通过这个驱动来操作特定厂商、特定版本的数据库的。
使用JDBC的第一步就是要注册(加载)这个驱动。
JDBC驱动程序的分类
第一类JDBC驱动程序是JDBC-ODBC桥再加上一个ODBC驱动程序。
这类驱动一般不用现在的编程应用中。
第二类JDBC驱动程序是部分JAVAAPI代码的驱动程序,用于把JDBC调用转换成主流数据库API的本机调用。
第三类JDBC驱动程序是面向数据库中间件的纯JAVA驱动程序,JDBC调用被转换成一种中间件厂商的协议,中间件再把这些调用转换到数据库API。
第四类JDBC驱动程序是直接面向数据库的纯JAVA驱动程序。
是使用JDBC驱动程序访问数据库的首选方式
通过JDBC操作数据库&&步骤:
第1步:注册驱动 (只做一次)
第2步:建立连接(Connection)
第3步:创建执行SQL的语句(Statement)
第4步:执行语句
第5步:处理执行结果(ResultSet)
第6步:释放资源
使用JDBC第一步:加载驱动
注册驱动有三种方式:
1.Class.forName(&com..jdbc.Driver&);
推荐这种方式,不会对具体的驱动类产生依赖
2.DriverManager.registerDriver(com.mysql.jdbc.Driver);
会对具体的驱动类产生依赖
3.System.setProperty(&jdbc.drivers&, &driver1:driver2&);
虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用
使用JDBC第二步:建立连接
通过Connection建立连接,Connection是一个接口类,其功能是与数据库进行连接(会话)。
建立Connection接口类对象:
Connection conn =DriverManager.getConnection(url, user, password);
其中URL的格式要求为:
JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&&
如:&jdbc:mysql://localhost:3306/test&
user即为登录数据库的用户名,如root
password即为登录数据库的密码,为空就填&&
使用JDBC第三步:创建执行对象
执行对象Statement负责执行SQL语句,由Connection对象产生。
Statement接口类还派生出两个接口类PreparedStatement和CallableStatement,这两个接口类对象为我们提供了更加强大的数据访问功能。
创建Statement的语法为:
Statement st = conn.createStatement();
使用JDBC第四步:执行SQL语句
执行对象Statement提供两个常用的方法来执行SQL语句。
executeQuery(Stringsql),该方法用于执行实现查询功能的sql语句,返回类型为ResultSet(结果集)。
如:ResultSet rs =st.executeQuery(sql);
executeUpdate(Stringsql),该方法用于执行实现增、删、改功能的sql语句,返回类型为int,即受影响的行数。
如:int flag = st.executeUpdate(sql);
使用JDBC第五步:处理执行结果
ResultSet对象
ResultSet对象负责保存Statement执行后所产生的查询结果。
结果集ResultSet是通过游标来操作的。
游标就是一个可控制的、可以指向任意一条记录的指针。有了这个指针我们就能轻易地指出我们要对结果集中的哪一条记录进行修改、删除,或者要在哪一条记录之前插入数据。一个结果集对象中只包含一个游标。
使用JDBC 第六步&&释放资源
Connection对象的close方法用于关闭连接,并释放和连接相关的资源。
使用JDBC&&模板
一些重要的接口----------------------------------------------------------------------------------------------------
PreperedStatement接口
PreperedStatement从Statement扩展而来。
需要多次执行SQL语句,可以使用PreparedStatement。
PreparedStatement可以对SQL语句进行预编译
并且可以存储在PreparedStatement对象中,当多次执行SQL语句时可以提高效率。
作为Statement的子类,PreparedStatement继承了Statement的所有函数。
创建PreperedStatement
PreparedStatementstr=con.prepareStatement(&update user set id=? where username=?&);//此处?为通配符
其他的CRUD方法和Statement基本一致。
CallableStatement接口
CallableStatement类继承了PreparedStatement类,他主要用于执行SQL存储过程。
在JDBC中执行SQL存储过程需要转义。
JDBC API提供了一个SQL存储过程的转义语法:
{call[,, ...]}
procedure-name:是所要执行的SQL存储过程的名字
[,, ...]:是相对应的SQL存储过程所需要的参数
ResultSetMeta接口
前面使用ResultSet接口类的对象来获取了查询结果集中的数据。
但ResultSet功能有限,如果我们想要得到诸如查询结果集中有多少列、列名称分别是什么就必须使用ResultSetMeta接口了。
ResultSetMeta是ResultSet的元数据。
元数据就是数据的数据, &有关数据的数据&或者&描述数据的数据&。
ResultSetMeta的使用
获得元数据对象
ResultSetMetaData rsmd=rst.getMetaData();
返回所有字段的数目
public int getColumCount() throwsSQLException
根据字段的索引值取得字段的名称
public String getColumName (int colum)throws SQLException
根据字段的索引值取得字段的类型
public String getColumType (int colum)throws SQLException
PreperedStatement接口和Statement的区别
(1) 使用Statement发送和执行sql语句
Statement stmt = con.creatStatement();//加载时,无参数,不编译sql语句
Stringsql = &selete * from emp&;
ResultSet rs = stmt.executeQuery(sql);//执行时编译sql语句,返回查询结果集
(2) 使用PreparStatement发送和执行sql语句
Stringsql = &selete * from emp&;
PreparStatement ps=con.prepareStatement(sql);//加载时就编译sql语句
ResultSet rs = ps.executeQuery();//此处执行时,不需要传参
Statement stmt;支持可以通过字符串拼接(来传递参数),如StringdeleteStu = &delete from student where id=&+但容易SQL注入
PreparedS 不支持字符串拼接,提供?通配符传递参数,更安全;如String deleteStu = &delete from student where id=?&;
ps.setInt(1, id); //设置第一个?通配值为id
何谓事务?
所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。
事务的ACID属性:
1. 原子性(Atomicity):指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2. 一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3. 隔离性(Isolation)事务的隔离性是指一个事务的执行不能被其他事务干扰。
4. 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
JDBC中使用COMMIT 和 ROLLBACK语句来实现事务。
COMMIT用于提交事务,ROLLBACK用于数据库回滚。
通过这两个语句可以确保数据完整性;数据改变被提交之前预览;将逻辑上相关的操作分组。
RollBack语句数据改变被取消使之再一次事务中的修改前的数据状态可以被恢复。
为了让多个 SQL 语句作为一个事务执行,基本步骤为:
先调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务。
然后在所有的 SQL 语句都成功执行后,调用 commit();
如果在出现异常时,可以调用 rollback();使方法回滚事务。
在实际应用中经常会涉及到多个数据源的不同的连接,并且数据的操作要处于一个事务之中。
如去银行进行转账,转账的两个账户是不同的银行,当然数据的操作就跨数据库了,或者叫处于不同的数据源之中。
跨越多个数据源的事务,就要使用JTA容器实现事务。
在分布式的情况下的JTA容指的是Web容器,大家非常熟悉的Tomcat不能实现JTA的操作。
目前支持JTA的容器有非常著名的BEA公司的 Weblogic,IBM公司的WebSphere等企业级的Web应用服务器。
JTA分成两阶段提交
第一步,通过JNDI在分布式的环境中查找相关资源。
javax.transaction.UserTransactiontx = (UserTransaction)ctx.lookup(&jndiName&);
tx.begin()
第二步,提交
tx.commit();

我要回帖

更多关于 为什么要学数据库+java 的文章

 

随机推荐