--- C:/nbdev/sql.project/src/org/netbeans/modules/sql/project/dbmodel/DBMetaData.java Mon Jun 23 20:00:22 2008 +++ C:/nbdev/SQLProject_prd/src/org/netbeans/modules/sql/project/dbmodel/DBMetaData.java Tue Jun 24 11:40:15 2008 @@ -51,6 +51,8 @@ import java.util.Iterator; import java.util.StringTokenizer; +import javax.swing.JOptionPane; + /** * Extracts database metadata information (table names and constraints, their @@ -708,7 +710,7 @@ if (tok.hasMoreElements()) { String firstTok = (String) tok.nextElement(); if(firstTok.equalsIgnoreCase("select")){ - cols = getPrepStmtResultSetColumns(pstmt); + cols = getPrepStmtResultSetColumns(pstmt, sqlText); } } else { cols=null; @@ -1162,6 +1164,7 @@ /////////////////////////////////////////////////// } catch (Exception e) { + System.out.println("Error for sql : "+this.sqlText); e.printStackTrace(); checkProcMetaData = true; //throw e; @@ -1740,10 +1745,11 @@ String errMsg = ""; errPrepStmtParameters = false; Parameter[] parameters = null; + ParameterMetaData pmeta = null; try { - - ParameterMetaData pmeta = pstmt.getParameterMetaData(); + if (pmeta==null) + pmeta = pstmt.getParameterMetaData(); if (pmeta != null) { int numParams = pmeta.getParameterCount(); if (numParams > 0) { @@ -1850,12 +1856,44 @@ return parameters; } - private ResultSetColumn[] getPrepStmtResultSetColumns(PreparedStatement pstmt) throws SQLException{ + private ResultSetColumn[] getPrepStmtResultSetColumns(PreparedStatement pstmt, String sqlText) throws SQLException{ String errMsg = ""; errPrepStmtResultSetColumns = false; ResultSetColumn[] cols = null; + ResultSetMetaData rsmd = null; try { - ResultSetMetaData rsmd = pstmt.getMetaData(); + rsmd = pstmt.getMetaData(); + } + catch (Exception e) { + if (e.getStackTrace()[0].getClassName().contains("oracle.jdbc.driver")) { + try { + int i=0; + try { + while(true) + pstmt.setNull(++i, java.sql.Types.NULL); + } + catch (SQLException sqe) { + // usually no more parameters to bind + } + int res = JOptionPane.showConfirmDialog(null, + "You are using Oracle driver.\r\n"+ + "In order to retrieve SQL statement metadata the statement must be executed.\r\n"+ + "The statement is '" + sqlText + "'.\r\n\r\n"+ + "Do you want to execute this statement?", + "Warning", + JOptionPane.OK_CANCEL_OPTION | JOptionPane.WARNING_MESSAGE + ); + if (res==JOptionPane.CANCEL_OPTION) + throw new SQLException("Aborted execution of prepared statement"); + pstmt.execute(); + } + catch (Exception ex) {} + } + } + + try { + if (rsmd==null) + rsmd = pstmt.getMetaData(); int count = 0; if (rsmd != null) { count = rsmd.getColumnCount(); @@ -1870,9 +1908,18 @@ currCol.setName(rsmd.getColumnName(i)); currCol.setSqlType(getSQLTypeDescription(rsmd.getColumnType(i))); currCol.setJavaType(getJavaFromSQLTypeDescription(currCol.getSqlType())); - currCol.setOrdinalPosition(i); - currCol.setNumericPrecision(rsmd.getPrecision(i)); - currCol.setNumericScale(rsmd.getScale(i)); + try { + currCol.setOrdinalPosition(i); + } + catch (Exception e1) { /*probably not supported*/ } + try { + currCol.setNumericPrecision(rsmd.getPrecision(i)); + } + catch (Exception e2) { /*probably not supported*/ } + try { + currCol.setNumericScale(rsmd.getScale(i)); + } + catch (Exception e3) { /*probably not supported*/ } if (rsmd.isNullable(i) == DatabaseMetaData.columnNullable) { currCol.setIsNullable(true);