package com.mingrisoft.dao;

import java.sql.Connection;						//表示连接到某个数据库的连接
import java.sql.DriverManager;					//用来获取数据库连接
import java.sql.PreparedStatement;				//用来执行SQL语句
import java.sql.ResultSet;						//封装查询结果集
import java.sql.SQLException;					//异常处理类


public class DB {
	private Connection con;							//声明一个Connection对象
	private PreparedStatement pstm;					//声明一个PreparedStatement对象
	private String user="sa";						//登录数据库的默认用户名
	private String password="";						//登录数据库的密码
	private String className="com.microsoft.sqlserver.jdbc.SQLServerDriver";		//数据库驱动类路径
	private String url="jdbc:sqlserver://localhost:1433;DatabaseName=db_CityInfo";	//数据库URL
	
	public DB(){									//DB类的构造方法
		try{										//必须使用try-catch语句捕获加载数据库驱动时可能发生的异常
			Class.forName(className);				//加载数据库驱动
		}catch(ClassNotFoundException e){			//捕获ClassNotFoundException异常
			System.out.println("加载数据库驱动失败！");
			e.printStackTrace();					//输出异常信息
		}
	}


	/**创建数据库连接*/
	public Connection getCon(){
		try {
			con=DriverManager.getConnection(url,user,password);	//建立连接，连接到由属性url指定的数据库URL，
															//并指定登录数据库的用户名和密码
		} catch (SQLException e) {
			System.out.println("创建数据库连接失败！");
			con=null;
			e.printStackTrace();
		}
		return con;
	}

	
	public void doPstm(String sql,Object[] params){
		if(sql!=null&&!sql.equals("")){
			if(params==null)params=new Object[0];
			getCon();											//调用getCon()方法获取数据库连接
			if(con!=null){
				try{
					pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,
												ResultSet.CONCUR_READ_ONLY);
					for(int i=0;i<params.length;i++){
						pstm.setObject(i+1,params[i]);
					}
					pstm.execute();							//执行SQL语句
				}catch(SQLException e){
					System.out.println("doPstm()方法出错！");
					e.printStackTrace();						//输出错误信息
				}
			}
		}
	}

	
	public ResultSet getRs() throws SQLException{
		return pstm.getResultSet();			//调用PreparedStatement类对象的getResultSet()方法返回ResultSet对象
	}

	public int getCount() throws SQLException{
		return pstm.getUpdateCount();		//调用PreparedStatement类对象的getResultSet()方法返回影响的记录数
	}

	public void closed(){
		try{
			if(pstm!=null)
				pstm.close();			
		}catch(SQLException e){
			System.out.println("关闭pstm对象失败！");
			e.printStackTrace();
		}
		try{
			if(con!=null){
				con.close();
			}
		}catch(SQLException e){
			System.out.println("关闭con对象失败！");
			e.printStackTrace();
		}
	}
}
