Java远程访问SQL Server 2008R2数据库

Java学习之路 同时被 2 个专栏收录
23 篇文章 0 订阅
8 篇文章 0 订阅

       原本想在本地安装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();
		}
	}

}

测试结果:


(以上为从数据库导出的部分数据截图)


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值