软件编程
位置:首页>> 软件编程>> java编程>> 新的Java访问mysql数据库工具类的操作代码

新的Java访问mysql数据库工具类的操作代码

作者:popozyl  发布时间:2023-04-05 16:54:58 

标签:Java,mysql,数据库,工具类

这是之前软工课设我写的java访问mysql工具类,它经过了多轮的测试,应该能够适应大多数的操作需求。比之前大二写的更鲁棒,更易用。


package util;

import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JOptionPane;

public class JdbcUtilV2 {
   /**
    * 定义需要的变量
    */
   private static Connection connection = null;
   /**
    * 在大多情况下,我们使用的是PrepardStatement 来代替Statement
    * 这样可以防止sql注入
    */
   private static PreparedStatement preparedStatement = null;
   private static ResultSet resultSet = null;

/**
    * 连接数据库参数
    */
   private static String username = "";
   private static String password = "";
   private static String driver = "";
   private static String url = "";

/**
    * 加载驱动,只需一次
    */
   public JdbcUtilV2(String dr, String ur,String user, String passwd) {
       try {
       username = user;
       password = passwd;
           driver = dr;
           url = ur;
           Class.forName(driver);
       } catch (Exception e) {
           System.err.println("连接失败,请检查连接参数");
           e.printStackTrace();
       }
   }

/**
    * 获取数据库连接
    *
    * @return 返回Connection
    */
   private static Connection getConnection() {
       try {
           connection = DriverManager.getConnection(url, username, password);
       } catch (Exception e) {
       JOptionPane.showConfirmDialog(null , "获取连接失败,请检查网络是否连通", "系统消息", JOptionPane.CLOSED_OPTION);
           e.printStackTrace();
       }
       return connection;
   }

/**
    *  查询表
    *  @return 返回查询结果的List
    */

public ArrayList<HashMap<String, Object>> query(String sql, Object ...params){
       try {
           connection = getConnection();
           preparedStatement = connection.prepareStatement(sql);
           setPreparedStatement(params);
           resultSet = preparedStatement.executeQuery();
           ResultSetMetaData metaData = resultSet.getMetaData(); // key name
           int columnCount = metaData.getColumnCount(); // column count

ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
           while(resultSet.next()) {
           HashMap<String, Object> rowData = new HashMap<String, Object>();
           for(int i = 1; i <= columnCount; ++i) {
           rowData.put(metaData.getColumnName(i), resultSet.getObject(i));
           }
           list.add(rowData);
           }
           return list;
       }catch (Exception e){
           System.err.println("查询失败!");
           e.printStackTrace();
       } finally {
           close();
       }
       return null;
   }

public boolean exists(String sql, Object ...params) {
       try {
           connection = getConnection();
           preparedStatement = connection.prepareStatement(sql);
           setPreparedStatement(params);
           resultSet = preparedStatement.executeQuery();
           return resultSet.next();
       }catch (Exception e){
           System.err.println("查询失败!");
           e.printStackTrace();
       } finally {
           close();
       }
       return false;
   }
   /**
    * 可处理insert/delete/update语句
    * @param sql sql语句
    * @param params 占位符参数数组
    * @return 返回bool值,表示是否成功
    */
   public boolean execute(String sql, Object ...params){
       try {
           //获取连接
           connection = getConnection();
           preparedStatement = connection.prepareStatement(sql);
           //对占位符进行赋值
           setPreparedStatement(params);
           //提交sql
           preparedStatement.executeUpdate();
           return true;
       } catch (Exception e){
           System.err.println("表更新失败!");
           e.printStackTrace();
       } finally {
           close();
       }
       return false;
   }

public void executeVoidProc(String sql, Object ...params){
       try {
           //获取连接
           connection = getConnection();
           preparedStatement = connection.prepareStatement(sql);
           //对sql中的占位符进行赋值
           setPreparedStatement(params);

preparedStatement.execute();
       }catch (Exception e){
           System.err.println("查询失败!");
           e.printStackTrace();
       } finally {
           close();
       }
   }
   /**
    * 对sql语句中的占位符进行赋值
    * @param params 参数值
    * @throws SQLException sql异常
    */
   private void setPreparedStatement(Object ... params) throws SQLException {
       if(params != null && params.length > 0){
           for(int i = 0; i < params.length; i++){
               if("null".equals(params[i])){
                   preparedStatement.setNull(i + 1, Types.NULL);
               }else{
                   preparedStatement.setObject(i + 1, params[i]);
               }
           }
       }
   }

/**
    * 关闭资源的函数
    */
   private void close() {
       if(resultSet != null) {
           try {
               resultSet.close();
           } catch (Exception e) {
               e.printStackTrace();
           }
           resultSet = null;
       }
       if(preparedStatement != null) {
           try {
               preparedStatement.close();
           } catch (Exception e) {
               e.printStackTrace();
           }
           preparedStatement = null;
       }
       if(connection != null) {
           try {
               connection.close();
           } catch (Exception e) {
               e.printStackTrace();
           }
           connection = null;
       }
   }

}

来源:https://www.cnblogs.com/popodynasty/p/15670452.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com