在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!!
一、数据库的连接,常用的方式有直接将那些要连接的参数放到java类中、将连接参数放到Properties文件中或者放到XML文件中,下面一一为大家描述
1、直接连接:
普通的配置方式
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/xinyuandb";
String username="root";
String password="123456";
conn=DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
2、通过Properties文件创建连接,好处,很灵活,不用在代码里面进行更改
创建jdbc.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://127.0.0.1\:3306/xinyuandb
username=root
password=123456
从properties文件中读取 public static Connection getConnection(){ Connection conn=null; Properties p=new Properties(); try { //从当前线程加载 p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties")); Class.forName(p.getProperty("driver")); conn=DriverManager.getConnection(p.getProperty("url"), p.getProperty("username"), p.getProperty("password")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } 3、通过XML文件读取 创建jdbc.xml文件 <?xml version="1.0" encoding="UTF-8"?> <config> <jdbc-config> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://127.0.0.1:3306/xinyuandb</url> <username>root</username> <password>123456</password> </jdbc-config> </config> 创建javaBean类 package com.common.db; public class JdbcBean { private String driver; private String url; private String username; private String password; public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 创建XML解析类
package com.common.db; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlConfigReader { private static XmlConfigReader instance; private JdbcBean bean=null; //调用构造函数进行XML文件解析 private XmlConfigReader(){ SAXReader reader=new SAXReader(); try { Document doc=reader.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.xml")); Element root=doc.getRootElement(); Element first=root.element("jdbc-config"); String driver=first.element("driver").getText(); String url=first.element("url").getText(); String username=first.element("username").getText(); String password=first.element("password").getText(); bean=new JdbcBean(); bean.setDriver(driver); bean.setUrl(url); bean.setUsername(username); bean.setPassword(password); } catch (DocumentException e) { e.printStackTrace(); } } public synchronized static XmlConfigReader getInstance(){ if(instance==null){ instance=new XmlConfigReader(); } return instance; } public JdbcBean getJdbeanBean(){ return bean; } }
// 从XML文件中读取配置取得同一Connection
// static Connection conn=null;
// static{
// JdbcBean jdbc=XmlConfigReader.getInstance().getJdbeanBean();
// try {
// Class.forName(jdbc.getDriver());
// conn=DriverManager.getConnection(jdbc.getUrl(), jdbc.getUsername(),jdbc.getPassword());
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
//从XML文件中读取配置
public static Connection getConnection(){
Connection conn=null;
JdbcBean jdbc=XmlConfigReader.getInstance().getJdbeanBean();
try {
Class.forName(jdbc.getDriver());
conn=DriverManager.getConnection(jdbc.getUrl(), jdbc.getUsername(),jdbc.getPassword());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
有时候我们想取得Connection的单实例,又不会影响到其安全性,我们可以通过线程ThreadLocal来对Connection进行管理:package com.common.db; import java.sql.Connection; /** * 线程管理 * @author Administrator * */ public class ConnectionManager { //使用线程变量对Connection进行管理 private static ThreadLocal<Connection> local=new ThreadLocal<Connection>(); public static Connection getConnection(){ Connection conn=local.get(); if(conn==null){ conn=DbUtil.getConnection(); local.set(conn); } return conn; } public static void main(String[] args) { Connection conn1=ConnectionManager.getConnection(); Connection conn2=ConnectionManager.getConnection(); Connection conn3=DbUtil.getConnection(); Connection conn4=DbUtil.getConnection(); System.out.println(conn1==conn2);//true System.out.println(conn3==conn4);//false } }
这样,数据库操作的公共类基本上实现了,大家在项目中就可以进行调用了,当然,还有一些基本的流的关闭和事物的处理,代码如下:public static void close(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Statement pstmt) { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(ResultSet rs ) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void beginTransaction(Connection conn) { try { if (conn != null) { if (conn.getAutoCommit()) { conn.setAutoCommit(false); //手动提交 } } }catch(SQLException e) {} } public static void commitTransaction(Connection conn) { try { if (conn != null) { if (!conn.getAutoCommit()) { conn.commit(); } } }catch(SQLException e) {} } public static void rollbackTransaction(Connection conn) { try { if (conn != null) { if (!conn.getAutoCommit()) { conn.rollback(); } } }catch(SQLException e) {} } public static void resetConnection(Connection conn) { try { if (conn != null) { if (conn.getAutoCommit()) { conn.setAutoCommit(false); }else { conn.setAutoCommit(true); } } }catch(SQLException e) {} }