java基础集合框架基础java 增删改查查中 ”改“的代码

hibernate 入门增删改查demo
hibernate 入门增删改查demo 源代码下载地址:/share/8592.htm
原文:hibernate
入门增删改查demo
源代码下载地址:
hibernate 入门增删改查demo
上一篇SSH+JSP 图书管理系统
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
springmvc_springdata
访问:42167次
积分:2078
积分:2078
排名:第7585名
前端技术(45)
脚本和工具(34)
网络客户端和服务端组件(2)
网络编程(2)
邮件开发(3)
语言基础(12)
文本解析和文件处理(3)
Swing和AWT开发(15)
游戏开发(8)
Web开发(38)
毕业设计(1)
管理系统(10)
javascript(22)
网页特效(11)
报表制作(4)
加密混淆(1)
第三方应用开发(1)
数据库相关(1)
Highcharts(1)
NOSQL相关(1)
入门教程(3)
任务调度(1)
框架搭建(2)
网站模板(1)
Android和J2ME手机开发(2)
bootstrap(2)
html Div层的展开与收缩的特效源代码下载(831)
Java常用正则表达式验证工具类RegexUtils.java(770)
JQuery和Servlet实现文件上传进度条,能显示上传速度,上传的百分比等(725)
Java字符串转16 进制工具类Hex.java(692)
Java+Swing+SQL+Server2005开发酒店管理系统源代码下载(671)
java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java(635)
css3美化文本框提示特效代码下载(574)
JS实现可编辑的表格,双击可编辑,可以删除行和列,增加行和列,重置,导出表格,也可以上下移动元素(525)
SSH2开发简易的购物网站源代码下载(487)
java swing开发单机版五子棋源代码下载(2)
java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了(2)
java swing开发单机版五子棋源代码下载,休闲娱乐(2)
自己在项目中写的简单的仿freemarker模板引擎工具(2)
jquery弹窗头像选择器(2)
java汉字转拼音工具类源代码(2)
java实现发邮件的工具类,方便
好用(需要架包的Send Email To me)(2)
java实现生成简单图片验证码(1)
HTML5+Ajax+Jquery调用Google搜索API实现搜索引擎,支持web,image,news,vedio4种模式!(1)
js网状特效源代码下载(1)
原创吗?源代码
vTiQ7Svws:
Jquery的一个简单教程
vTiQ7Svws:
博主,能否分享到网盘里,那个还要积分的
看过后觉得还是不错
yahoohost:
lizhi_java:
多线程的时候会不会出问题?
(责任编辑:赵红霞)
------分隔线----------------------------
到底是使用开发工具构建一个良好的maven结构的Webapp,还是直接...
评委用智能手机Android系统的专用打分端,为每一个现场比赛选手...
cocos2dx 监听android设备按键响应的方法很简单,直接上代码注册一...
Windows Server 2008 与普通 windows 版本最大的不同,在于其文件/目录...
初学nodejs这个系列并不是入门系列。其实我自己还没入门。。入...
YCFHQ-9DWCY-DKV88-T2TMH-G7BHPvs2010中文版破解下载 【摘要】文件名 cn...豆丁精品文档: 数据库增删改查 数据库的增删改查 java的增删改查 java怎样实现mv..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
java的MVC_模式的数据库增删改查
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Java连接数据库增删改查_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
2页免费8页1下载券23页免费4页免费2页免费13页免费17页免费30页2下载券7页免费2页免费
喜欢此文档的还喜欢23页1下载券47页免费2页免费12页免费39页免费
Java连接数据库增删改查|一​些​基​础​的​关​于​j​a​v​a​ ​j​d​b​c​的​程​序​代​码
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢java对xml文件干增删改查_jbpm4调整struts2+spring2.5+hibernate3.3入门实例教程_linux操作系统上c语言编程入门&unix操作系统上同样适用&——Linux程序设计入门-文件操作__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
java对xml文件干增删改查
jbpm4调整struts2+spring2.5+hibernate3.3入门实例教程
linux操作系统上c语言编程入门&unix操作系统上同样适用&——Linux程序设计入门-文件操作
java对xml文件干增删改查
java对xml文件做增删改查
package com.
import java.io.F
import java.util.ArrayL
import java.util.L
import java.util.UUID;
import javax.xml.parsers.DocumentB
import javax.xml.parsers.DocumentBuilderF
import javax.xml.transform.T
import javax.xml.transform.TransformerF
import javax.xml.transform.dom.DOMS
import javax.xml.transform.stream.StreamR
import org.w3c.dom.D
import org.w3c.dom.E
import org.w3c.dom.N
import org.w3c.dom.NodeL
import org.w3c.dom.T
public class GPS_GNSS_XML_Color {
//删除节点时传入的参数
private static String deleteN
//修改节点时传入的参数
private static String updateN
//读取传入的路径,返回一个document对象
public static Document loadInit(String filePath){
Document document =
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new File(filePath));
document.normalize();
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
* 删除制定的xml
* @param filePath
public static boolean deleteXML(String filePath){
deleteNumber = "421f481e-790c-41be-91e3-27d215b73ce2";
Document document = loadInit(filePath);
NodeList nodeList = document.getElementsByTagName("color");
for(int i=0; i&nodeList.getLength(); i++){
String number_ = document.getElementsByTagName("number").item(i).getFirstChild().getNodeValue();
//删除节点时传入的参数
if(number_.equals(deleteNumber)){
Node node = nodeList.item(i);
node.getParentNode().removeChild(node);
saveXML(document, filePath);
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
* 修改制定的xml
* @param filePath
public static boolean updateXML(String filePath){
updateNumber = "421f481e-790c-41be-91e3-27d215b73ce2";
//读取传入的路径,返回一个document对象
Document document = loadInit(filePath);
//获取叶节点
NodeList nodeList = document.getElementsByTagName("color");
//遍历叶节点
for(int i=0; i&nodeList.getLength(); i++){
String number = document.getElementsByTagName("number").item(i).getFirstChild().getNodeValue();
String colorValue = document.getElementsByTagName("colorValue").item(i).getFirstChild().getNodeValue();
Double minValue = Double.parseDouble(document.getElementsByTagName("minValue").item(i).getFirstChild().getNodeValue());
Double maxValue = Double.parseDouble(document.getElementsByTagName("maxValue").item(i).getFirstChild().getNodeValue());
//修改节点时传入的参数
if(number.equals(updateNumber)){
document.getElementsByTagName("colorValue").item(i).getFirstChild().setNodeValue("black");
document.getElementsByTagName("minValue").item(i).getFirstChild().setNodeValue("2222");
document.getElementsByTagName("maxValue").item(i).getFirstChild().setNodeValue("22222");
System.out.println();
saveXML(document, filePath);
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
* 添加节点
* @param filePath
public static boolean addXML(String filePath){
//读取传入的路径,返回一个document对象
Document document = loadInit(filePath);
//创建叶节点
Element eltColor = document.createElement("color");
Element eltNumber = document.createElement("number");//创建叶节点的第一个元素
Element eltColorValue = document.createElement("colorValue");//创建叶节点的第二个元素
Element eltMinValue = document.createElement("minValue");//创建叶节点的第三个元素
Element eltMaxValue = document.createElement("maxValue");//创建叶节点的第四个元素
Text number_ = document.createTextNode(UUID.randomUUID().toString());//创建叶节点的第一个元素下的文本节点
eltNumber.appendChild(number_);//把该文本节点加入到叶节点的第一个元素里面
Text colorValue_ = document.createTextNode("colorValue");//创建叶节点的第二个元素下的文本节点
eltColorValue.appendChild(colorValue_);//把该文本节点加入到叶节点的第二个元素里面
Text minValue_ = document.createTextNode("100");//创建叶节点的第三个元素下的文本节点
eltMinValue.appendChild(minValue_);//把该文本节点加入到叶节点的第三个元素里面
Text maxValue_ = document.createTextNode("200");//创建叶节点的第四个元素下的文本节点
eltMaxValue.appendChild(maxValue_);//把该文本节点加入到叶节点的第四个元素里面
//把叶节点下的元素加入到叶节点下
eltColor.appendChild(eltNumber);
eltColor.appendChild(eltColorValue);
eltColor.appendChild(eltMinValue);
eltColor.appendChild(eltMaxValue);
//获取根节点
Element eltRoot = document.getDocumentElement();
//把叶节点加入到根节点下
eltRoot.appendChild(eltColor);
//更新修改后的源文件
saveXML(document, filePath);
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
* 把修改后的document写进源文件(更新源文件)
* @param document
* @param filePath
public static boolean saveXML(Document document, String filePath){
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(filePath));
transformer.transform(source, result);
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
* 获取xml文件的所有记录
* @param filePath
public static List&ColorValue& selectXML(String filePath){
List&ColorValue& colorValueList = new ArrayList&ColorValue&();
//读取传入的路径,返回一个document对象
Document document = loadInit(filePath);
//获取叶节点
NodeList nodeList = document.getElementsByTagName("color");
//遍历叶节点
for(int i=0; i&nodeList.getLength(); i++){
ColorValue colorValue = new ColorValue();
String number_ = document.getElementsByTagName("number").item(i).getFirstChild().getNodeValue();
String colorValue_ = document.getElementsByTagName("colorValue").item(i).getFirstChild().getNodeValue();
Double minValue_ = Double.parseDouble(document.getElementsByTagName("minValue").item(i).getFirstChild().getNodeValue());
Double maxValue_ = Double.parseDouble(document.getElementsByTagName("maxValue").item(i).getFirstChild().getNodeValue());
colorValue.setNumber(number_);
colorValue.setColorValue(colorValue_);
colorValue.setMinValue(minValue_);
colorValue.setMaxValue(maxValue_);
colorValueList.add(colorValue);
return colorValueL
}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
package com.
public class ColorValue {
private String colorV
private Double minV
private Double maxV
public String getNumber() {
public void setNumber(String number) {
this.number =
public String getColorValue() {
return colorV
public void setColorValue(String colorValue) {
this.colorValue = colorV
public Double getMinValue() {
return minV
public void setMinValue(Double minValue) {
this.minValue = minV
public Double getMaxValue() {
return maxV
public void setMaxValue(Double maxValue) {
this.maxValue = maxV
&?xml version="1.0" encoding="UTF-8" standalone="no"?&
&number&-fab3-9d&/number&
&colorValue&black&/colorValue&
&minValue&2222&/minValue&
&maxValue&22222&/maxValue&
&number&421f481e-790c-41be-91e3-27d215b73ce2&/number&
&colorValue&colorValue&/colorValue&
&minValue&100&/minValue&
&maxValue&200&/maxValue&
jbpm4调整struts2+spring2.5+hibernate3.3入门实例教程
jbpm4整合struts2+spring2.5+hibernate3.3入门实例教程
原创不易,转载请注明出处:jbpm4整合struts2+spring2.5+hibernate3.3入门实例教程
代码下载地址:/share/0384.htm
如果不结合其他的框架进行整个开发(如:spring、hibernate),JBPM4也有自己的一套IOC容器,能后将自己的服务配置到IOC容器中,能够很容易的运行容器所配置的服务,
这样它也能够在代码中减少一陀一陀的工厂类等代码的调用,降低了偶核性,但是如果结合spring框架来进行整个开发的话,那么就有两个容器,两个SessionFactory,但是系统中只考虑一个容器来
对服务进行管理, 那么我们就要将jbpm4的服务移植到spring的IOC容器中,让spring来进行统一管理,这样通过spring的容器来管理服务、事务。
在网上,不管是百度、还是谷歌 搜索了一下,截至到目前(),没有搜索出一个JBPM4结合其他框架的完成例子,都是一些简单的介绍,而且所有文章大同小异,虽然文章上千章,但是好像出自
一个之手,但是此人也只是大概讲解了一下,可能有些人会认为用JBPM4结合其他框架进行整合是非常简单,那么你的想法是错误的,JBPM4整合其他框架对JBPM4的IOC理解要非常清楚,同时,要对部分源代码进行了解,才可能一步一步的搭建起来框架,下面介绍下我以struts2+spring2.5+hibernate3.4+jbpm4来搭建的一个框架,并且成功部署的过程
ssh2的框架搭建我这里就不啰嗦了,我主要就这个框架的基础上来整合jbpm4
第一步:加入jbpm4的jpdl插件,这个步骤非常简单,但是可能会出现下面的错误
把jbpm4加入到项目中遇到的问题:
无法导入插件jpdl(导入插件后没有出现可视化流程操作器的入口,无法进行可视化流程建立)
先前本人使用myeclipse6.0.1,在此版本上本人做过JBPM3的项目,在做JBPM4时,很自然的想到在该IDE上进行JBPM4的开发,但是一直都无法成功江JBPM4的jpdl插件安装成功,因此
不断的换各种安装插件的方式,浪费了很多时间,后无意在myclipse7.1.1中尝试安装jpdl插件,竟然成功,后才发现myeclipse6不支持jbpm4,最终本人选择IDE myclipse7.1.1来进行
第二步:创建JBPM4的数据库文件、JBPM4相关jar包、JBPM4的相关配置文件
数据库文件:解压下载的jbpm4.0, jbpm4.0根目录下的db\schema.scripts目录下,这里存放的是jbpm4数据库文件的脚本,根据自己的需要选择相应数据库脚本文件进行导入
JBPM4的jar包:jbpm4.0根目录下jbpm.jar
jbpm4-spring.jar,这两个jar文件内容大致相同,但是某些类也是对方所不具有的
lib目下的相关jar包(不要全部导入,因为这里包含hibernate,还有一些公共的jar包,可能你的工程中已经含有这些jar包,根据需要导入相关的jar包即可)
JBPM4的相关配置文件:
鉴于大家jbpm对配置文件位置的存放不清楚,以及因为版本的不同,造成文件内容和文件名不一样,所以对需要在项目中导入的文件及内容(基本配置)做了一个总结:
jbpm.cfg.xml,内容如下:
&?xml version="1.0"encoding="UTF-8"?&
&jbpm-configuration&
&import resource="jbpm.spring.default.cfg.xml" /&
&import resource="jbpm.spring.hibernate.cfg.xml" /&
&import resource="jbpm.jpdl.cfg.xml" /&
&import resource="jbpm.identity.cfg.xml" /&
&!-- Job executor is excluded for running the example test cases. --&
&!-- To enable timers and messages in production use, this should be included. --&
&import resource="jbpm.jobexecutor.cfg.xml"/&
&import resource="jbpm.mail.templates.examples.xml" /&
&/jbpm-configuration&
jbpm.mail.properties,文件内容:
mail.smtp.host localhost
mail.smtp.port 2525
mail.from noreply@jbpm.org
jbpm.mail.templates.examples.xml,文件内容:
&?xml version="1.0"encoding="UTF-8"?&
&jbpm-configuration&
&process-engine-context&
&mail-template name="rectify-template"&
&to addresses="${addressee}" /&
&cc users="bb" groups="innerparty" /&
&bcc groups="thinkpol" /&
&subject& rectify ${newspaper} &/subject&
&text& ${newspaper} ${date} ${details} &/text&
&/mail-template&
&/process-engine-context&
&/jbpm-configuration&
jbpm.spring.default.cfg.xml,文件内容:
&?xml version="1.0"encoding="UTF-8"?&
&jbpm-configuration&
&process-engine-context&
&repository-service /&
&repository-cache /&
&execution-service /&
&history-service /&
&management-service /&
&identity-service /&
&task-service /&
&hibernate-configuration&
&cfg resource="jbpm.hibernate.cfg.xml"/&
&/hibernate-configuration&
&hibernate-session-factory /&
&script-manager default-expression-language="juel"
default-script-language="juel"
read-contexts="execution,environment, process-engine"
write-context=""&
&script-language name="juel" factory="org.jbpm.pvm.internal.script.JuelScriptEngineFactory" /&
&/script-manager&
&authentication /&
&id-generator /&
&types resource="jbpm.variable.types.xml" /&
&address-resolver /&
&business-calendar&
&monday hours="9:00-12:00and 12:30-17:00" /&
&tuesday hours="9:00-12:00and 12:30-17:00" /&
&wednesday hours="9:00-12:00and 12:30-17:00" /&
&thursday hours="9:00-12:00and 12:30-17:00" /&
&friday hours="9:00-12:00and 12:30-17:00" /&
&holiday period="01/07//2008" /&
&/business-calendar&
&mail-template name='task-notification'&
&to users="${task.assignee}"/&
&subject& ${task.name} &/subject&
&text& &![CDATA[ Hi ${task.assignee},
Task "${task.name}" has been assigned to you.
${task.description}
Sent by JBoss jBPM
]]& &/text&
&/mail-template&
&mail-template name='task-reminder'&
&to users="${task.assignee}"/&
&subject& ${task.name} &/subject&
&text& &![CDATA[ Hey ${task.assignee},
Do not forget about task "${task.name}".
${task.description}
Sent by JBoss jBPM
]]& &/text&
&/mail-template&
&/process-engine-context&
&transaction-context&
&repository-session /&
&db-session /&
&message-session /&
&timer-session /&
&history-session /&
&mail-session&
&mail-server&
&session-properties resource="jbpm.mail.properties" /&
&/mail-server&
&/mail-session&
&/transaction-context&
&/jbpm-configuration&
jbpm.spring.hibernate.cfg.xml,文件内容:
&?xml version="1.0"encoding="UTF-8" ?&
&jbpm-configuration&
&process-engine-context&
&command-service&
&retry-interceptor /&
&environment-interceptor /&
&spring-transaction-interceptor /&
&/command-service&
&/process-engine-context&
&transaction-context&
&transaction /&
&hibernate-session /&
&/transaction-context&
&/jbpm-configuration&
logback.xml,文件内容:
&configuration&
&appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"&
&layout class="ch.qos.logback.classic.PatternLayout"&
&Pattern& %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n &/Pattern&
&pattern&%date [%thread] %-5level %logger{80} - %msg%n&/pattern&
&/appender&
&root level="info"&
&appender-ref ref="STDOUT" /&
&/configuration&
sql-error-codes.xml,文件内容:
该文件内容较多,搜索一下jbpm4.0包下的文件,应该都有
上述文件存放在src目录下
第三步:添加JBPM4的服务到spring IOC容器中
1.jbpm.spring.default.cfg.xml(jbpm.spring.default.cfg.xml)配置文件进行修改,将下面的部分配置注释掉
&hibernate-configuration&
&cfg resource="jbpm.hibernate.cfg.xml" /&
&/hibernate-configuration&
&hibernate-session-factory /&
注释的部分是在jBPM4中创建了sessionFactory,因为已经有了spring管理sessionFactory,因此我们只需要一个sessionFactory。既然要将jBPM4与Spring的整合,那就希望由Spring来统一管理
sessionFactory和事务,在Spring的配置文件中构造一个sessionFactory。一切由它与外部交互.
2.上面已经屏蔽了jbpm4的sessionFactory,那么此处要新建立一个ProcessEngineFactoryBean类,该类用来初始化JBPM4的相关配置文件、工作流引擎,并且把sessionFactory的创建交给spring的容器
进行管理,在ProcessFactoryBean中创建一个SpringConfiguration,然后将sessionFactory放入 SpringConfiguration中,再从SpringConfiguration得到processEngine,代码如下:
public class ProcessEngineFactoryBean implements FactoryBean,
InitializingBean, DisposableBean, ApplicationContextAware {
private String jbpmConfigurationLocation="jbpm.cfg.xml";
private SessionFactory sessionF
private ApplicationContext applicationC
private ProcessEngine processE//jbpm4的流程引擎接口,所有的功能服务都是从这里获取的,包括RespoistoryService、ExecutionService
public Object getObject() throws Exception {
return processE
@SuppressWarnings("unchecked")
public Class getObjectType() {
return ProcessEngine.
public boolean isSingleton() {
public void afterPropertiesSet() {
SpringConfiguration cfg=new SpringConfiguration(jbpmConfigurationLocation);
cfg.setApplicationContext(applicationContext);
cfg.setSessionFactory(sessionFactory);
this.processEngine=cfg.buildProcessEngine();
public void destroy() {
this.processEngine=
this.sessionFactory=
public void setJbpmConfigurationLocation(
String jbpmConfigurationLocation) {
this.jbpmConfigurationLocation=jbpmConfigurationL
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory=sessionF
public void setApplicationContext(
ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationC
并且在Spring配置文件中加入如下配置:
&bean id="processEngine" class="com.bestsoft.ssh.service.impl.flow.ProcessEngineFactoryBean"&
&property name="sessionFactory" ref="sessionFactory" /&
通过上述我们创建了工作流引擎,那么这个时候我们可以通过配置来管理JBPM4中的服务(ProcessEngine接口中的服务,如:创建流程的服务、执行流程的服务等),这样做的目的是不想一陀一陀的工厂
类在代码中出现,由spring的注入功能来实现,如下配置(在spring配置文件中):
&bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /&
&bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" /&
&bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" /&
&bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" /&
&bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" /&
&bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" /&
添加JBPM4的服务到spring IOC容器中错误:
注意:所有的jbpm4的配置文件必须在src目录下,并且不能有独立的目录,因为在初始化发布流程的代码中
ProcessEngine processEngine = new Configuration().buildProcessEngine();
因为JbpmConfiguration extends Configuration implements Context, ProcessEngine, EnvironmentFactory
调用JbpmConfiguration类中buildProcessEngine()方法来创建ProcessEngine来得到JBPM4的服务,在这个方法中,有这样一段代码
if (!isConfigured) {
setResource("jbpm.cfg.xml");
它会去src下找jbpm.cfg.xml文件,如果配置文件不在src目录下,那么就会找不到配置文件(jbpm.cfg.xml)
第四步:加入JBPM4的实体关系映射文件:
&property name="mappingLocations"&
&value& classpath*:jbpm.repository.hbm.xml &/value&
&value& classpath*:jbpm.execution.hbm.xml &/value&
&value& classpath*:jbpm.history.hbm.xml &/value&
&value& classpath*:jbpm.task.hbm.xml &/value&
&value& classpath*:jbpm.jpdl.hbm.xml &/value&
&value& classpath*:jbpm.identity.hbm.xml &/value&
&/property&
可能会出现的问题: 启动中如果提示:找不到org.jbpm.jpdl.internal.model.JpdlExecution,那么这个时候,应该添加一个jbpm4-spring.jar文件,因为该jar中有此实体
请务必配置事务,JBPM4已经将事务改成从当前的Threadlocal中获得,所以jBPM4是必须当前有事务,如果我没有创建事务的话,在使用 processEngine时就会说事务没有启动。
因为该文章是在成功运行后书写的,可能某些步骤漏写,或者描述不清楚,而无法成功整合,导致报错,请大家把报错信息贴出来,让我对文章作相应的修改,让参照着能够成功整合运行。
linux操作系统上c语言编程入门&unix操作系统上同样适用&——Linux程序设计入门-文件操作
linux操作系统下c语言编程入门&unix操作系统下同样适用&——Linux程序设计入门--文件操作[color=blue]3)Linux程序设计入门--文件操作[/color] Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 ---------------------------------------- ---- 1。文件的创建和读写 我假设你已经知道了标准级的文件操作的各个函数(fopen,fread,fwrite等等).当然 如果你不清楚的话也不要着急.我们讨论的系统级的文件操作实际上是为标准级文件操作 服务的. 当我们需要打开一个文件进行读写操作的时候,我们可以使用系统调用函数open.使用完 成以后我们调用另外一个close函数进行关闭操作. #include &fcntl.h&; #include &unistd.h&; #include &sys/types.h&; #include &sys/stat.h&; int open(const char *pathname,int flags); int open(const char *pathname,int flags,mode_t mode); int close(int fd); open函数有两个形式.其中pathname是我们要打开的文件名(包含路径名称,缺省是认为在 当前路径下面).flags可以去下面的一个值或者是几个值的组合. O_RDONLY:以只读的方式打开文件. O_WRONLY:以只写的方式打开文件. O_RDWR:以读写的方式打开文件. O_APPEND:以追加的方式打开文件. O_CREAT:创建一个文件. O_EXEC:如果使用了O_CREAT而且文件已经存在,就会发生一个错误. O_NOBLOCK:以非阻塞的方式打开一个文件. O_TRUNC:如果文件已经存在,则删除文件的内容. 前面三个标志只能使用任意的一个.如果使用了O_CREATE标志,那么我们要使用open的第 二种形式.还要指定mode标志,用来表示文件的访问权限.mode可以是以下情况的组合. ----------------------------- S_IRUSR 用户可以读 S_IWUSR 用户可以写 S_IXUSR 用户可以执行 S_IRWXU 用户可以读写执行 ----------------------------- S_IRGRP 组可以读 S_IWGRP 组可以写 S_IXGRP 组可以执行 S_IRWXG 组可以读写执行 ----------------------------- S_IROTH 其他人可以读 S_IWOTH 其他人可以写 S_IXOTH 其他人可以执行 S_IRWXO 其他人可以读写执行 ----------------------------- S_ISUID 设置用户执行ID S_ISGID 设置组的执行ID ----------------------------- 我们也可以用数字来代表各个位的标志.Linux总共用5个数字来表示文件的各种权限. 00000.第一位表示设置用户ID.第二位表示设置组ID,第三位表示用户自己的权限位,第四 位表示组的权限,最后一位表示其他人的权限. 每个数字可以取1(执行权限),2(写权限),4(读权限),0(什么也没有)或者是这几个值的和 ..
比如我们要创建一个用户读写执行,组没有权限,其他人读执行的文件.设置用户ID位那么 我们可以使用的模式是--1(设置用户ID)0(组没有设置)7(1+2+4)0(没有权限,使用缺省) 5(1+4)即10705: open("temp",O_CREAT,10705); 如果我们打开文件成功,open会返回一个文件描述符.我们以后对文件的所有操作就可以 对这个文件描述符进行操作了. 当我们操作完成以后,我们要关闭文件了,只要调用close就可以了,其中fd是我们要关闭 的文件描述符. 文件打开了以后,我们就要对文件进行读写了.我们可以调用函数read和write进行文件的 读写. #include &unistd.h&; ssize_t read(int fd, void *buffer,size_t count); ssize_t write(int fd, const void *buffer,size_t count); fd是我们要进行读写操作的文件描述符,buffer是我们要写入文件内容或读出文件内容的 内存地址.count是我们要读写的字节数. 对于普通的文件read从指定的文件(fd)中读取count字节到buffer缓冲区中(记住我们必 须提供一个足够大的缓冲区),同时返回count. 如果read读到了文件的结尾或者被一个信号所中断,返回值会小于count.如果是由信号中 断引起返回,而且没有返回数据,read会返回-1,且设置errno为EINTR.当程序读到了文件 结尾的时候,read会返回0. write从buffer中写count字节到文件fd中,成功时返回实际所写的字节数. 下面我们学习一个实例,这个实例用来拷贝文件. #include &unistd.h&; #include &fcntl.h&; #include &stdio.h&; #include &sys/types.h&; #include &sys/stat.h&; #include &errno.h&; #include &string.h&; #define BUFFER_SIZE 1024 int main(int argc,char **argv) { int from_fd,to_ int bytes_read,bytes_ char buffer[BUFFER_SIZE]; char * if(argc!=3) { fprintf(stderr,"Usage:%s fromfile tofile\n\a",argv[0]); exit(1); } /* 打开源文件 */ if((from_fd=open(argv[1],O_RDONLY))==-1) { fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno)); exit(1); } /* 创建目的文件 */ if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1) { fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno)); exit(1); } /* 以下代码是一个经典的拷贝文件的代码 */ while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)) { /* 一个致命的错误发生了 */ if((bytes_read==-1)&&(errno!=EINTR)) else if(bytes_read&;0) { ptr= while(bytes_write=write(to_fd,ptr,bytes_read)) { /* 一个致命错误发生了 */ if((bytes_write==-1)&&(errno!=EINTR)) /* 写完了所有读的字节 */ else if(bytes_write==bytes_read) /* 只写了一部分,继续写 */ else if(bytes_write&;0) { ptr+=bytes_ bytes_read-=bytes_ } } /* 写的时候发生的致命错误 */ if(bytes_write==-1) } } close(from_fd); close(to_fd); exit(0); } 2。文件的各个属性 文件具有各种各样的属性,除了我们上面所知道的文件权限以外,文件还有创建时间 ,大小等等属性. 有时侯我们要判断文件是否可以进行某种操作(读,写等等).这个时候我们可以使用acce ss函数. #include &unistd.h&; int access(const char *pathname,int mode); pathname:是文件名称,mode是我们要判断的属性.可以取以下值或者是他们的组合. R_OK文件可以读,W_OK文件可以写,X_OK文件可以执行,F_OK文件存在.当我们测试成功时 ,函数返回0,否则如果有一个条件不符时,返回-1. 如果我们要获得文件的其他属性,我们可以使用函数stat或者fstat. #include &sys/stat.h&; #include &unistd.h&; int stat(const char *file_name,struct stat *buf); int fstat(int filedes,struct stat *buf); struct stat { dev_t st_ /* 设备 */ ino_t st_ /* 节点 */
mode_t st_ /* 模式 */ nlink_t st_ /* 硬连接 */ uid_t st_ /* 用户ID */ gid_t st_ /* 组ID */ dev_t st_ /* 设备类型 */ off_t st_ /* 文件字节数 */ unsigned long st_ /* 块大小 */ unsigned long st_ /* 块数 */ time_t st_ /* 最后一次访问时间 */ time_t st_ /* 最后一次修改时间 */ time_t st_ /* 最后一次改变时间(指属性) */ }; stat用来判断没有打开的文件,而fstat用来判断打开的文件.我们使用最多的属性是st_ mode.通过着属性我们可以判断给定的文件是一个普通文件还是一个目录,连接等等.可以 使用下面几个宏来判断. S_ISLNK(st_mode):是否是一个连接.S_ISREG是否是一个常规文件.S_ISDIR是否是一个目 录S_ISCHR是否是一个字符设备.S_ISBLK是否是一个块设备S_ISFIFO是否 是一个FIFO文 件.S_ISSOCK是否是一个SOCKET文件. 我们会在下面说明如何使用这几个宏的. 3。目录文件的操作 在我们编写程序的时候,有时候会要得到我们当前的工作路径。C库函数提供了get cwd来解决这个问题。 #include &unistd.h&; char *getcwd(char *buffer,size_t size); 我们提供一个size大小的buffer,getcwd会把我们当前的路径考到buffer中.如果buffer 太小,函数会返回-1和一个错误号. Linux提供了大量的目录操作函数,我们学习几个比较简单和常用的函数. #include &dirent.h&; #include &unistd.h&; #include &fcntl.h&; #include &sys/types.h&; #include &sys/stat.h&; int mkdir(const char *path,mode_t mode); DIR *opendir(const char *path); struct dirent *readdir(DIR *dir); void rewinddir(DIR *dir); off_t telldir(DIR *dir); void seekdir(DIR *dir,off_t off); int closedir(DIR *dir); struct dirent { long d_ off_t d_ unsigned short d_ char d_name[NAME_MAX+1]; /* 文件名称 */ mkdir很容易就是我们创建一个目录,opendir打开一个目录为以后读做准备.readdir读一 个打开的目录.rewinddir是用来重读目录的和我们学的rewind函数一样.closedir是关闭 一个目录.telldir和seekdir类似与ftee和fseek函数. 下面我们开发一个小程序,这个程序有一个参数.如果这个参数是一个文件名,我们输出这 个文件的大小和最后修改的时间,如果是一个目录我们输出这个目录下所有文件的大小和 修改时间. #include &unistd.h&; #include &stdio.h&; #include &errno.h&; #include &sys/types.h&; #include &sys/stat.h&; #include &dirent.h&; #include &time.h&; static int get_file_size_time(const char *filename) {
if(stat(filename,&statbuf)==-1) { printf("Get stat on %s Error:%s\n", filename,strerror(errno)); return(-1); } if(S_ISDIR(statbuf.st_mode))return(1); if(S_ISREG(statbuf.st_mode)) printf("%s size:%ld bytes\tmodified at %s", filename,statbuf.st_size,ctime(&statbuf.st_mtime));
return(0); } int main(int argc,char **argv) { DIR * struct dirent *
if(argc!=2) { printf("Usage:%s filename\n\a",argv[0]); exit(1); } if(((stats=get_file_size_time(argv[1]))==0)||(stats==-1))exit(1); if((dirp=opendir(argv[1]))==NULL) { printf("Open Directory %s Error:%s\n", argv[1],strerror(errno)); exit(1); } while((direntp=readdir(dirp))!=NULL) if(get_file_size_time(direntp-&d_name)==-1) closedir(dirp); exit(1); } 4。管道文件 Linux提供了许多的过滤和重定向程序,比如more cat 等等.还提供了& &; | &&等等重定向操作符.在这些过滤和重 定向程序当中,都用到了管 道这种特殊的文件.系统调用pipe可以创建一个管道. #include&unistd.h&; int pipe(int fildes[2]); pipe调用可以创建一个管道(通信缓冲区).当调用成功时,我们可以访问文件描述符fild es[0],fildes[1].其中fildes[0]是用来读的文件描述符,而fildes[1]是用来写的文件描 述符. 在实际使用中我们是通过创建一个子进程,然后一个进程写,一个进程读来使用的. 关于进程通信的详细情况请查看进程通信 #include &stdio.h&; #include &stdlib.h&; #include &unistd.h&; #include &string.h&; #include &errno.h&; #include &sys/types.h&; #include &sys/wait.h&; #define BUFFER 255 int main(int argc,char **argv) { char buffer[BUFFER+1]; int fd[2]; if(argc!=2) { fprintf(stderr,"Usage:%s string\n\a",argv[0]); exit(1); } if(pipe(fd)!=0) { fprintf(stderr,"Pipe Error:%s\n\a",strerror(errno)); exit(1); } if(fork()==0) { close(fd[0]); printf("Child[%d] Write to pipe\n\a",getpid()); snprintf(buffer,BUFFER,"%s",argv[1]); write(fd[1],buffer,strlen(buffer)); printf("Child[%d] Quit\n\a",getpid()); exit(0); } else { close(fd[1]); printf("Parent[%d] Read from pipe\n\a",getpid()); memset(buffer,'\0',BUFFER+1); read(fd[0],buffer,BUFFER); printf("Parent[%d] Read:%s\n",getpid(),buffer); exit(1); } } 为了实现重定向操作,我们需要调用另外一个函数dup2. #include &unistd.h&; int dup2(int oldfd,int newfd); dup2将用oldfd文件描述符来代替newfd文件描述符,同时关闭newfd文件描述符.也就是说 , 所有向newfd操作都转到oldfd上面.下面我们学习一个例子,这个例子将标准输出重定向 到一个文件. #include &unistd.h&; #include &stdio.h&; #include &errno.h&; #include &fcntl.h&; #include &string.h&; #include &sys/types.h&; #include &sys/stat.h&; #define BUFFER_SIZE 1024 int main(int argc,char **argv) {
char buffer[BUFFER_SIZE]; if(argc!=2) { fprintf(stderr,"Usage:%s outfilename\n\a",argv[0]); exit(1); } if((fd=open(argv[1],O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR))==-1) { fprintf(stderr,"Open %s Error:%s\n\a",argv[1],strerror(errno)); exit(1); } if(dup2(fd,STDOUT_FILENO)==-1) { fprintf(stderr,"Redirect Standard Out Error:%s\n\a",strerror(errno)); exit(1); } fprintf(stderr,"Now,please input string"); fprintf(stderr,"(To quit use CTRL+D)\n"); while(1) { fgets(buffer,BUFFER_SIZE,stdin); if(feof(stdin)) write(STDOUT_FILENO,buffer,strlen(buffer)); } exit(0); } 好了,文件一章我们就暂时先讨论到这里,学习好了文件的操作我们其实已经可以写出一 些比较有用的程序了.我们可以编写一个实现例如dir,mkdir,cp,mv等等常用的文件操作 命令了. 想不想自己写几个试一试呢?
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

我要回帖

更多关于 java的集合框架 的文章

 

随机推荐