前言:因为这些文件大部分可以说是固定这样写的,所以我干脆发布在网页上,以后方便copy (〃'▽'〃)

数据库连接与关闭util类(DatabaseUtil.java)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* 数据库连接与关闭util类。
* 
* @author RainySeason:https://xun.moe
*/
public class DatabaseUtil {
  /**
   * 这个类需要自己导入 ConfigManager.getProperty(); 其中ConfigManager是自定义的类;
   * getProperty()是其中ConfigManager类的方法
   */
  private static String driver = ConfigManager.getProperty("driver");// 数据库驱动字符串
  private static String url = ConfigManager.getProperty("url");// 连接URL字符串
  private static String user = ConfigManager.getProperty("user"); // 数据库用户名
  private static String password = ConfigManager.getProperty("password"); // 用户密码

  protected Connection connection;

  static {
    try {
      Class.forName(driver);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }

  /**
   * 获取数据库连接对象。
   */
  public static Connection getConnection() throws SQLException {
    Connection connection = null;
    // 获取连接并捕获异常
    try {
      if (connection == null || connection.isClosed())
        connection = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
      e.printStackTrace();
      throw e;
    }
    return connection;// 返回连接对象
  }

  /**
   * 关闭数据库连接。
   *
   * @param connection
   *            数据库连接
   * @param statement
   *            Statement对象
   * @param resultSet
   *            结果集
   */
  public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {
    // 若结果集对象不为空,则关闭
    try {
      if (resultSet != null && !resultSet.isClosed())
        resultSet.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
    // 若Statement对象不为空,则关闭
    try {
      if (statement != null && !statement.isClosed())
        statement.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
    // 若数据库连接对象不为空,则关闭
    try {
      if (connection != null && !connection.isClosed())
        connection.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

 

增删改查操作DAO类(BaseDao.java)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 增删改查DAO类
 * 
 * @author RainySeason:https://xun.moe
 */
public class BaseDao {
  private Connection connection;

  /**
   * 构造方法注入连接对象
   * 
   * @param connection
   */
  public BaseDao(Connection connection) {
    this.connection = connection;
  }

  /**
   * 增、删、改操作
   *
   * @param sql
   *            sql语句
   * @param params
   *            参数数组
   * @return 执行结果
   */
  protected int executeUpdate(String sql, Object... params) throws SQLException {
    int result = 0;
    PreparedStatement preparedStatement = null;
    try {
      preparedStatement = connection.prepareStatement(sql);
      for (int i = 0; i < params.length; i++) {
        preparedStatement.setObject(i + 1, params[i]);
      }
      result = preparedStatement.executeUpdate();
    } catch (SQLException e) {
      e.printStackTrace();
      throw e;
    } finally {
      DatabaseUtil.closeAll(null, preparedStatement, null);
    }
    return result;
  }

  /**
   * 查询操作
   *
   * @param sql
   *            sql语句
   * @param params
   *            参数数组
   * @return 查询结果集
   */
  protected ResultSet executeQuery(String sql, Object... params) throws SQLException {
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    try {
      preparedStatement = connection.prepareStatement(sql);
      for (int i = 0; i < params.length; i++) {
        preparedStatement.setObject(i + 1, params[i]);
      }
      resultSet = preparedStatement.executeQuery();
    } catch (SQLException e) {
      e.printStackTrace();
      throw e;
    }
    return resultSet;
  }
}

 

数据库连接配置文件读取类(ConfigManager.java)

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 数据库参数配置文件读取,与BaseDao.java对应
 * @author RainySeason:https://xun.moe
 */
public class ConfigManager {
    private static Properties properties = null;

    static {
        InputStream inputStream = null;
        inputStream = ConfigManager.class.getClassLoader().getResourceAsStream(
                "database.properties");
        if (inputStream == null)
            throw new RuntimeException("找不到数据库参数配置文件!");
        properties = new Properties();
        try {
            properties.load(inputStream);
        } catch (IOException e) {
            throw new RuntimeException("数据库配置参数加载错误!", e);
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static String getProperty(String key) {
        return properties.getProperty(key);
    }
}

数据库连接配置文件(database.properties)

# @author RaingSeason
# @author RainySeason:https://xun.moe
###     MySql数据库驱动连接配置模板     ###

#	数据库驱动字符串driver
driver=com.mysql.jdbc.Driver

#	连接URL字符串 
#	如果输出有错误提示:
#	"WARN: Establishing SSL connection without server's identity verification is not recommended...."
#	解决方法关闭SSL连接,在数据库名称后面追加 把下面?后面替换为这个:?useSSL=false&useUnicode=true&characterEncoding=UTF-8
#	localhost:3306 "localhost"表示本地主机与其相对应的IP地址为127.0.0.1(IPv4)和[::1](IPv6)
#	3306表示连接的端口
url=jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=UTF-8

#	数据库用户名user
user=

#	数据库用户名密码password
password=
#下面是其他一些参数,可根据实际情况修改使用
#连接池最大数量   
##maxActive=9000  
#连接池最大空闲  
##maxIdle=1000  
#连接池最小空闲  
##minIdle=1  
#初始化连接大小  
##initialSize=3  
#获取连接最大等待时间   
##jmaxWait=9000  
#用来验证数据库连接的有效性  
##validationQuery=select 1  

 

context.xml文件方式连接数据库

<Context>
<Resource  
    name="jdbc/"<!--name="jdbc/自定义名称"-->  
    auth="Container"  
    type="javax.sql.DataSource"  
    driverClassName="com.mysql.jdbc.Driver"  
    <!--bbs_message 这个请修改为你所使用的数据库名称--> 
    url="jdbc:mysql://127.0.0.1:3306/bbs_message?useUnicode=true&amp;characterEncoding=utf-8"  
    <!--数据库账户-->
    username="root"
    <!--数据库密码-->  
    password="yuyuko"
    <!--最大活动连接数-->
    maxActive="20"  
    <!--最大空闲连接数-->
    maxIdle="10"  
    <!--最大空闲状态连接时间(以毫秒为单位)-->
    maxWait="10000" />
</Context>

 

BaseDao连接部分作出修改

//获取连接
protected void openConnection(){
    try {
      Context ctx = new InitialContext();
      DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Message");//这里和上面context.xml里面name后面那个一致
      con = ds.getConnection();
    } catch (NamingException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }
}

 

日志文件(log4j.properties)

# @author RaingSeason
# @author RainySeason:https://xun.moe
###     设置Logger输出级别和输出目的地      ###
log4j.rootLogger = debug, stdout,logfile
 
###     把日志信息输出到控制台     ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
 
 
###     把日志信息输出到文件:debug.log    ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=debug.log
log4j.appender.logfile.Threshold = debug 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%c %d{yyyy-MM-dd HH:mm:ss}%l %F %p %m%n

JAR包下载

java连接mysql数据库所需的jar包

log4j日志jar包


蒲公英的奇迹 夏天的雪花