JDBC连接数据库

2019-07-31 18:37:50 浏览数 (1)

代码语言:javascript复制
/*
 * 功能:这个直接对数据库操作的工具类
 * 作者:施爷
 * 时间:2017-3-17
 * 
 */
package com.shi.util;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Properties; //这个包不要导错了 不然会出现pp.load();没这个放法


public class SQLHellp {
	
	//定义需要的变量
	private Connection ct=null;
	private PreparedStatement ps=null;
	private ResultSet rs=null;
	private String driver=null;
	private String url="";
	private String user="";
	private String password="";
	private Properties pp=null;
	private FileInputStream fis=null;
	private InputStream is=null;
	
	//用于快速读取文件 以即加载驱动 的 方法
	public void Driver(){		
		try {
			//读取配置文件
			pp=new Properties();	
			//这是类加载器的方式   尽量使用类加载器的方法加载驱动
			is=SQLHellp.class.getClassLoader().getResourceAsStream("com/shi/util/dbinfo.properties");
			//fis=new FileInputStream("dbinfo.properties");
			pp.load(is);
			driver=pp.getProperty("driver");
			url=pp.getProperty("url");
			user=pp.getProperty("user");
			password=pp.getProperty("password");
			
			//加载驱动
			Class.forName(driver);
			//System.out.println("加载驱动成功");

		} catch (Exception e) {			
			e.printStackTrace();
		}finally{
			try {
				//fis.close();
				is.close();
			} catch (IOException e) {			
				e.printStackTrace();
			}
			//fis=null;//再次让系统回收
			is=null;
		}				
	}
	
	//得到连接的方法
	public Connection getConnection(){
		try {
			ct=DriverManager.getConnection(url,user,password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return ct;
	}
	
	//查询方法
	public ArrayList executeQuery(String sql,String [] preparments){
		ArrayList al=new ArrayList();
		//1加载驱动
		this.Driver();
		//2得到连接
		ct=this.getConnection();
		//System.out.println("得到连接成功");
		try {
			ps=ct.prepareStatement(sql);
			//System.out.println("准备成功");
			//循环的给变量赋值
			if(preparments!=null){
				for(int i=0;i<preparments.length;i  ){
					ps.setString(i 1, preparments[i]);
				}
			}
			//执行查询 得到结果
			rs=ps.executeQuery();
			
			//对结果集进行二次封装
			ResultSetMetaData rsmd=rs.getMetaData();
			int count=rsmd.getColumnCount();//这里你可以得到你查询的语句中有几列			
			while(rs.next()){
				Object[] ob=new Object[count];//做一个对象数组 把一行数据封装到一个对象数组中
				for(int i=0;i<count;i  ){
					ob[i] = rs.getObject(i 1);
				}
				//System.out.println("sqlhellp.name" ob[1].toString());
				al.add(ob);
			}						
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			//关闭资源
			this.Close(ct, ps, rs);
		}
		return al;
	}
	
	//增,删,改,方法
	public Boolean executeUpdate(String sql,String [] preparments){
		boolean b= true; //默认是成功的  
		//1加载驱动
		this.Driver();
		//2得到连接
		ct=this.getConnection();		
		try {
			//准备  给参数赋值 
			ps=ct.prepareStatement(sql);
			for(int i=0;i<preparments.length;i  ){
				ps.setString(i 1, preparments[i]);				
			}
			//执行 
			ps.executeUpdate();
					
		} catch (SQLException e) {
			b=false;			
			e.printStackTrace();
		}finally{
			this.Close(ct, ps, rs);			
		}		
		return b;
	}
	
	//关闭资源
	public void Close(Connection ct,Statement ps,ResultSet rs){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {				
				e.printStackTrace();
			}
			rs=null;
		}
		if(ps!=null){
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			ps=null;//再次让系统回收
		}
		if(ct!=null){
			try {
				ct.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			ct=null;//再次让系统回收
		}
		
	}
	
}

配置文件 dbinfo.properties

代码语言:javascript复制
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/users?useUnicode=true&amp;characterEncoding=utf-8
user=root
password=123456

0 人点赞