📄 resultsetmetadata.java
字号:
* @throws java.sql.SQLException if a database access error occurs
*/
public String getColumnTypeName(int column) throws java.sql.SQLException {
int mysqlType = getField(column).getMysqlType();
switch (mysqlType) {
case MysqlDefs.FIELD_TYPE_DECIMAL:
return "DECIMAL";
case MysqlDefs.FIELD_TYPE_TINY:
return "TINY";
case MysqlDefs.FIELD_TYPE_SHORT:
return "SHORT";
case MysqlDefs.FIELD_TYPE_LONG:
return "LONG";
case MysqlDefs.FIELD_TYPE_FLOAT:
return "FLOAT";
case MysqlDefs.FIELD_TYPE_DOUBLE:
return "DOUBLE";
case MysqlDefs.FIELD_TYPE_NULL:
return "NULL";
case MysqlDefs.FIELD_TYPE_TIMESTAMP:
return "TIMESTAMP";
case MysqlDefs.FIELD_TYPE_LONGLONG:
return "LONGLONG";
case MysqlDefs.FIELD_TYPE_INT24:
return "INT";
case MysqlDefs.FIELD_TYPE_DATE:
return "DATE";
case MysqlDefs.FIELD_TYPE_TIME:
return "TIME";
case MysqlDefs.FIELD_TYPE_DATETIME:
return "DATETIME";
case MysqlDefs.FIELD_TYPE_TINY_BLOB:
return "TINYBLOB";
case MysqlDefs.FIELD_TYPE_MEDIUM_BLOB:
return "MEDIUMBLOB";
case MysqlDefs.FIELD_TYPE_LONG_BLOB:
return "LONGBLOB";
case MysqlDefs.FIELD_TYPE_BLOB:
if (getField(column).isBinary()) {
return "BLOB";
} else {
return "TEXT";
}
case MysqlDefs.FIELD_TYPE_VAR_STRING:
return "VARCHAR";
case MysqlDefs.FIELD_TYPE_STRING:
return "CHAR";
case MysqlDefs.FIELD_TYPE_ENUM:
return "ENUM";
case MysqlDefs.FIELD_TYPE_SET:
return "SET";
case MysqlDefs.FIELD_TYPE_YEAR:
return "YEAR";
default:
return "UNKNOWN";
}
}
/**
* Is the column a cash value?
*
* @param column the first column is 1, the second is 2...
* @return true if its a cash column
* @throws java.sql.SQLException if a database access error occurs
*/
public boolean isCurrency(int column) throws java.sql.SQLException {
return false;
}
/**
* Will a write on this column definately succeed?
*
* @param column the first column is 1, the second is 2, etc..
* @return true if so
* @throws java.sql.SQLException if a database access error occurs
*/
public boolean isDefinitelyWritable(int column)
throws java.sql.SQLException {
return isWritable(column);
}
/**
* Can you put a NULL in this column?
*
* @param column the first column is 1, the second is 2...
* @return one of the columnNullable values
* @throws java.sql.SQLException if a database access error occurs
*/
public int isNullable(int column) throws java.sql.SQLException {
if (!getField(column).isNotNull()) {
return java.sql.ResultSetMetaData.columnNullable;
} else {
return java.sql.ResultSetMetaData.columnNoNulls;
}
}
/**
* What is a column's number of decimal digits.
*
* @param column the first column is 1, the second is 2...
* @return the precision
* @throws java.sql.SQLException if a database access error occurs
*/
public int getPrecision(int column) throws java.sql.SQLException {
Field f = getField(column);
if (isDecimalType(f.getSQLType())) {
if (f.getDecimals() > 0) {
return f.getLength() - 1 + f.getPrecisionAdjustFactor();
}
return f.getLength() + f.getPrecisionAdjustFactor();
}
return 0;
}
/**
* Is the column definitely not writable?
*
* @param column the first column is 1, the second is 2, etc.
* @return true if so
* @throws java.sql.SQLException if a database access error occurs
*/
public boolean isReadOnly(int column) throws java.sql.SQLException {
return false;
}
/**
* What is a column's number of digits to the right of the
* decimal point?
*
* @param column the first column is 1, the second is 2...
* @return the scale
* @throws java.sql.SQLException if a database access error occurs
*/
public int getScale(int column) throws java.sql.SQLException {
Field f = getField(column);
if (isDecimalType(f.getSQLType())) {
return f.getDecimals();
}
return 0;
}
/**
* What is a column's table's schema? This relies on us knowing
* the table name.
*
* The JDBC specification allows us to return "" if this is not
* applicable.
*
* @param column the first column is 1, the second is 2...
* @return the Schema
* @throws java.sql.SQLException if a database access error occurs
*/
public String getSchemaName(int column) throws java.sql.SQLException {
return "";
}
/**
* Can the column be used in a WHERE clause? Basically for
* this, I split the functions into two types: recognised
* types (which are always useable), and OTHER types (which
* may or may not be useable). The OTHER types, for now, I
* will assume they are useable. We should really query the
* catalog to see if they are useable.
*
* @param column the first column is 1, the second is 2...
* @return true if they can be used in a WHERE clause
* @throws java.sql.SQLException if a database access error occurs
*/
public boolean isSearchable(int column) throws java.sql.SQLException {
return true;
}
/**
* Is the column a signed number?
*
* @param column the first column is 1, the second is 2...
* @return true if so
* @throws java.sql.SQLException if a database access error occurs
*/
public boolean isSigned(int column) throws java.sql.SQLException {
Field f = getField(column);
int sqlType = f.getSQLType();
switch (sqlType) {
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
case Types.BIGINT:
case Types.FLOAT:
case Types.REAL:
case Types.DOUBLE:
case Types.NUMERIC:
case Types.DECIMAL:
return !f.isUnsigned();
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
return false;
default:
return false;
}
}
/**
* Whats a column's table's name?
*
* @param column the first column is 1, the second is 2...
* @return column name, or "" if not applicable
* @throws java.sql.SQLException if a database access error occurs
*/
public String getTableName(int column) throws java.sql.SQLException {
return getField(column).getTableName();
}
/**
* Is it possible for a write on the column to succeed?
*
* @param column the first column is 1, the second is 2, etc.
* @return true if so
* @throws java.sql.SQLException if a database access error occurs
*/
public boolean isWritable(int column) throws java.sql.SQLException {
return !isReadOnly(column);
}
// *********************************************************************
//
// END OF PUBLIC INTERFACE
//
// *********************************************************************
/**
* Returns the field instance for the given column index
*
* @param columnIndex the column number to retrieve a field instance for
* @return the field instance for the given column index
*
* @throws java.sql.SQLException if an error occurs
*/
protected Field getField(int columnIndex) throws java.sql.SQLException {
if ((columnIndex < 1) || (columnIndex > fields.length)) {
throw new java.sql.SQLException("Column index out of range.",
SQLError.SQL_STATE_INVALID_COLUMN_NUMBER);
}
return fields[columnIndex - 1];
}
/**
* Checks if the SQL Type is a Decimal/Number Type
* @param type SQL Type
*/
private static final boolean isDecimalType(int type) {
switch (type) {
case Types.BIT:
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
case Types.BIGINT:
case Types.FLOAT:
case Types.REAL:
case Types.DOUBLE:
case Types.NUMERIC:
case Types.DECIMAL:
return true;
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -