⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sunsql.java

📁 △项目名称:阳光酒店管理系统 △委托单位:清华IT学习认证中心 △制作小组:华育国际 112301 班 CS结构
💻 JAVA
字号:
/**
 *##############################################################################
 *
 *	[ 项目名      ]  : 
 *  [ 公司名      ]  : SunshineSOFT
 *	[ 模块名      ]  : 数据库连接
 *	[ 文件名      ]  : sunsql.java
 *	[ 相关文件    ]  : 
 *	[ 文件实现功能]  : 连接及操作数据库
 *	[ 作者        ]  : 顾俊
 *	[ 版本        ]  : 1.3
 *	----------------------------------------------------------------------------
 *	[ 备注        ]  : 
 *	----------------------------------------------------------------------------
 *	[ 修改记录    ]  : 
 *
 *	[ 日  期 ]     [版本]         [修改人]         [修改内容] 
 *	2006/03/31      1.0             顾俊            重新组织
 *	2006/04/05      1.1             顾俊            添加ODBC连接方式
 *	2006/04/08      1.2             顾俊            添加函数 #A, #B, #C, #D
 *	2006/04/25      1.2             顾俊            添加函数 #E
 *	##--------------------------------------------------------------------------
 *  			 版权所有(c) 2006-2007,  SunshineSOFT Corporation
 *	--------------------------------------------------------------------------##
 *	
 *	[ 函数说明    ]  :
 *	
 *	[## private sunsql() {} ] :  
 *		功能: 防止实例化sunsql对象
 *
 *  [## public static int executeUpdate(String sql) {} ] :
 *		功能: 执行对数据库更改的sql命令,并返回更改所影响的行数
 *
 *  [## public static ResultSet executeQuery(String sql) {} ] :
 *		功能: 执行对数据库的select查询功能,并返回查询所得到的结果
 *
 *	[## public static int recCount(ResultSet rs)) {} ] :
 *		功能: 获得指定结果集的记录数量
 *
 *	[## public static long getPrimaryKey() {} ] : #A
 *		功能: 通过服务器当前的时间获得一个主键
 *
 *	[## public static void initJComboBox (JComboBox cb, String sqlCode) {} ] : #B
 *		功能: 按SQL语句从数据库选出Items加入JComboBox
 *
 *	[## public static void initJList (JList jt, String sqlCode) {} ] : #E
 *		功能: 按SQL语句从数据库选出数据加入JList
 *
 *	[## public static void initDTM (DefaultTableModel fdtm, String sqlCode) {} ] : #C
 *		功能: 按SQL语句从数据库中获得数据(结果集),添加到fdtm中(也可以说JTable中)
 *
 *	[## public static int runTransaction (String updateCode[]) {} ] : #D
 *		功能: 利用事务的模式以updateCode中的sql语句对数据库进行更新
 *
 *
 *  [ 遗留问题    ]  :
 *
 *	[ 数据库连接关闭问题 ] : 现在: 只有应用程序完全退出时数据库连接才关闭
 *                           目的: 每次数据库操作完成后都要关闭
 *	
 *
 *##############################################################################
 */
package com.sunshine.sunsdk.sql;

import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
import com.sunshine.sunsdk.system.*;


public class sunsql {
	
	private static Statement ste = null;
	private static Connection conn = null;
	
	static {
		try {
			if(sunini.getIniKey ("Default_Link").equals ("1")) {		//JDBC连接方式
				String user = sunini.getIniKey ("UserID");
				String pwd  = sunini.getIniKey ("Password");
				String ip   = sunini.getIniKey ("IP");
				String acc  = sunini.getIniKey ("Access");
				String dbf  = sunini.getIniKey ("DBFname");
				String url  = "jdbc:microsoft:sqlserver://" + ip + ":" + acc + ";" + "databasename=" + dbf;
				//注册驱动
				DriverManager.registerDriver (new com.microsoft.jdbc.sqlserver.SQLServerDriver());
				//获得一个连接
				conn = DriverManager.getConnection (url, user, pwd);
			}
			else {
				//注册驱动										//JDBCODBC连接方式
				DriverManager.registerDriver (new sun.jdbc.odbc.JdbcOdbcDriver());
				//获得一个连接
				conn = DriverManager.getConnection ("jdbc:odbc:" + sunini.getIniKey("LinkName"));
			}
			//设置自动提交为false
			conn.setAutoCommit (false);
			//建立高级载体
			ste = conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
	    }
	    catch (Exception ex) {
	    	JOptionPane.showMessageDialog (null, "数据库连接失败...", "错误", JOptionPane.ERROR_MESSAGE);
	    	System.exit(0);
	    	//ex.printStackTrace();
	    }//End try
	}
	
	/**=======================================================================**
	 *		[## private sunsql() {} ]:		构造函数
	 *			参数   :无
	 *			返回值 :无
	 *			修饰符 :private
	 *			功能   :防止实例化sunsql对象
	 **=======================================================================**
	 */
	private sunsql(){
	}
	
	/**=======================================================================**
	 *		[## public static int executeUpdate(String sql) {} ] :	
	 *			参数   :String 对象, 表示需要执行的sql语句
	 *			返回值 :int, 表示此sql语句对数据库影响了几行
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :执行对数据库更改的sql命令,并返回更改所影响的行数
	 **=======================================================================**
	 */
	public static int executeUpdate(String sql) {
//		System.out.println ("Update SQL : " + sql);
		int i = 0 ;
		try {
			i = ste.executeUpdate(sql) ;
			conn.commit();
		}catch(Exception e) {
			e.printStackTrace() ;
		}//End try
		return i ;
	}
	
	/**=======================================================================**
	 *		[## public static int runTransaction (String updateCode[]) {} ] :	
	 *			参数   :String[]是字符串数组, 表示需要执行的所有sql语句
	 *			返回值 :int, 表示sql语句执行的情况, (i==数组长度)为更新成功
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :利用事务的模式以updateCode中的sql语句对数据库进行更新
	 **=======================================================================**
	 */
	public static int runTransaction (String updateCode[]) {
		int ok = 0, i = 0;
		int row = updateCode.length;		//更新语句的数量
		try {
			for (i = 0; i < row; i++) {
				ok = ste.executeUpdate (updateCode[i]);		//执行SQL语句
				if(ok == 0) {				//如果不成功,则跳出循环
					System.out.println ("sunsql.runTransaction(): updateCode[" + i + "] 失败" + ok);
					break;
				}
				System.out.println ("sunsql.runTransaction(): updateCode[" + i + "] 成功 " + ok);
			}
			//根据变量 ok 判断上面循环是否正常运行完毕
			if(ok == 0) {
				conn.rollback ();		//(ok == 0)表示更新过程中出错,回滚数据
				System.out.println ("sunsql.runTransaction(): Update data false, rollback");
			}
			else {
				conn.commit ();			//(ok != 0)基本上是所有SQL语句运行成功, 则提交给数据库
				System.out.println ("sunsql.runTransaction(): Update finish");
			}
		}
	    catch (Exception ex) {
	    	System.out.println ("sunsql.runTransaction(): Update false ...");
	    }
		return i;
	}
	
	/**=======================================================================**
	 *		[## public static ResultSet executeQuery(String sql) {} ] :
	 *			参数   :String 对象, 表示需要执行的sql语句
	 *			返回值 :ResultSet对象, 表示此查询语句返回的结果集
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :执行对数据库的select查询功能,并返回查询所得到的结果
	 **=======================================================================**
	 */
	public static ResultSet executeQuery(String sql) {
//		System.out.println ("Query SQL : " + sql);
		ResultSet rs = null ;
		try {
			rs = ste.executeQuery(sql) ;
		}catch(Exception e) {
			e.printStackTrace() ;
		}//End try
		return rs ;
	}
	
	/**=======================================================================**
	 *		[## public static int recCount(ResultSet rs)) {} ] :
	 *			参数   :ResultSet 对象, 表示目标结果集
	 *			返回值 :int, 表示结果集中的记录个数
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :获得指定结果集的记录数量
	 **=======================================================================**
	 */
	public static int recCount(ResultSet rrs) {
		int i = 0;
		try {
			if(rrs.getRow() != 0)
				rrs.beforeFirst();
			//while用于计算rs的记录条数
			while(rrs.next())
				i++;
			rrs.beforeFirst();	
	    }catch(Exception ex) {
	    	ex.printStackTrace();
	    }//End try
		return i;
	}
	
	/**=======================================================================**
	 *		[## public static long getPrimaryKey() {} ] :
	 *			参数   :无
	 *			返回值 :long, 表示从服务器获得的主键
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :通过服务器当前的时间获得一个主键
	 **=======================================================================**
	 */
	public static long getPrimaryKey() {
		long pk = 0;
		
		try {
			//获得服务器时间
			ResultSet rs = executeQuery("select getdate()");
			rs.next();
			pk = rs.getTimestamp(1).getTime();
	    }
	    catch (Exception ex) {
	    	System.out.println ("sunsql.getPrimaryKey (): false");
	    }
	    return pk;
	}
	
	/**=======================================================================**
	 *		[## public static void initJComboBox (JComboBox cb, String sqlCode) {} ] :
	 *			参数   :JComboBox表示要加数据的下拉框, String对象表示一条SQL语句
	 *			返回值 :JComboBox, 表示返回一个加好Item的JComboBox对象
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :按SQL语句从数据库选出Items加入JComboBox
	 **=======================================================================**
	 */
	public static void initJComboBox (JComboBox cb, String sqlCode) {
		cb.removeAllItems();
		try {
			ResultSet rs = executeQuery (sqlCode);
			int row = recCount (rs);
			rs.beforeFirst ();
			//从结果集中取出Item加入JComboBox中
			for (int i = 0; i < row; i++) {
				rs.next();
				cb.addItem (rs.getString (1));
		    }
	    }
	    catch (Exception ex) {
	    	System.out.println ("sunsql.initJComboBox (): false");
	    }
	}
	
	/**=======================================================================**
	 *		[## public static void initJList (JList jt, String sqlCode) {} ] :
	 *			参数   :JList表示要加数据的列表框, String对象表示一条SQL语句
	 *			返回值 :无
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :按SQL语句从数据库选出数据加入JList
	 **=======================================================================**
	 */
	public static void initJList (JList jt, String sqlCode) {
		try {
			ResultSet rs = executeQuery (sqlCode);
			int row = recCount (rs);
			String list[] = new String[row];
			//从结果集中取出数据存入数组中
			for (int i = 0; i < row; i++) {
				rs.next();
				list[i] = rs.getString(1);
		    }//Endfor
		    jt.setListData(list);	//初始化List
	    }
	    catch (Exception ex) {
	    	System.out.println ("sunsql.initJList(): false");
	    }//Endtry
	}
	
	/**=======================================================================**
	 *		[## public static void initDTM (DefaultTableModel fdtm, String sqlCode) {} ] :
	 *			参数   :DefaultTableModel对象表示要添充数据的表模式
	 *					 String对象表示一条SQL语句
	 *			返回值 :无
	 *			修饰符 :public static 可以不实例化对象而直接调用方法
	 *			功能   :按SQL语句从数据库中获得数据,添加到fdtm中(也可以说JTable中)
	 **=======================================================================**
	 */
	public static void initDTM (DefaultTableModel fdtm, String sqlCode) {
		try {
			ResultSet rs = executeQuery( sqlCode );	//获得结果集
			int row = recCount( rs );				//获得结果集中有几行数据
			ResultSetMetaData rsm =rs.getMetaData();	//获得列集
			int col = rsm.getColumnCount();		//获得列的个数
			String colName[] = new String[col];
			//取结果集中的表头名称, 放在colName数组中
			for (int i = 0; i < col; i++) {
				colName[i] = rsm.getColumnName( i + 1 );
			}//End for
			rs.beforeFirst();
			String data[][] = new String[row][col];
			//取结果集中的数据, 放在data数组中
			for (int i = 0; i < row; i++) {
				rs.next();
				for (int j = 0; j < col; j++) {
					data[i][j] = rs.getString (j + 1);
					//System.out.println (data[i][j]);
			    }
			}//End for
			fdtm.setDataVector (data, colName);
	    }
	    catch (Exception ex) {
	    	System.out.println ("sunsql.initDTM (): false");
	    }//End try
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -