原本想在本地安裝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();
}
}
}
測試結果:
(以上爲從數據庫導出的部分數據截圖)