Java遠程訪問SQL Server 2008R2數據庫

       原本想在本地安裝oracle數據庫,以便學習數據庫編程,但linux安裝oracle非常麻煩,因此,採用遠程訪問的方式,使用另一臺Windows計算機上的SQL Server2008 R2數據庫。爲方便以後編程時使用,特封裝了Java在Linux平臺上通過jdbc驅動遠程訪問SQL Server 2008 R2的類,以供各位參考糾正。

封裝的Sql類採用Java的單例模式實現,對外提供方法包括:

1.返回實例方法:Instance(String dbURL,String userName,String userPwd);

2.創建連接方法:Connect();

3.建立查詢方法:SqlQuery(String strsql);

4.返回訪問數據結果對象方法:resultSet();

5.關閉連接方法:Close();


Sql類

package com.anson.java;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 使用java單例模式,封裝對通過jdbc對sql server遠程訪問類
 * @author anson
 *
 */
public class Sql {
	
	private static Sql sqlObj=null;
	private final String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	private String dbURL=null;
	private String userName=null;
	private String userPwd=null;
	
	private Connection connction=null;
	private Statement statement=null;
	private ResultSet resultset=null;
	/**
	 * 私有構造函數
	 * 構建sql server連接字
	 * @param dbURL
	 * @param userName
	 * @param userPwd
	 */
	private Sql(String dbURL,String userName,String userPwd)
	{
		this.dbURL=dbURL;
		this.userName=userName;
		this.userPwd=userPwd;
	}
	
	/**
	 * 提供對外訪問方法
	 * @param dbURL 遠程IP及端口,例如“jdbc:sqlserver://100.120.13.72:1433;DatabaseName=MyTestDB”
	 * @param userName 用戶名,例如“sa”
	 * @param userPwd 用戶密碼,例如“123456”
	 * @return Sql類的唯一實例,對象名稱sqlObj
	 */
	public static Sql Instance(String dbURL,String userName,String userPwd)
	{
		try
		{
			if(null==sqlObj)
			{
				sqlObj=new Sql(dbURL,userName,userPwd);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return sqlObj;
	}
	
	/**
	 * 提供外部訪問數據的方法
	 * @return ResultSet對象
	 */
	public ResultSet resultSet()
	{
		return this.resultset;
	}
	
	/**
	 * 創建數據庫連接
	 */
	public  void Connect()
	{
		try
		{
			//加載SQL SERVER驅動程序
			Class.forName(driverName);
			//建立連接
			this.connction=DriverManager.getConnection(dbURL, userName, userPwd);
			this.statement=this.connction.createStatement();
		} 
		catch (SQLException e)
		{
			// TODO Auto-generated catch block
			System.out.println("Error Get Data!");
			e.printStackTrace();
		} 
		catch (ClassNotFoundException e)
		{
			// TODO Auto-generated catch block
			System.out.print("Error Loading SQLServer Driver!");
			e.printStackTrace();
		}
	}
	
	/**
	 * 建立sql查詢
	 * @param strsql 所需編寫的sql server查詢語句
	 */
	public void SqlQuery(String strsql)
	{
		try
		{
			this.resultset=this.statement.executeQuery(strsql);
		} 
		catch (SQLException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 關閉鏈數據科連接
	 */
	public void Close()
	{
		try
		{
			//關閉所有連接
			this.resultset.close();
			this.statement.close();
			this.connction.close();
		} 
		catch (SQLException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

以下使用Test類測試Sql類的使用,Test類連接的的是另一臺主機的SQL Server 2008 R2數據庫。再次之前,需事先將該SQL Server 2008 R2配置爲可遠程訪問。


Test類

package com.anson.java;

import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String dbURL="jdbc:sqlserver://100.120.13.72:1433;DatabaseName=MyTestTeachingDB";
		String userName="sa";
		String userPwd="123456";
		
		Sql sql=Sql.Instance(dbURL, userName, userPwd);
		sql.Connect();
		String strsql="select s.sno as 學號,s.sname as 姓名,c.cno as 課程號,c.cname as 課程名,sc.grade as 成績" +
				" from student s, student_course sc,course c" +
				" where s.sno=sc.sno and c.cno=sc.cno";
		sql.SqlQuery(strsql);
		try
		{
			ResultSet resultSet=sql.resultSet();
			while(resultSet.next())
			{
				System.out.println(resultSet.getString("學號")+"		"+
			resultSet.getString("姓名")+" 		"+resultSet.getString("成績"));
			}
		}
		catch (SQLException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

測試結果:


(以上爲從數據庫導出的部分數據截圖)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章