panda

          IT高薪不是夢!!

          統計

          留言簿

          閱讀排行榜

          評論排行榜

          2009年11月8日 #

          文件上傳(FileUpload)

          1.使用JAR
          ??????jsp文件上傳主要使用了兩個jar包,commons-fileupload-1.2.1.jar和commons-io-1.4.jar
          2.代碼實現
          ???? public class UploadServlet extends HttpServlet {

          ?/**
          ? *
          ? */
          ?private static final long serialVersionUID = 1L;

          ?private ServletContext sc;

          ?private String savePath;

          ?@Override
          ?protected void doGet(HttpServletRequest request,
          ???HttpServletResponse response) throws ServletException, IOException {
          ??doPost(request, response);
          ?}

          ?@Override
          ?protected void doPost(HttpServletRequest request,
          ???HttpServletResponse response) throws ServletException, IOException {

          ??System.out.println("請求進來了..........");

          ??// 設置請求的編碼
          ??request.setCharacterEncoding("UTF-8");

          ??DiskFileItemFactory factory = new DiskFileItemFactory();//創建一個磁盤文件工廠
          ??ServletFileUpload upload = new ServletFileUpload(factory);

          ??try {
          ???List items = upload.parseRequest(request);
          ???Iterator it = items.iterator();
          ???while (it.hasNext()) {
          ????FileItem item = (FileItem) it.next();

          ????if (item.isFormField()) {
          ?????System.out.println("表單的參數名稱:" + item.getFieldName()
          ???????+ ",對應的參數值:" + item.getString("UTF-8"));
          ????} else {
          ?????// 獲取文件擴展名
          ?????String strtype = item.getName().substring(
          ???????item.getName().length() - 3,
          ???????item.getName().length());
          ?????strtype = strtype.toLowerCase();

          ?????if (strtype == "jpg" || strtype == "gif"
          ???????|| strtype == "txt") {
          ??????if (item.getName() != null
          ????????&& !item.getName().equals("")) {
          ???????System.out.println("上傳文件的大小:" + item.getSize());
          ???????System.out.println("上傳文件的類型:"
          ?????????+ item.getContentType());
          ???????System.out.println("上傳文件的名稱:" + item.getName());

          ???????System.out.println("文件的擴展名" + strtype);
          ???????File tempFile = new File(item.getName());
          ???????File file = new File(
          ?????????sc.getRealPath("/") + savePath, tempFile
          ???????????.getName());
          ???????item.write(file);

          ???????request.setAttribute("upload.message", "上傳文件成功!");

          ??????} else {
          ???????request.setAttribute("upload.message",
          ?????????"沒有選擇上傳文件獲取格式不支持");
          ??????}
          ?????} else {
          ??????request.setAttribute("upload.message", "上傳文件格式不支持");
          ?????}
          ????}
          ???}
          ??} catch (Exception e) {
          ???e.printStackTrace();
          ???request.setAttribute("upload.message", "上傳文件不成功!");
          ??}
          ??// 轉發
          ??request.getRequestDispatcher("/uploadResult.jsp").forward(request,
          ????response);
          ?}

          ?@Override
          ?public void init(ServletConfig config) throws ServletException {

          ??savePath = config.getInitParameter("savePath");
          ??sc = config.getServletContext();
          ?}

          posted @ 2009-11-08 16:30 IT追求者 閱讀(170) | 評論 (0)編輯 收藏

          2009年10月12日 #

          Hibernate的多對一關聯映射

          1.關聯映射的本質:就是將關聯關系映射到數據庫中,關聯關系指對象模型中的一個或多個引用.

          2.下面列舉多對一的示例:用戶和組(多個用戶屬于一個組)多對一關聯映射是最常用的一種關聯映射

          ?? *User 類
          ???package com.lzy
          ?? public class User{

          ?? private int id;
          ?? private String name;

          ? private Group group;//持有組的引用
          ???
          ?? public User(){};

          ?? //省略set,get方法
          ?}


          ? *Group類
          ?package com.lzy
          ?public class Group{
          ??
          ?? private int id;

          ?? private String name;
          ?? //省略get,set方法
          ?}

          3.對對象進行關系映射,這也是Hibernate中比較難的一點。
          ? (1)User.hbm.xml
          ??????
          ??????<?xml version="1.0">
          ??????<!DOCTYPE?hibernate-mapping PUBLIC? "-//Hibernate/Hibernate Mapping DTD 3.0//EN" http://hibernate.sourceforge.net/hibernate-mapping-3.0
          .dtd">
          ?? ? <hibernate-mapping package="com.lzy">
          ?????????<class name="User" table="t_user">
          ???????????????<id name="id" column="id">
          ?????????????????????<genarator class="native"/>
          ????????????? </id>
          ????????????<property name="name" column="user_name" not-null="true"/>
          ????????????<many-to-one name="group" column="groupid"/>
          ??????? </calss>
          ???? </hibernate-mapping>


          ?? (2)Group.hbm.xml
          ?????????
          ??????<?xml version="1.0">
          ??????<!DOCTYPE?hibernate-mapping PUBLIC? "-//Hibernate/Hibernate Mapping DTD 3.0//EN" http://hibernate.sourceforge.net/hibernate-mapping-3.0
          .dtd">
          ?? ? <hibernate-mapping package="com.lzy">
          ?????????<class name="Group" table="t_group">
          ???????????????<id name="id" column="id">
          ?????????????????????<genarator class="native"/>
          ????????????? </id>
          ????????????<property name="name" column="group_name" not-null="true"/>
          ??????</class>
          ???</hibernate-mapping>

          4.測試

          public class? Test {
          ???
          ? public static void main(String args[]){

          ??????SessionFactory? sessionFactory=null;
          ????? Session? session=null;
          ????? Transaction?? transaction=null;
          ??????
          ??????sessionFactory = HibernateUtil.getSessionFactory();// 創建一個會話工廠
          ????? session = sessionFactory.openSession();// 創建一個會話實例
          ????? transaction = session.beginTransaction();// 申明一個事務

          ??User user= new User();
          ??Group?group = new Group();

          ??user.setName("龍一");

          ??group.setName("中南大學");
          ? user.setGroup(group);

          ??try {

          ???transaction.begin();
          ???session.save(user);
          ???transaction.commit();

          ??} catch (Exception e) {
          ???e.printStackTrace();
          ??}


          ?? }
          }

          posted @ 2009-10-12 17:56 IT追求者 閱讀(1422) | 評論 (2)編輯 收藏

          2009年7月16日 #

          struts logic標簽使用詳解

          Logic 比較標簽(一)

          1.<logic:equal>

          判斷變量是否與指定的常量相等。例如:

          ???? <%

          ?????? pageContext.setAttribute("test",new Integer(100));

          ???? %>

          ???? <logic:equal value="100" name="test">

          ???????? test=100???? </logic:equal>

          2.<logic:greaterThan>

          判斷常量變量是否與指定的常量不相等。

          <html:link page="/greaterThan.jsp?test=123456">添加參數</html:link> //傳值

          <logic:greaterThan value="12347" parameter="test">

          ?????? true

          </logic:greaterThan>

          下面類似

          3.<logic:greaterEqual>

          判斷變量大小是否等于指定的常量。

          4.<logic:lessThan>

          判斷變量是否小于指定的常量。

          5.<logic:lessEqual>

          判斷變量是否小于等于指定的常量。

          Struts logic標簽(二)

          循環遍歷標簽<logic:iterate>

          該標簽用于在頁面中創建一個循環,以次來遍歷數組、Collection、Map這樣的對象。在Struts中經常用到!

          例如:

          <%

          String []testArray={"str0","str1","str2","str3","str4","str5"};

          pageContext.setAttribute("test",testArray);

          %>

          <logic:iterate id="array" name="test">

          ??????? <bean:write name="array"/>

          </logic:iterate>

          首先定義了一個字符串數組,并為其初始化。接著,將該數組存入pageContext對象中,命名為test1。然后使用logic:iterate標記的name屬性指定了該數組,并使用id來引用它,同時使用bean;write標記來將其顯示出來。

          還可以通過length屬性指定輸出元素的個數,offset屬性指定從第幾個元素開始輸出。例如:

          <logic:iterate id="array1" name="test1" length="3" offset="2">

          <bean:write name="array1"/><br>

          </logic:iterate>

          Struts logic標簽(三)

          <logic:match>

          <logic:notmatch>

          該標簽用于判斷變量中是否或者是否不包含指定的常量字符串。例如:

          <%

          ??????? pageContext.setAttribute("test","helloWord");

          %>

          <logic:match value="hello" name="test">

          ?????? hello 在helloWord中

          </logic:match>

          Match標記還有一個重要屬性,就是location屬性。location屬性所能取的值只有兩個,一個是"start",另一個是"end"。例如:

          <logic:match value="hello" name="test" location="start">

          ????????? helloWord以 hello開頭

          </logic:match>

          Struts logic存在標簽(四)

          <logic:present>

          <logic:notpresent>

          <logic:messagePresent>

          <logic:messageNotPresent>

          <logic:present>和<logic:notpresent>標簽主要用于判斷所指定的對象是否存在;

          例如:

          <%

          pageContext.setAttribute("test","testString");

          %>

          <logic:present name="test">

          ??????? true??

          </logic:present>

          <logic:present>和<logic:notpresent>標記有以下幾個常用屬性:

          header屬性:???? 判斷是否存在header屬性所指定的header信息。

          parameter屬性:判斷是否存在parameter屬性指定的請求參數。

          cookie屬性:???? 判斷cookie屬性所指定的同名cookie對象是否存在。

          name屬性:?????? 判斷name屬性所指定的變量是否存在。

          property屬性:和name屬性同時使用,當name屬性所指定的變量是一個JavaBean時,判斷property屬性所指定的對象屬性是否存在。

          <%

          ?????? Cookie cookie=new Cookie("name","value");

          ?????? response.addCookie(cookie);

          %>

          <logic:present cookie="name">

          ??????? true

          </logic:present>

          <logic:messagePresent>和<logic:messageNotPresent>這兩個標記是來判斷是否在request內存在特定的ActionMessages或ActionErrors對象。它們有幾個常用的屬性:

          name屬性:???? 指定了ActionMessages在request對象內存儲時的key值。

          message屬性:message屬性有兩種取值。當其為true時,表示使用Globals.MESSAGE_KEY做為從request對象中獲取ActionMessages的key值,此時無論name指定什么都無效;當其為false時,則表示需要根據name屬性所指定的值做為從request對象中獲取ActionMessages的key

          值,倘若此時未設置name屬性的值,則使用默認的Globals.ERROR_KEY。

          property屬性:指定ActionMessages對象中某條特定消息的key值。

          例如:

          ????? <%

          ???????? ActionErrors errors = new ActionErrors();

          ???????? errors.add("totallylost", new ActionMessage("application.totally.lost"));

          ???????? request.setAttribute(Globals.ERROR_KEY, errors);

          ???????? request.setAttribute("myerrors", errors);

          ????? %>

          ???????? <logic:messagesPresent name="myerrors">

          ?????????? Yes

          ???????? </logic:messagesPresent>

          Struts logic判空標簽(五)

          <logic:empty>

          <logic:notEmpty>

          該標簽用于判斷指定的字符是否為空。

          例如:

          ????? <%

          ??????? pageContext.setAttribute("test","");

          ????? %>

          ??

          ???? <logic:empty name="test">

          ???????? test 為空

          ???? </logic:empty>

          Struts logic轉發和重定向標簽(六)

          1.<logic:foward>轉發標簽

          該標簽用于進行全局轉發,使用該標簽的頁面一般不再編寫其他內容,因為隨著轉發,頁面將跳轉,原頁面中的內容也沒有意義了。例如:

          ????? this is a test

          <logic:forward name="welcome"/>

          ???? this is a new test

          2.<logic:redirect>重定向標簽

          該標簽用于進行重定向。具有屬性:

          href屬性:???? 將頁面重定向到href指定的完整外部鏈接。

          page屬性:???? 該屬性指定一個本應用內的一個網頁,標記將頁面重定向到這個新的網頁。

          forward屬性:該屬性與struts-config.xml中的<global-forward>內的子項相對應。即將頁面重定向到forward所指定的資源。

          posted @ 2009-07-16 23:51 IT追求者 閱讀(519) | 評論 (0)編輯 收藏

          struts bean標簽使用詳解

          Bean 標簽庫
          ??????? 此標簽庫和Java Bean有很強的關聯性,設計的本意是要在JSP 和JavaBean 之間提供一個接口。Struts 提供了一套小巧有用的標簽庫來操縱JavaBean和相關的對象:cookie、 header、 parameter、 define、write、message、 include、page、resource、size、struts。
          -------------------------------
          -------------------------------
          bean:cookie、bean:header、bean:parameter
          這三個標簽用來重新得到cookie, request header和request parameter。
          bean:header和bean:parameter標簽定義了一個字符串;bean:cookie標簽定義了一個Cookie對象。你可以使用value屬性做為默認值。如果找不到指定的值,且默認值沒有設定的話,會拋出一個request time異常。如果你期望返回多個值的話,可把multiple屬性設為true。
          <bean:cookie id="sessionID" name="JSESSIONID" value="JSESSIONID-ISUNDEFINED"/>
          // 這段代碼定義了一個名為sessionID的腳本變量,如果找不到一個名為JSESSIONID的cookie,那sessionID


          下面代碼會輸出一些Cookie對象的一些屬性:
          <jsp:getProperty name="sessionID " property="comment"/> …
          <jsp:getProperty name="sessionID" property="domain"/> …
          <jsp:getProperty name="sessionID" property="maxAge"/> …
          <jsp:getProperty name="sessionID" property="path"/> …
          <jsp:getProperty name="sessionID" property="value"/> …
          <jsp:getProperty name="sessionID" property="version"/> …

          下面是在request中輸出所有header的例子:
          <%
          ????????? java.util.Enumeration names =((HttpServletRequest) request).getHeaderNames();
          %>

          <%
          ????????? while (names.hasMoreElements()) {
          ????????? String name = (String) names.nextElement();
          %>
          <bean:header id="head" name="<%= name %>"/>
          … <%= name %>
          … <%= head %>

          <%
          ????????? }
          %>

          下面是parameter的例子:
          <bean:parameter id="param1" name="param1"/>
          <bean:parameter id="param2" name="param2" multiple="true"/>??? // 此處定義了一個param2[]。
          <bean:parameter id="param3" name="param3" value="UNKNOWN VALUE"/>

          于其它標簽結合使用:
          <bean:header id="browser" name="User-Agent"/>
          <P>You are viewing this page with: <bean:write name="browser"/></P>
          ----------------------------------------------------------------------------------------------------------------------------------
          <bean:cookie id="username" name="UserName" scope="session"
          value="New User" />
          <P>Welcome <bean:write name="username" property="value"/!</P>
          ??? // 根據cookie創建一個新的Bean,如果用戶名稱已經存儲在cookie中,它就不顯示為一個新用戶。
          -------------------------------
          -------------------------------
          bean:define:有三個用途。
          一是定義新字符串常量:
          <bean:define id="foo" value="This is a new String"/>
          <bean:define id="bar" value='<%= "Hello, " + user.getName() %>'/>
          <bean:define id="last" scope="session" value='<%= request.getRequestURI() %>'/>
          二是復制一個現有的bean給新的bean:
          <bean:define id="foo" name="bar"/>???
          <bean:define id="baz" name="bop" type="com.mycompany.MyClass"/>??? //定義腳本變量的類型,默認為Object???
          三是復制一個現有的bean的屬性給新的bean:
          <bean:define id="bop" name="user" property="role[3].name"/>
          ??? <bean:define id="foo" name="bar" property="baz" scope="request"??? toScope="session"/>
          ??? //toScope屬性指新bean的scope,默認為page??
          上段代碼的意思是把名為bar的bean的baz屬性賦值給foo,foo的類型為String(默認)。
          -------------------------------
          -------------------------------
          bean:include
          這個標簽和bean:include標簽和相似,不同點就是它定義了一個可以復用的腳本變量。用id屬性命名一個新的腳本變量,還支持forward、href、page和transaction.屬性,和html:link中的屬性意義一樣。
          <bean:include id="footerSpacer"??? page="/long/path/footerSpacer.jsp"/>
          然后你能夠在多個地方(scope為page)調用:
          <bean:write name="footerSpacer" />

          -------------------------------
          -------------------------------
          bean:message
          用來實現對國際化的支持的一個標簽,配合java.util數據包中定義的Locale和ResourceBundle類來完成這個任務,用java.text.MessageFormat類配置消息的格式。
          ??? 首先要指定資源文件的名稱。這個文件會包含用默認語言編寫的在程序中會出現的所有消息,這些消息以“關鍵字-值”的形式存儲。文件需要存儲在類路徑下,路徑要作為初始化參數傳送給ActionServlet。
          ??? 實現國際化的規定:所有的資源文件必須都存儲在基本資源文件所在的目錄中。基本資源文件包含的是用默認地區語言-本地語言編寫的消息。如果基本資源文件的名稱是ApplicationResources.properties,那么用其他特定語言編寫的資源文件的名稱就應該是ApplicationResources_xx.properties(xx為ISO編碼,如英語是en)。因此這些文件應包含相同的關鍵字,但關鍵字的值是用特定語言編寫的。
          ??? 然后,ActionServlet的區域初始化參數必須與一個true值一起傳送,這樣ActionServlet就會在用戶會話中的Action.LOCALE_KEY關鍵字下存儲一個特定用戶計算機的區域對象。現在可以運行一個國際化的web站點,它可以根據用戶計算機上的設置的區域自動以相應的語言顯示。

          使用特定的字符串來替換部分消息:
          在資源文件中的定義:info.myKey = The numbers entered are {0},{1},{2},{3}
          標記的使用:<bean:message key="info.myKey" arg0="5" arg1="6" arg2="7" arg3="8"/>
          Jsp頁面的顯示:The numbers entered are 5,6,7,8??? // 最多支持4個參數
          -------------------------------

          -------------------------------
          ?? bean:page:把Jsp中的內部對象做為腳本變量。
          <bean:page id="requestObj" property="request"/>
          -------------------------------
          -------------------------------
          bean:resource:獲得應用程序的資源,這個資源可以是一個String或從java.io.InputStream中讀入。使用ServletContext.getResource()ServletContext.getResourceAsStream() 方法檢索web應用中的資源,如果在檢索資源時發生問題,就會產生一個ruquest time異常。
          <bean:resource id="webxml" name="/WEB-INF/web.xml"/>
          使用input屬性時,資源會做為一個InputStream,如果不指定就被當成一個String。

          -------------------------------
          -------------------------------
          bean:size:得到存儲在array、collection或map中的數目,類型為java.lang.Integer。
          <bean:size id="count" name="employees" />
          -------------------------------
          -------------------------------
          bean:struts:復制Struct 對象(三種類型)給新的bean,scope為page。
          <bean:struts id="form" formBean="CustomerForm"/>???
          <bean:struts id="fwd" forward="success"/>
          <bean:struts id="map" mapping="/saveCustomer"/>
          -------------------------------
          -------------------------------
          bean:write:以字符串形式輸出bean的屬性值。
          filter屬性:設為true時,將HTML保留字轉換為實體("<" 轉換為 &lt);
          ignore屬性:如果對象不存在,不會拋出異常。
          <bean:write name="userRegistration" property="email" scope="request"/>

          posted @ 2009-07-16 23:13 IT追求者 閱讀(513) | 評論 (0)編輯 收藏

          struts Html標簽使用詳解

          1.html:form 標簽
                 該標簽的用法必須遵循很多規則.
                  (1)首先標簽中必須包含一個action屬性,action屬性是該標簽唯一一個必須的屬性.如果沒有該屬性jsp會拋出一個異常,     之后你必須給
          action屬性一個有效的值,這個值也就是對應struts配置文件(struts-config.xml)中的action標簽中的type屬性值.
                    例如:jsp頁面中有:<html:form action="/login">
                             則struts-config.xml文件中:
                                                                            <action-mapping>
                                                                                  <action type="/login"
                                                                                                type="對應事件處理類的路徑"
                                                                                                name="對應的formbean"
                                                                                                 />
                                                                              </action-mapping>
                 (2)html:form標簽還必須遵循一個規則:
                                      任何包含在<form>中用來接收用戶輸入的標簽(<text>、<password>、<hidden>、<textarea>、<radio>、<checkbox>、<select>
          )必須在相關的form bean中有一個指定的屬性值.例如,如果你有一個屬性值被指定為“username”的<text>標簽,那么相關的form bean中也
          必須有一個名為“username”的屬性。輸入<text>標簽中的值會被用于生成form bean的userName屬性。

          2.html:text標簽
                    html:text標簽是一個生成文本框的標簽,它必須包含一個和form bean的相同屬性的對應的"property"屬性.該標簽只有嵌套在form中才有效.


          3.html:password標簽

                  html:password標簽是用來顯示口令的文本框,它也必須包含一個和form bean的相同屬性對應的"property"屬性,該標簽中的
                   一個很重要的屬性是“redisplay”,它用于重新顯示以前輸入到這個區域中的值。該屬性的缺省值為true。然而,為了
                 使password不能被重新顯示,你或許希望將該屬性的值設為false。
                  例如:<html:password property="password"/>


          4.html:hadden標簽
                    html:hadden是生成一個隱藏的輸入文本區域,它必須包含和相關form bean中的相同屬性對應的“property”屬性。該標簽也必須嵌套在form中才有效.
                    例如:<html:hadden property="value"/>


          5.<html:textarea>標簽 
                  <html:textarea>標簽主要是生成一個文本域,它必須包含和相關form bean中相同屬性對應的"property"屬性.該標簽也必須嵌套在form中才有效.
                  例如:<html:textarea property="content"
                                                    cols="10"
                                                    rows="5"/>

          6.<html:radio>標簽

                      <html:radio>標簽是用于顯示一個單選按鈕.它必須包含"value"值
                     例如:<html:radio property="title" value="1"/>1
                               <html:radio property="title" value="2"/>2
                               <html:radio property="title" value="3"/>3



          7.<html:checkbox>標簽


                  <html:checkbox>標簽用于顯示checkbox類型的輸入區域。比如: <html:checkbox property= 
             "notify">Please send me notification 


          8.<html:submit>標簽

                      <html:submit>標簽是用于提交按鈕.
                      例如:<html:submit value="提交"/>



          9.<html:reset>標簽

                      <html:reset>標簽主要是用于重置按鈕


          10.<html:option>標簽

                         <option>標簽用于顯示select box中的一個選項。參照下面的<select>標簽。 


          11.<html:select>標簽

                          <html:select>標簽主要是用于顯示下拉列表,它也必須嵌套在form中才有效
                          例如:
                                  <html:select  property="color" size="3">
                                                <html:option  value="red">red</html:option>
                                                <html:option value="green">green</html:option>
                                                 <html:option value="blue">blue</html:option>

           




                     



                      








           

          posted @ 2009-07-16 22:00 IT追求者 閱讀(1629) | 評論 (0)編輯 收藏

          2009年7月7日 #

          Ado.net中Connection對象用法

          在ADO.NET對象模型中,Connection對象代表了與數據源之間的連接。.NET框架中有兩個Connection對象:一個是OleDbConnection,用于大多數的數據庫連接,一個是SqlConnection,是MS開發的專門用于針對SQL Server的連接。在創建Connection對象之前,你必須先引用System.Data.OleDb或者System.Data.SqlClient和System.Data三個名空

          1.Sqlserver 的數據庫連接
                  你可以使用Connection對象的屬性來指定數據源的位置及其它參數來連接數據庫。如:SqConnection conn=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;use id=youuserName,password=yourpassword;");
                  

                  這是連接到本地數據庫,如果你想連到網絡上的的數據庫,就要利用集成安全性,同時忽略用戶名和密碼。如:SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

           

          2.Oracle數據庫的連接:(前提:必須先安裝Oracle客戶端實用工具的適當版本,并創建數據庫別名,接著就可以用以下的連接字符串進行連接)

          SqConnection con=new SqlConnection("Provider=MSDAORA;Data Source=dbAlias;User id=yourid,password=youpwd;);

          3.Access數據庫的連接:(你可以使用以下連接字符串來連接)

          SqConnection con=new SqlConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\yourdb.mdb;User id=yourid,password=youpwd;);

          連接到數據庫之后即可調用Connection對象的Open()方法來打開與數據庫的連接,同理Close()方法用來關閉與數據庫的連接。

          連接池:

                連接池是什么?在一個三層結構中,當一個客戶端與中間層服務器進行通訊的時候,服務器會創建一個與數據庫連接,并執行操作的業務對象(也就是與數據庫連接的實例),同時會創建一個Connection對象,在放在一個池中(實際上是一個線程)。當釋放這個實例的時候,此實例便關閉,此時并沒有真正的關閉數據連接,而是將Connection對象標記為關閉后存儲在池中。如果這時再來啟動一個新的業務對象,這時就會檢查現有的連接,如果池中有打開的連接,即使用它,否則再創建一個新連接。

          可能你會覺得很奇怪,如果這樣,那池中不是有很多的對象,豈不是會浪費很多的資源,這個問題的解決方案是你可以設置與數據庫的特定連接時間(默認60秒),如果在這個時間內未被使用,.NET提供就會關閉此連接。

                如何打開連接池?默認情況下是打開的.

                如何關閉連接池?可以使用OleDbConnection.ReleaseConnectionPool()方法來關閉連接池,更或者你可以在OLE DB連接字符串中加上OLE DB Services= - 4;在用SqlConnection對象時可在連接符中加上Pooling=False。這時你再調用Close()時候便會真正地關閉與數據庫的連接。

          (注1:可以使用SQL事件探查器或性能監視器來觀察連接到數據庫中的連接數目,以識別連接是否真正關閉或是只是放入池中。)

          (注2:可以顯式調用Dispose()方法在垃圾收集器回收之前釋放資源,但如果你只是將Connection對象設為NULL的話,是不會斷開與數據源的連接的)

                利用Connection對象來創建Command對象:(ADO.NET中用Command對象來執行數據查詢,更新)例 :

          SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

          using (OleDbCommand cmd=con.CreateCommadn())

          {

                cmd.CommandText="select * from table";

                cmd.ExecuteNonQuery();

          }

          (注:此處使用using 的好處是在進行此次操作后便可釋放資源。)

          利用Connection對象來創建Transaction對象:(Transaction對象是ADO.NET中的事務管理對象)

          例:

          SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

          con.Open();

          OleDbTransaction tran=con.BeginTransaction(); (注:調用此方法會在連接時返回一個新的打開的Transaction對象來進行事務管理)

          (注:事務是指一組單一實體運行的語句,可以確保數據的完整性,防止因系統故障或其它原因而引起的數據丟失。概念很抽象,呵呵,看下去就明白了)

          事務有ACID四個屬性(即原子性,一致性,隔離性,持久性):

          原子性指在執行事務過程中,這個過程要么成功執行,要么不執行。

          一致性指事務前和事務后的數據的一致性,也就是如果事務成功執行的話,系統就返回成功的狀態,即所有數據的改變標記為已完成,如沒完成事務,即回滾,并回到先前的合法狀態。

          隔離性指一個事務內的任何變化都獨立于其它的事務(相對于兩個事務的說法)

          持久性指事務是持續的,也就是事務成功完成后的改變是永久的。

          其他詳細使用可以參照MSDN

          posted @ 2009-07-07 22:42 IT追求者 閱讀(725) | 評論 (0)編輯 收藏

          誰是增值稅改革受益者 [轉]

          稅制改革有利于提高上市公司的經營業績,影響幅度呈逐年上升趨勢;固定資產比例較高企業,受到影響的幅度越大;像寶鋼這樣的大型資本密集型企業將是消費型增值稅制度改革的主要贏家。

          《中央完善社會主義市場經濟體制的決定》(簡稱《決定》)專門提出了改革現行增值稅制度的問題,《決定》指出:“增值稅由生產型改為消費型”,這表明了政府高層決策者決心改革已經試行十年之久的生產型增值稅制度。國家稅務總局的官員已經宣布有關部門正在根據《決定》的精神起草我國的《消費型增值稅條例》,這表明了我國的消費型增值稅制度改革正在緊鑼密鼓地進行。

          但誰是這場稅制改革的受益者?受益程度有多大?這些無疑是投資者非常關心的問題。

          對經營凈利潤的影響

          在不同的增值稅制度下,企業固定資產的成本計價不一樣。

          我國目前實行的是生產型增值稅制度。根據《企業會計制度》的規定,固定資產在取得時應按取得時的成本入賬,取得時的成本包括買價、增值稅費用和其它有關費用(包括運輸費用、非增值稅稅款、保險等),用公式表示就是:固定資產成本=買價+增值稅+其它費用。

          稅制改革后將實行的是消費型增值稅制度。由于購進固定資產的進項增值稅可以抵扣,固定資產的取得成本中就不包含增值稅這一塊。顯然,消費型增值稅制度框架下的固定資產(不動產例外)成本,要低于生產型增值稅制度條件下的固定資產成本。

          到底低多少呢?我們以生產型增值稅制度下的設備類固定資產成本為比較基準,假設所購設備執行基本稅率17%,消費型增值稅制度下固定資產成本的降低幅度為:17%/(1+17%)=15.54%,也就是說,降低幅度在1/7到1/6之間。

          消費型增值稅制度下設備類固定資產成本的降低幅度為15.54%,因此企業每期的設備折舊也相應降低15.54%。從前面的固定資產折舊成本轉移過程來看,設備折舊的降低導致公司當期主營業務成本的降低,從而提高當期的主營業務利潤。由于稅制改革并不提高公司的經營成本(如營銷成本、管理成本、資金成本)和其他業務經營,公司當期的營業利潤也相應提高并最終提高公司的經營凈利潤。

          根據現行《企業所得稅暫行條例》的規定,因折舊成本降低而導致的企業利潤增量也需要繳納企業所得稅,現行企業所得稅稅率為33%,公司每期因設備折舊降低而增加的凈利潤相當于現行會計期內公司設備折舊額的幅度為:15.54%×(1-33%)=10.41%。

          由于企業的凈利潤受多種因素的影響,稅制改革對公司凈利潤的影響幅度沒有一個確定的比例,后面的案例研究能夠提供一種計算方法并能給出鋼鐵行業的受益幅度。

          對經營活動現金凈流量的影響

          在現行的生產型增值稅制度下,公司購買固定資產的進項增值稅不能抵扣,會計上計入固定資產成本,在現金流量表上體現為公司投資活動的現金流出。

          在消費型增值稅制度下購買固定資產的進項增值稅可以抵扣,企業將比在現行生產型增值稅制度下少流出現金,相對來說就是公司現金流量在現有基礎上的增加。

          消費型增值稅制度下固定資產進項增值稅的抵扣可以有兩種方式:一種是在購進當期一次性抵扣,另一種是在增值稅條例規定的年限內分期抵扣。

          從消費型增值稅制度的基本意義來看,固定資產進項增值稅應當在購買當期一次性抵扣,這種一次性抵扣方式對公司最有利,但是企業固定資產的購置往往是少批次大金額,采取一次性抵扣會引起增值稅收入的較大波動,而增值稅是目前最大的一個稅種,對政府財政的穩定性不利,因此未來的消費型增值稅制度的實施細則很可能會采取一種變通的做法,要求企業在一定的年限內分期抵扣。從現金流的折現價值角度來看,分期抵扣方式不如一次性抵扣對企業有利。

          從保守起見,假設新的消費型增值稅制度采取在設備的預計使用期限(即折舊年限)內分期抵扣進項增值稅的抵扣方法。以生產型增值稅制度下公司現金流量為比較基礎,消費型增值稅制度下每期可以抵扣的進項增值稅金額就等于當期的現金流量增量,即公司每期因設備折舊降低而增加的現金流量相當于現行會計期內公司折舊額的15.54%。

          關注受益板塊

          在我國1300多家上市公司中,并不是所有的企業都會受益于本次稅制改革。《上市公司行業分類指引》把上市公司分成13個門類,具體為:農牧業30家、采掘業20家、制造業739家、電煤水業51家、建筑業23家、交通倉儲業55家、信息技術業76家、貿易業96家、金融保險業10家、房地產業45家、社會服務業41家、傳播文化業11家、綜合類81家。按照我國現行的稅制體系,除建筑業、交通倉儲業、金融保險業、房地產業、社會服務業、傳播文化業及綜合類等266家公司征收營業稅而不征收增值稅外,其他1012家上市公司都要征收增值稅,占上市公司總數的79.19%,也就是說,將有大約80%的上市公司收益于消費型增值稅制度改革。

          從全國來看,已有1300多家上市公司,投資者可重點關注下列行業的資本密集型企業:(1)石化行業,如中國石化(600028)、齊魯石化(600002)等;(2)冶金行業,如寶鋼股份(600019)、馬鋼股份(600808)等;(3)電力行業,如長江電力(600900)、上海電力(600021)等;(4)汽車行業,如一汽轎車(000800)、上海汽車(600104)等;(5)機械行業,如中集集團(000039)、廈工股份(600815)等。

          東北板塊誰最受益

          東北工業曾為共和國的經濟建設立下了汗馬功勞,現在中央提出了“振興東北老工業基地”的戰略部署,國家有關部門已經決定在我國東北地區率先進行消費型增值稅制度改革的試點工作,東北企業將會最早享受到稅制改革的好處。

          在東北地區的120多家上市公司中,下列上市公司將會更多地享受到改革帶來的利益:(1)石化行業,如錦州石化(000763);(2)冶金行業,如鞍鋼新軋(000898);(3)電力行業,如龍電股份(600726);(4)汽車行業,如一汽轎車(000800);(5)機械行業,如沈陽機床(000410)。

          按照前面的案例研究思路,以2002年度作為比較基準期,我們同樣可以估算出消費型增值稅制度改革對上述五家公司經營業績的影響幅度。

          消費型增值稅制度改革在其他條件不變的前提下能夠提升上市公司的經營業績,但提升的幅度不一樣。進一步的分析表明,資本物品進項增值稅的抵扣數量是一個絕對值,比較基數越小,影響幅度就越大,因此稅制改革其對基期經營業績較差的上市公司的經營業績影響幅度較大,如錦州石化和沈陽機床。

          案例分析

          寶鋼股份影響程度剖析

          由于兩種增值稅制度的交替,從企業固定資產成本的增值稅構成角度可以把企業的固定資產分成兩種類型,一類是生產型增值稅制度下購置的固定資產,固定資產購進增值稅不能抵扣;另一類是在消費型增值稅制度下新購置的固定資產,其進項增值稅可以抵扣。稅制改革只對新購置的固定資產產生影響。

          本文選取寶鋼股份(600019)作為案例來測算消費型增值稅制度改革對公司經營業績的影響。為了研究的方便,以現行生產型增值稅制度下的經營業績作為比較基礎,并選取2002年度報告的數據作為樣本,測算該公司將在簡單再生產(即經營規模不變)條件下的經營業績增長趨勢。實際上,寶鋼股份是在擴大再生產條件下經營的,因此其實際經營業績增長速度肯定要高于測算出的增長速度。

          在簡單再生產條件下,公司一年的固定資產投資規模等于當年的固定資產折舊金額,即寶鋼股份每年的固定資產投資規模為538,230.40萬元。由于不動產投資不涉及進項增值稅,所以只考慮設備投資,寶鋼股份一年新增設備投資規模為472,336.04萬元,新增設備的進項增值稅含量為:472,336.04/(1+17%)×17% = 68,630.02萬元。

          目前寶鋼股份的設備綜合折舊年限約為12年,則其新增設備的綜合折舊年限亦可視為12年,新增設備的增值稅含量也將在12年內被折舊攤銷,折舊攤銷中的增值稅含量為68,630.02/12 = 5,719.17萬元。

          對經營凈利潤的影響幅度

          在消費型增值稅制度下,由于企業的各項經營成本(如管理費用、營業費用、財務費用等)并不因增值稅制度的改變而變化,一年的所得稅稅前利潤增量在數量上等于新增設備折舊中的增值稅含量,即利潤增量 = 5,719.17萬元。

          由于企業所得稅制度沒有改變,因增值稅制度改變而增加的利潤仍然需要繳納所得稅,則一年的經營凈利潤增量 = 5,719.17×(1-33%)= 3,831.84萬元。

          由于公司每年都在進行設備再投資,在新的稅制條件下,公司每年的經營凈利潤增量隨著時間的推移逐年遞增,設第n年的凈利潤增量為Y(n),則:Y(n)= 3,831.84×n萬元。由于設備綜合折舊年限為12年,則n的最大值等于12。公司2002年度的凈利潤為427,193.24萬元,設第n年的凈利潤增長率為L(n),則:L(n) = Y(n)/427,193.24。

          對寶鋼股份經營活動現金凈流量的影響

          從前面的折舊成本轉移過程分析可知,消費型增值稅制度改革最終通過降低產品銷售成本來提高經營活動現金凈流量,稅制的改革并不影響其他各項經營活動的現金流出,因此一年的經營活動現金流增量等于每年新增設備折舊中包含的進項增值稅含量,即經營活動現金流增量 = 5,719.17萬元。

          由于公司每年都在進行設備再投資,在新的稅制條件下,公司經營活動現金流的增量隨著時間的推移逐年遞增,設第n年的凈利潤增量為M(n),則:M(n)= 5,719.17×n萬元。由于設備綜合折舊年限為12年,則n的最大值等于12。公司2002年度經營活動現金凈流量為1,079,001.12萬元,設第n年的凈現金流增長率為X(n),則:X(n) = M(n)/1,079,001.12。

          從上面的分析可以得出下列基本結論:

          (1)稅制改革有利于提高上市公司的經營業績,影響幅度呈逐年上升趨勢。

          (2)固定資產比例較高企業,受到影響的幅度越大。

          (3)像寶鋼這樣的大型資本密集型企業將是消費型增值稅制度改革的主要贏家。

          鏈接

          由于來自美國等國家的競爭對手并不征收增值稅,現有稅制打擊了我國資本密集型企業的市場競爭力,在加入WTO融入國際經濟大環境的條件下,生產型增值稅制度到了非改不可的時候了。

          增值稅計稅原理

          增值稅制度起源于1918年德國的隆西蒙斯和美國的亞當斯的學說,但增值稅真正得到歐洲各國政府廣泛的重視是在二十世紀六十年代初。1962年,歐洲經濟共同體的紐馬克委員會建議所有歐共體成員國都采用增值稅作為統一的產品銷售稅形式,但美國卻至今尚未推行這一稅種。

          增值稅是對商品生產和流通中各環節新增加價值(即增值額)進行征稅,由于新增價值在商品流通過程中是一個難以準確計算的數據,因此實際操作中常采用一種抵扣計算法:納稅義務人根據產品銷售額按照規定的稅率計算銷項增值稅額,然后從中扣除購買原材料和/或資本品時已經繳納的進項增值稅額,計算公式為:應納增值稅額=銷項增值稅額–進項增值稅額。這種計算方法同樣體現了對產品銷售中的新增價值進行征稅的原則。

          在實行增值稅的半個多世紀里,不同的國家根據其國情選擇具體的計稅制度,已經形成了多種比較系統和成熟的計稅制度,但常用的增值稅計稅制度只有三種:第一種是生產型增值稅,廠商以其產品和勞務的銷售收入數額減去其當期購入的用于生產的中間性產品和勞務支出的數額(廠房、機器、設備等資本品的折舊不予扣除)作為增值額,并據以課稅。第二種是消費型增值稅,其計稅依據是在生產型增值稅的基礎上,再扣除同期購入的資本品價值得出應稅增值額,即從廠商的產品銷售收入中除其當期購入的所有中間性產品和勞務支出外,還要再扣除資本品支出。第三種是收入型增值稅,其計稅依據是廠商以其產品和應稅勞務的銷售收入先減去用于生產該產品的中間性產品和勞務支出,再減去固定資產折舊后的余額作為增值額,并據以課稅。

          生產型和消費型兩種計稅制度的區別是進項增值稅的抵扣不一樣,生產型增值稅的進項增值稅額是指納稅人當期購進用于產品生產的原材料或接受應稅勞務所支付的增值稅額,消費型增值稅的進項增值稅額不僅包含納稅人購進原材料或接受應稅勞務所支付的增值稅額,還包括納稅人購進固定資產等資本品所支付的增值稅額,兩種稅制的差異就在購進資本品所支付的增值稅額的處理上。很顯然,對于同一個企業,生產型增值稅的實際稅負要大于消費型增值稅的稅負,從生產型增值稅改變為消費型增值稅的稅制改革的本質就是增值稅應稅企業的稅務降低。

          我國的生產型增值稅制度

          我國從1979年開始增值稅試點,1994年的稅制改革全面推行了增值稅,使之成為我國稅制結構中占據第一位的主體稅種。1993年12月13日,國務院以第134號令發布的《中華人民共和國增值稅暫行條例》成為我國增值稅征收的基本規范,隨后(當年12月25日)財政部以[93]第038號文發布的《中華人民共和國增值稅暫行條例實施細則》作為稅務部門征收增值稅的工作指南。

          根據《增值稅暫行條例》的規定,凡在中國境內銷售貨物或者提供加工、修理修配、勞務,以及進口貨物的單位和個人,為增值稅的納稅義務人。我國增值稅征收采取了兩檔稅率,即17%的基本稅率和13%的低稅率。低稅率只適用于某些特定的貨物(如糧食、食用植物油、自來水、書報、農藥等,詳見有關增值稅法規)及國務院規定的貨物,其它貨物一律適用基本稅率。

          目前,我國增值稅的計算采用抵扣計算法:應納增值稅額=當期銷項增值稅額–當期進項增值稅額。其中,“當期銷項增值稅額”是指納稅義務人在一定納稅期限內銷售貨物(或應稅勞務)所收到的增值稅,它在數量上等于納稅期限內的銷售收入乘以增值稅率。“當期進項增值稅”是指納稅義務人在同期采購原材料(或應稅勞務)時已經支付的增值稅,它在數量上等于納稅期限內的貨物買價乘以增值稅率。值得注意的是:現行《增值稅暫行條例》特別規定“購進固定資產的進項增值稅額不得從銷項增值稅額中抵扣”,并把“固定資產”嚴格限制為兩類資產,一是使用期限超過1年的機器、機械、運輸工具以及其它與生產經營有關的設備、工具、器具,二是單位價值在2000元以上并且使用年限超過2年的不屬于生產經營主要設備的物品。《增值稅暫行條例》規定的不得抵扣進項稅額的購進固定資產的范圍比現行《企業會計制度》規定的固定資產范圍要小一些,主要是不包括不動產(如房屋、建筑物等),因為我國現行稅法體系規定不動產銷售繳納營業稅,不繳納增值稅,不動產銷售沒有進項增值稅可以抵扣。

          是否抵扣固定資產進項增值稅是劃分生產型增值稅和消費型增值稅的根本標準。由于現行《增值稅暫行條例》明確規定固定資產進項增值稅不得抵扣,因此我國現行的增值稅制度是一種典型的生產型增值稅。

          改革生產型增值稅制度的原因

          現行生產型增值稅制度導致資本密集型應稅企業的實際稅負很重。產品的銷售成本由三塊組成:原材料轉移成本、固定資產折舊轉移成本和生產工資成本,根據現行《增值稅暫行條例》規定的計算方法,產品銷售的增值額等于銷售收入(主營業務收入)減去原材料轉移成本,也就是說產品的折舊成本和工資成本在這里作為企業銷售產品的增值額而需要繳納增值稅。企業實際得到的毛利潤等于產品的銷售收入減去產品銷售成本。很顯然,應稅增值額大于企業的毛利潤。折舊成本和工資成本的比例越大,其差異也越大,企業所得到的毛利潤的實際稅負就越重。這種生產型增值稅制度導致資本密集型企業的毛利潤承擔偏高的稅負,資本密集度越高,毛利潤的實際稅負越重。

          然而來自美國等國家的競爭對手并不征收增值稅,因此這種稅制打擊了我國資本密集型企業的市場競爭力,在加入WTO融入國際經濟大環境的條件下,生產型增值稅制度到了非改不可的時候了。 (艾西南 尹中立)
          轉自:http://www.china.org.cn/chinese/OP-c/490416.htm

          posted @ 2009-07-07 22:21 IT追求者 閱讀(156) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 伊宁县| 乐东| 遂川县| 宁夏| 正安县| 射阳县| 贵定县| 绥化市| 奉新县| 新丰县| 视频| 尚志市| 漠河县| 扎赉特旗| 德清县| 游戏| 江达县| 文昌市| 乐安县| 郎溪县| 威宁| 宜阳县| 昌图县| 贺兰县| 山东省| 扶风县| 邹平县| 车险| 抚顺县| 旺苍县| 聂拉木县| 宜春市| 台山市| 九龙县| 北安市| 辽宁省| 奉贤区| 磐安县| 临江市| 凉山| 江油市|