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

📄 jdbcadapter.java

📁 一个用java写的地震分析软件(无源码)-used to write a seismic analysis software (without source)
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package org.trinet.util.graphics.table;
/**
 * An adaptor, transforming the JDBC interface to the TableModel interface.
 * @version 1.0 09/15/98
 * @author Philip Milne original SUNSOFT version
 * @author highly modified by AWalter USGS 9/98
 */
 
import java.math.*;
import java.util.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import org.trinet.jdbc.*;
import org.trinet.util.*;

public class JDBCAdapter extends AbstractTableModel {
    private static final String DEFAULT_SCHEMA = "TRINETDB";
    private int maxRows = 100;
    private Connection  conn;
    private Statement   stmt;
    private Statement   lockstmt;
    private Statement	updstmt;
    private ResultSet   queryResultSet;
    private ResultSet   resultSet;
    private ResultSetMetaData   rsMD;
    private DatabaseMetaData	dbMD;
    private int			connID = -1;
    private int		updateCount = -1;
    private static final String strLock1 = "LOCK TABLE ";
    private static final String strLock2 = " IN ROW EXCLUSIVE MODE NOWAIT";
    private String []		dbTableNames;
    private ColumnData []	columnDataArray;

    private String[]  queryTables;
    private String[]  colNames;
    private String[]  colTbls;
    private String[]  colLabel;
    private int[]     colTypes;
    private int[]     colWidth;
    private int[]     colPrecision;
    private int[]     colScale;
    private boolean[] colAKey;

    private boolean updateDBflag = false;
    private boolean insertDBflag = false;
    private int insertedRowIndex = -1;

    private ArrayList rows = new ArrayList();
    private String lastUpdateQuery = "";
    private static final String catalog = null;
    private static String schemaLogin = "";
     
    public JDBCAdapter() {}
    
    public int connect(String url, String driverName,
                       String user, String passwd) {
	schemaLogin = user.toString().toUpperCase();
	System.out.println("JDBCAdapter: Table connect() username/schemaLogin: " + schemaLogin);
	try {
	    conn = JDBConnect.getConnection(url, driverName, user, passwd);
	    if (conn != null) {
		stmt = conn.createStatement();
		updstmt = conn.createStatement();
		lockstmt = conn.createStatement();
		conn.setAutoCommit(false);
		dbMD = conn.getMetaData();
	        connID = JDBConnect.getConnectionId(url, driverName, user, passwd);
	    }
	}
	catch (SQLException ex) {
	    System.err.println("JDBCAdapter: Connect failure; SQLException");
	    SQLExceptionHandler.prtSQLException(ex);
	    connID = -1;
	}
	return connID;
    }

    public int connect(int id) {
        conn = JDBConnect.getConnection(id);
	connID = -1;
	if (conn != null) {
	    try {
		stmt = conn.createStatement();
		updstmt = conn.createStatement();
		lockstmt = conn.createStatement();
		dbMD = conn.getMetaData();
		conn.setAutoCommit(false);
		queryResultSet = null;
		rsMD = null;
		connID = id;
	    }
	    catch (SQLException ex) {
		System.err.println("JDBCAdapter: Connect with integer id failure; SQLException");
		SQLExceptionHandler.prtSQLException(ex);
	    }
	}
        else {
	    System.err.println("JDBCAdapter: Connect invalid connection id");
	}
	return connID;
    }

    public boolean execute(String query) {
	boolean rval = false;
	resultSet = null;
	updateCount = -1;	
	try {
	    if(stmt == null) stmt = conn.createStatement();
	    System.out.println("JDBCAdapter: execute SQL statement:\n" + query);
	    rval =  stmt.execute(query);
	    if (rval) resultSet = stmt.getResultSet();
	    else updateCount = stmt.getUpdateCount();
	}
	catch (SQLException ex) {
            System.err.println("JDBCAdapter: execute statement failure.");
	    ex.printStackTrace();
	}
	return rval;
    }

    public int executeQuery(String query) {
      return executeQuery(query, maxRows);
    }

    public int executeQuery(String query, int maxRows) {
	System.out.println("JDBCAdapter: executeQuery SQL statement:\n" + query);
        if (conn == null) {
            System.err.println("JDBCAdapter: executeQuery null connection failure; must connect to database to execute query.");
            return 0;
        }
	String schema;
        try {
	    if(stmt == null) stmt = conn.createStatement();
	    int idx = query.indexOf("FROM");
	    int idx2 = query.indexOf("WHERE");
	    String tblString = null;
	    if (idx > 0 && idx2 > 0) {
		if (idx+5 < idx2-2) {
		    tblString = query.substring(idx+5,idx2-1);
		    findQueryTables(tblString);
    		}
	    }
	    else if (idx > 0) {
		int ifor = query.indexOf("FOR UPDATE");
		String tmp = null;
		if (ifor >= 0) tblString = query.substring(idx+5,ifor);
		else tblString = query.substring(idx+5);
//		Debug.println("JDBCAdapter tblString: " + tblString);
		findQueryTables(tblString);
	    }
	    if (queryTables.length == 0 || idx == -1) {
//		Debug.println("JDBCAdapter: QUERY TABLES LENGTH = 0 " );
		return 0;
	    }
	    else {
	        if (query.indexOf("UPDATE") >= 0) updateDBflag = true;
		else updateDBflag = false;
		First: for (int i=0; i<queryTables.length; i++) {
		    int indexSchema = queryTables[i].indexOf('.');
		    if (indexSchema >= 0) schema = queryTables[i].substring(0, indexSchema);
		    else schema = schemaLogin;
		    dbTableNames = getTableNames(schema);

		    for (int j=0; j<dbTableNames.length; j++) {
//			Debug.println("dbTableNames:" + dbTableNames[j]);
			if(queryTables[i].substring(indexSchema+1).equals(dbTableNames[j])) {
//			    Debug.println("JDBCAdapter: Found table: " + queryTables[i]);
			    columnDataArray = getColumnData(queryTables[i]);
/*
			    for (int k = 0 ; k < columnDataArray.length ; k++) {
			      Debug.println(k + " " + columnDataArray[k].toString());
			    }
*/
			    continue First;
			}
		    }
		    System.out.println("JDBCAdapter: executeQuery requested table: " + queryTables[i] + " not in schemaLogin");
		    continue First;
//		    return 0;
		}
	    }    
	    if (maxRows > 0) {
		stmt.setMaxRows(maxRows);
	    }
	    else {
	      System.out.println("JDBCAdapter: No MAXROWS specified ... truncating table to 100 rows");
	      stmt.setMaxRows(100);  // temporary limit set here
//	      java.awt.Toolkit.getDefaultToolkit().beep();
	    }
//		Debug.println("EXECUTING QUERY");
            queryResultSet = stmt.executeQuery(query);
            rsMD = queryResultSet.getMetaData();
            int numberOfColumns =  rsMD.getColumnCount();
//		Debug.println("JDBCAdapter: Table column count:" + numberOfColumns);
            // Get the column names and types; cache them for later use.
            colNames = new String[numberOfColumns];
	    colTypes = new int[numberOfColumns];
	    colWidth = new int[numberOfColumns];
	    colPrecision = new int[numberOfColumns];
	    colScale = new int[numberOfColumns];
	    colTbls = new String[numberOfColumns];
	    colLabel = new String[numberOfColumns];
	    colAKey = new boolean[numberOfColumns];
//aww	    String keys[] = getPrimaryKeys(queryTables[0]);
	    findColumnTables(query);
	    for(int colIndex = 0; colIndex < numberOfColumns; colIndex++) {
                colNames[colIndex] = rsMD.getColumnName(colIndex+1);
                colLabel[colIndex] = rsMD.getColumnLabel(colIndex+1);
		colTypes[colIndex] = rsMD.getColumnType(colIndex+1);
		colWidth[colIndex] = rsMD.getColumnDisplaySize(colIndex+1);
		colPrecision[colIndex] = rsMD.getPrecision(colIndex+1);
		colScale[colIndex] = rsMD.getScale(colIndex+1);
		if (colTbls[colIndex] == null) {
		    colTbls[colIndex] = rsMD.getTableName(colIndex+1);
		}
		if(colTbls[colIndex].equals("")) {
		    if(queryTables.length == 1) colTbls[colIndex] = queryTables[0]; // rsMD.getTableName(colIndex+1);
		}

		String keys[] = getPrimaryKeys(colTbls[colIndex]);
//		Debug.println("JDBCAdapter: table keys:" + keys.length);
		colAKey[colIndex] = false;
		for ( int i = 0; i<keys.length; i++) {
		    if (colNames[colIndex].equals(keys[i])) colAKey[colIndex] = true;
		}
/* comment out the print
		Debug.print(" ColumnName:" + colNames[colIndex]);
//		Debug.print("\n");
		Debug.print(" Label:" + colLabel[colIndex]);
//		Debug.print("\n");
		Debug.print(" Type:" + colTypes[colIndex]);
//		Debug.print("\n");
		Debug.print(" Width:" + colWidth[colIndex]);
//		Debug.print("\n");
		Debug.print(" Precision:" + colPrecision[colIndex]);
//		Debug.print("\n");
		Debug.print(" Scale:" + colScale[colIndex]);
//		Debug.print("\n");
		Debug.print(" Table:" + colTbls[colIndex]);
//		Debug.print("\n");
		Debug.print(" AKey:" + colAKey[colIndex]);
		Debug.print("\n");
// end of comment  */
	    }

            // Get all rows.
            rows = new ArrayList(128);
	    int j = 0;
//	    Object obj;
            while (queryResultSet.next()) {
		j++;
//		Debug.println("JDBCAdapter: executeQuery row count:" + j);
                ArrayList newRow = new ArrayList(64);
                for (int i = 1; i <= numberOfColumns; i++) {
//		    obj = queryResultSet.getObject(i);
//		    if (obj == null) Debug.println("JDBCAdapter: executequery object null");
//		    else Debug.println("JDBCAdapter: execute query Objectname:" + obj.getClass().getName());
//	            newRow.add(obj);

	            newRow.add(queryResultSet.getObject(i));
                }
                rows.add(newRow);
            }
//	    Debug.println("JDBCAdapter: Found table.");
//	    for (int i = 0; i < queryTables.length; i++) { Debug.println( queryTables[i] + " "); }
//	    Debug.println(" column count: " + numberOfColumns);
//	    Debug.println("JDBCAdapter: row count: " + rows.size());
            fireTableChanged(null); // Tell the listeners a new table has arrived.
	    return rows.size();
	}
        catch (SQLException ex) {
            System.err.println("JDBCAdapter: executeQuery failure.");
	    SQLExceptionHandler.prtSQLException(ex);
	    return -1;
        }
    }

    private void findColumnTables(String queryString) {
	int iend = queryString.indexOf("FROM");
	String colNames = queryString.substring(7,iend);
	StringTokenizer st = new StringTokenizer(colNames, ", \t\n\r\f");
	int itoke = st.countTokens();
	if (itoke != getColumnCount()) {
	    if (queryString.indexOf('*') < 0) {
		System.out.println("JDBCAdapter: findColumnTables: column count token mismatch");
		return;
	    }
	    else return;
	}

	String colname;
	for (int i = 0; i<itoke; i++) {
	    colname = st.nextToken();
	    if (colname.indexOf('.') > 0) colTbls[i] = colname.substring(0,colname.indexOf('.'));
	    else colTbls[i] = null;
//	    Debug.println("JDBCAdapter: findColumnTables:" + colname + " Table: " + colTbls[i]);
	}
    }

    private void findQueryTables(String str) {
	StringTokenizer st = new StringTokenizer(str, ", \t\n\r\f");
	int itoke = st.countTokens();
	queryTables = new String[itoke];
	for (int i = 0; i<itoke; i++) {
	    queryTables[i] = st.nextToken();
//	    Debug.println("JDBCAdapter: findQueryTables:" + queryTables[i]);
	}
    }

    public void resetStatement() {
	try {
	    stmt.cancel();
	    stmt = null;
	}
	catch (SQLException ex) {
	    System.err.println("SQLException for JDBCAdapter resetStatement()");
	    System.err.println(ex.getMessage());
	    ex.printStackTrace();
	}
    }

    public void close() throws SQLException {
        System.out.println("JDBCAdapter: Closing database connection");
        if (queryResultSet != null) {
	    queryResultSet.close();
	    queryResultSet = null;
	}
        if (resultSet != null) {
	    resultSet.close();
	    resultSet = null;
	}
        if (stmt != null) {
	    stmt.close();
	    stmt = null;
	}
	if (updstmt != null) {
	    updstmt.close();
	    updstmt = null;
	}
	if (lockstmt != null) {
	    lockstmt.close();
	    lockstmt = null;
	}
	if (conn != null) {
	  JDBConnect.close(connID);
	  conn = null;
	  connID = -1;
	}
	rsMD  = null;
	dbMD  = null;
    }

    protected void finalize() throws Throwable {
	System.out.println("JDBCAdapter: Finalize JDBCAdapter");
 //       close();
        super.finalize();
    }
    
// Begin added methods - AWW

⌨️ 快捷键说明

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