Database.java
上传用户:junmaots
上传日期:2022-07-09
资源大小:2450k
文件大小:4k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. /*
  2.  * Created on 2005-11-6
  3.  *
  4.  * TODO To change the template for this generated file go to
  5.  * Window - Preferences - Java - Code Style - Code Templates
  6.  */
  7. package com.mycompany.database;
  8. import java.sql.Connection;
  9. import java.sql.DriverManager;
  10. import java.sql.SQLException;
  11. import java.util.Enumeration;
  12. import java.util.Hashtable;
  13. import java.util.PropertyResourceBundle;
  14. import javax.naming.Context;
  15. import javax.naming.InitialContext;
  16. import javax.naming.NamingException;
  17. import javax.sql.DataSource;
  18. /**
  19.  * @author Administrator
  20.  * 
  21.  * TODO To change the template for this generated type comment go to Window -
  22.  * Preferences - Java - Code Style - Code Templates
  23.  */
  24. public class Database {
  25. /**
  26.  * 数据库访问URL
  27.  */
  28. private static String url;
  29. /**
  30.  * 数据库驱动
  31.  */
  32. private static String driver;
  33. /**
  34.  * 数据库访问用户名
  35.  */
  36. private static String username;
  37. /**
  38.  * 数据库访问口令
  39.  */
  40. private static String password;
  41. /**
  42.  * 访问类型
  43.  */
  44. private static String type;
  45. /**
  46.  * 数据源名称
  47.  */
  48. private static String datasource;
  49. /**
  50.  * 配置文件名称
  51.  */
  52. private final static String fileName = "database";
  53. private static ThreadLocal connection = new ThreadLocal();
  54. static {
  55. config();
  56. }
  57. private static void config() {
  58. //读取系统配置
  59. PropertyResourceBundle resourceBundle = (PropertyResourceBundle) PropertyResourceBundle
  60. .getBundle(fileName);
  61. //将系统设置赋值给类变量
  62. Enumeration enu = resourceBundle.getKeys();
  63. while (enu.hasMoreElements()) {
  64. String propertyName = enu.nextElement().toString();
  65. if (propertyName.equals("database.url"))
  66. url = resourceBundle.getString("database.url");
  67. if (propertyName.equals("database.driver"))
  68. driver = resourceBundle.getString("database.driver");
  69. if (propertyName.equals("database.username"))
  70. username = resourceBundle.getString("database.username");
  71. if (propertyName.equals("database.password"))
  72. password = resourceBundle.getString("database.password");
  73. if (propertyName.equals("database.type"))
  74. type = resourceBundle.getString("database.type");
  75. if (propertyName.equals("database.datasource"))
  76. datasource = resourceBundle.getString("database.datasource");
  77. }
  78. }
  79. /**
  80.  * 取得数据库连接
  81.  * @return
  82.  * @throws SQLException
  83.  */
  84. public synchronized static java.sql.Connection getConnection()
  85. throws SQLException {
  86. Connection con = (Connection) connection.get();
  87. if (con != null && !con.isClosed()) {
  88. return con;
  89. }
  90. if ("pooled".equalsIgnoreCase(type)) {
  91. //从JNDI中取得数据源
  92. try {
  93. //此处对于不同的应用服务器,对env传入不同
  94. Hashtable env = new Hashtable();
  95. //此处对于不同的应用服务器,对env传入不同
  96. Context ctx = new InitialContext(env); // 从命名系统中获取 DataSource 工厂对象
  97. DataSource dataSource = (DataSource) ctx.lookup(datasource);
  98. con= dataSource.getConnection();
  99. connection.set(con);
  100. return con;
  101. } catch (NamingException e) {
  102. e.printStackTrace();
  103. }
  104. } else {
  105. //直接使用JDBC驱动连接
  106. try {
  107. Class providerClass = Class.forName(driver);
  108. con = DriverManager.getConnection(url, username,
  109. password);
  110. con.setAutoCommit(false);
  111. connection.set(con);
  112. return con;
  113. } catch (ClassNotFoundException e) {
  114. e.printStackTrace();
  115. }
  116. }
  117. return null;
  118. }
  119. public static void commit() {
  120. Connection con = (Connection) connection.get();
  121. try {
  122. con.commit();
  123. } catch (SQLException e) {
  124. e.printStackTrace();
  125. }
  126. }
  127. public static void rollback() {
  128. Connection con = (Connection) connection.get();
  129. try {
  130. con.rollback();
  131. } catch (SQLException e) {
  132. e.printStackTrace();
  133. }
  134. }
  135. public synchronized static void releaseConnection(Connection connection) {
  136. try {
  137. if (connection != null && !connection.isClosed())
  138. connection.close();
  139. } catch (SQLException e) {
  140. // TODO Auto-generated catch block
  141. e.printStackTrace();
  142. }
  143. connection = null;
  144. }
  145. public static void main(String[] args) {
  146. try {
  147. Database.getConnection();
  148. } catch (SQLException e) {
  149. // TODO Auto-generated catch block
  150. e.printStackTrace();
  151. }
  152. }
  153. }