数据库连接、释放连接、查询数据库、存入数据库

关于数据库连接、释放连接、查询数据库、存入数据库的问题,估计让很多人头大了吧,下面我用一个JDBC来完成这些,之后大家直接调用方法就好。废话不多说,直接上代码:

package com.TestServer.JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public final class Jdbc {

    private static String url = "jdbc:mysql://localhost/test";
    private static String user = "root";
    private static String password = "root";

    private Jdbc() {
    }

    static {
        try {
            // 加载驱动
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    // 连接数据库
    public static Connection getCn() {
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    // 释放连接 关闭结果集对象 关闭预编译对象 关闭数据库连接
    public static void free(ResultSet rs, Statement sm, Connection con) {
        try {
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (sm != null)
                    sm.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    if (con != null)
                        con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    // 查询数据库
    // select
    public static List readDB(String sql, Object[] params) {
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        try {
            con = Jdbc.getCn();
            ps = con.prepareStatement(sql);
            //传入“pstmt.setString(1,var1);”值 
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    ps.setObject(i + 1, params[i]);
                }
            }
            // 执行查询
            rs = ps.executeQuery();

            java.sql.ResultSetMetaData rsmd = rs.getMetaData();// 获取表结构
            int count = rsmd.getColumnCount();// 从表结构里得到列数
            String[] columnName = new String[count];
            for (int i = 0; i < count; i++) {
                // System.out.println(rsmd.getColumnName(i+1));
                // System.out.println(rsmd.getColumnTypeName(i+1));
                columnName[i] = rsmd.getColumnName(i + 1);
            }
            while (rs.next()) {
                HashMap<String, Object> map = new HashMap<String, Object>();
                for (int i = 0; i < count; i++) {
                    map.put(columnName[i], rs.getObject(i + 1));
                }
                list.add(map);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Jdbc.free(rs, ps, con);
        }
        return list;
    }

    // 存入数据库
    // insert,update,delete
    public static int writeDB(String sql, Object[] params) {
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int row = 0;
        try {
            con = Jdbc.getCn();
            ps = con.prepareStatement(sql);

            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    ps.setObject(i + 1, params[i]);
                }
            }
            row = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Jdbc.free(rs, ps, con);
        }
        return row;
    }
}

拿走不谢,不明白请留言!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值