package sqlserver;
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SqlServerDbAccess
{
private Connection con;
private PreparedStatement pstm;
private static SqlServerDbAccess dba ;
private String conString; //连接字符串
private String dbIp; //数据库所在服务器IP地址
private String dbPort; //数据库端口
private String dbName; //数据库名
private String dbUser; //数据库用户名
private String dbPwd; //数据库用户密码
private SqlServerDbAccess() //设置构造函数为private,便于单例模式的实现
{
}
public static SqlServerDbAccess getDbAccess() //定义一个获取DbAccess对象的方法,每次返回的都是同一个DbAccess对象
{
if(dba==null) //如果是第一次调用,则初始化
dba=new SqlServerDbAccess();
return dba;
}
public void setValue(String dbIp,String dbPort,String dbName,String dbUser,String dbPwd)
{
this.dbIp=dbIp;
this.dbPort=dbPort;
this.dbName=dbName;
this.dbUser=dbUser;
this.dbPwd=dbPwd;
conString="jdbc:sqlserver://"+dbIp+":"+dbPort+";databaseName="+dbName;
}
private void getCon() //获取数据库连接
{
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动包
try {
con = DriverManager.getConnection(conString, dbUser, dbPwd);//初始化数据库连接
} catch (SQLException ex) {
System.out.println("初始化数据库连接失败!");
Logger.getLogger(SqlServerDbAccess.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(SqlServerDbAccess.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("加载驱动包失败!");
}
}
private void excute(String sql){
if(con==null){//如果是第一次连接,则初始化连接
getCon();
}
try {
pstm=con.prepareStatement(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ResultSet getResultSet(String sql){//根据sql语句返回一个ResultSet结果集
excute(sql);
try {
return pstm.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public String getFirstUnit(String sql){//根据sql语句返回结果集的第一行第一列单元格数据
excute(sql);
try {
String value;
ResultSet rs=pstm.executeQuery();
rs.next();
value=rs.getString(1);
rs.close();
return value;//返回第一个单元格数据
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public ArrayList getFirstRow(String sql){//根据sql返回结果集的第一行所有数据。
excute(sql);
try {
ArrayList aList=new ArrayList();//新建一个arrayList对象。
ResultSet rs=pstm.executeQuery();
rs.next();//将指针指向结果集的第一行。
int columns=rs.getMetaData().getColumnCount();//获取该结果集的列数。
for(int i=1;i<columns+1;i++){//因为用索引取值是从1开始的。
aList.add(rs.getString(i));//将第一行的所有列都以String形式封装到Arraylist。
}
return aList;//返回封装好的arraylist.
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public int getInt(String sql){//返回受影响的行数,用于新建/更新/删除及其他操作。
excute(sql);
try {
return pstm.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
public void close(){//当最后退出程序时执行就行了,因为是单例模式,所以不用每次都关
try {
pstm.cancel();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}