?? sunsql.java
字號:
/**
*##############################################################################
*
* [ 項(xiàng)目名 ] :
* [ 公司名 ] : SunshineSOFT
* [ 模塊名 ] : 數(shù)據(jù)庫連接
* [ 文件名 ] : sunsql.java
* [ 相關(guān)文件 ] :
* [ 文件實(shí)現(xiàn)功能] : 連接及操作數(shù)據(jù)庫
* [ 作者 ] : 顧俊
* [ 版本 ] : 1.3
* ----------------------------------------------------------------------------
* [ 備注 ] :
* ----------------------------------------------------------------------------
* [ 修改記錄 ] :
*
* [ 日 期 ] [版本] [修改人] [修改內(nèi)容]
* 2006/03/31 1.0 顧俊 重新組織
* 2006/04/05 1.1 顧俊 添加ODBC連接方式
* 2006/04/08 1.2 顧俊 添加函數(shù) #A, #B, #C, #D
* 2006/04/25 1.2 顧俊 添加函數(shù) #E
* ##--------------------------------------------------------------------------
* 版權(quán)所有(c) 2006-2007, SunshineSOFT Corporation
* --------------------------------------------------------------------------##
*
* [ 函數(shù)說明 ] :
*
* [## private sunsql() {} ] :
* 功能: 防止實(shí)例化sunsql對象
*
* [## public static int executeUpdate(String sql) {} ] :
* 功能: 執(zhí)行對數(shù)據(jù)庫更改的sql命令,并返回更改所影響的行數(shù)
*
* [## public static ResultSet executeQuery(String sql) {} ] :
* 功能: 執(zhí)行對數(shù)據(jù)庫的select查詢功能,并返回查詢所得到的結(jié)果
*
* [## public static int recCount(ResultSet rs)) {} ] :
* 功能: 獲得指定結(jié)果集的記錄數(shù)量
*
* [## public static long getPrimaryKey() {} ] : #A
* 功能: 通過服務(wù)器當(dāng)前的時間獲得一個主鍵
*
* [## public static void initJComboBox (JComboBox cb, String sqlCode) {} ] : #B
* 功能: 按SQL語句從數(shù)據(jù)庫選出Items加入JComboBox
*
* [## public static void initJList (JList jt, String sqlCode) {} ] : #E
* 功能: 按SQL語句從數(shù)據(jù)庫選出數(shù)據(jù)加入JList
*
* [## public static void initDTM (DefaultTableModel fdtm, String sqlCode) {} ] : #C
* 功能: 按SQL語句從數(shù)據(jù)庫中獲得數(shù)據(jù)(結(jié)果集),添加到fdtm中(也可以說JTable中)
*
* [## public static int runTransaction (String updateCode[]) {} ] : #D
* 功能: 利用事務(wù)的模式以updateCode中的sql語句對數(shù)據(jù)庫進(jìn)行更新
*
*
* [ 遺留問題 ] :
*
* [ 數(shù)據(jù)庫連接關(guān)閉問題 ] : 現(xiàn)在: 只有應(yīng)用程序完全退出時數(shù)據(jù)庫連接才關(guān)閉
* 目的: 每次數(shù)據(jù)庫操作完成后都要關(guān)閉
*
*
*##############################################################################
*/
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;
//注冊驅(qū)動
DriverManager.registerDriver (new com.microsoft.jdbc.sqlserver.SQLServerDriver());
//獲得一個連接
conn = DriverManager.getConnection (url, user, pwd);
}
else {
//注冊驅(qū)動 //JDBCODBC連接方式
DriverManager.registerDriver (new sun.jdbc.odbc.JdbcOdbcDriver());
//獲得一個連接
conn = DriverManager.getConnection ("jdbc:odbc:" + sunini.getIniKey("LinkName"));
}
//設(shè)置自動提交為false
conn.setAutoCommit (false);
//建立高級載體
ste = conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch (Exception ex) {
JOptionPane.showMessageDialog (null, "數(shù)據(jù)庫連接失敗...", "錯誤", JOptionPane.ERROR_MESSAGE);
System.exit(0);
//ex.printStackTrace();
}//End try
}
/**=======================================================================**
* [## private sunsql() {} ]: 構(gòu)造函數(shù)
* 參數(shù) :無
* 返回值 :無
* 修飾符 :private
* 功能 :防止實(shí)例化sunsql對象
**=======================================================================**
*/
private sunsql(){
}
/**=======================================================================**
* [## public static int executeUpdate(String sql) {} ] :
* 參數(shù) :String 對象, 表示需要執(zhí)行的sql語句
* 返回值 :int, 表示此sql語句對數(shù)據(jù)庫影響了幾行
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :執(zhí)行對數(shù)據(jù)庫更改的sql命令,并返回更改所影響的行數(shù)
**=======================================================================**
*/
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[]) {} ] :
* 參數(shù) :String[]是字符串?dāng)?shù)組, 表示需要執(zhí)行的所有sql語句
* 返回值 :int, 表示sql語句執(zhí)行的情況, (i==數(shù)組長度)為更新成功
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :利用事務(wù)的模式以updateCode中的sql語句對數(shù)據(jù)庫進(jìn)行更新
**=======================================================================**
*/
public static int runTransaction (String updateCode[]) {
int ok = 0, i = 0;
int row = updateCode.length; //更新語句的數(shù)量
try {
for (i = 0; i < row; i++) {
ok = ste.executeUpdate (updateCode[i]); //執(zhí)行SQL語句
if(ok == 0) { //如果不成功,則跳出循環(huán)
System.out.println ("sunsql.runTransaction(): updateCode[" + i + "] 失敗" + ok);
break;
}
System.out.println ("sunsql.runTransaction(): updateCode[" + i + "] 成功 " + ok);
}
//根據(jù)變量 ok 判斷上面循環(huán)是否正常運(yùn)行完畢
if(ok == 0) {
conn.rollback (); //(ok == 0)表示更新過程中出錯,回滾數(shù)據(jù)
System.out.println ("sunsql.runTransaction(): Update data false, rollback");
}
else {
conn.commit (); //(ok != 0)基本上是所有SQL語句運(yùn)行成功, 則提交給數(shù)據(jù)庫
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) {} ] :
* 參數(shù) :String 對象, 表示需要執(zhí)行的sql語句
* 返回值 :ResultSet對象, 表示此查詢語句返回的結(jié)果集
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :執(zhí)行對數(shù)據(jù)庫的select查詢功能,并返回查詢所得到的結(jié)果
**=======================================================================**
*/
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)) {} ] :
* 參數(shù) :ResultSet 對象, 表示目標(biāo)結(jié)果集
* 返回值 :int, 表示結(jié)果集中的記錄個數(shù)
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :獲得指定結(jié)果集的記錄數(shù)量
**=======================================================================**
*/
public static int recCount(ResultSet rrs) {
int i = 0;
try {
if(rrs.getRow() != 0)
rrs.beforeFirst();
//while用于計算rs的記錄條數(shù)
while(rrs.next())
i++;
rrs.beforeFirst();
}catch(Exception ex) {
ex.printStackTrace();
}//End try
return i;
}
/**=======================================================================**
* [## public static long getPrimaryKey() {} ] :
* 參數(shù) :無
* 返回值 :long, 表示從服務(wù)器獲得的主鍵
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :通過服務(wù)器當(dāng)前的時間獲得一個主鍵
**=======================================================================**
*/
public static long getPrimaryKey() {
long pk = 0;
try {
//獲得服務(wù)器時間
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) {} ] :
* 參數(shù) :JComboBox表示要加數(shù)據(jù)的下拉框, String對象表示一條SQL語句
* 返回值 :JComboBox, 表示返回一個加好Item的JComboBox對象
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :按SQL語句從數(shù)據(jù)庫選出Items加入JComboBox
**=======================================================================**
*/
public static void initJComboBox (JComboBox cb, String sqlCode) {
cb.removeAllItems();
try {
ResultSet rs = executeQuery (sqlCode);
int row = recCount (rs);
rs.beforeFirst ();
//從結(jié)果集中取出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) {} ] :
* 參數(shù) :JList表示要加數(shù)據(jù)的列表框, String對象表示一條SQL語句
* 返回值 :無
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :按SQL語句從數(shù)據(jù)庫選出數(shù)據(jù)加入JList
**=======================================================================**
*/
public static void initJList (JList jt, String sqlCode) {
try {
ResultSet rs = executeQuery (sqlCode);
int row = recCount (rs);
String list[] = new String[row];
//從結(jié)果集中取出數(shù)據(jù)存入數(shù)組中
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) {} ] :
* 參數(shù) :DefaultTableModel對象表示要添充數(shù)據(jù)的表模式
* String對象表示一條SQL語句
* 返回值 :無
* 修飾符 :public static 可以不實(shí)例化對象而直接調(diào)用方法
* 功能 :按SQL語句從數(shù)據(jù)庫中獲得數(shù)據(jù),添加到fdtm中(也可以說JTable中)
**=======================================================================**
*/
public static void initDTM (DefaultTableModel fdtm, String sqlCode) {
try {
ResultSet rs = executeQuery( sqlCode ); //獲得結(jié)果集
int row = recCount( rs ); //獲得結(jié)果集中有幾行數(shù)據(jù)
ResultSetMetaData rsm =rs.getMetaData(); //獲得列集
int col = rsm.getColumnCount(); //獲得列的個數(shù)
String colName[] = new String[col];
//取結(jié)果集中的表頭名稱, 放在colName數(shù)組中
for (int i = 0; i < col; i++) {
colName[i] = rsm.getColumnName( i + 1 );
}//End for
rs.beforeFirst();
String data[][] = new String[row][col];
//取結(jié)果集中的數(shù)據(jù), 放在data數(shù)組中
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
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -