首先,我们先写一个包含了最经常使用的参数的存储过程,然后利用jdbc获得该存储过程的信息及它对应所有参数的信息及内容。
【该测试针对的是sqlserver2005.】
【测试用存储过程如何:请自行运行】
CREATE PROCEDURE proc_paras_test
@testBITINT BIGINT =0,
@testBINARY BINARY,
@test1BIT BIT ,
@testCHAR CHAR,
@testDATETIME DATETIME,
@testDECIMAL DECIMAL,
@testFLOAT FLOAT,
@testINT INT,
@testMONEY MONEY,
@testNCHAR NCHAR,
@testNTEXT NTEXT,
@testNUMBERIC NUMERIC,
@testNVARCHAR NVARCHAR,
@testREAL REAL,
@testSMALLDATETIME SMALLDATETIME,
@testSMALLINT SMALLINT,
@testSMALLMONEY SMALLMONEY,
@testTINYINT TINYINT,
@testXML XML,
@testVARCHAR VARCHAR(200),
@testOUTPUT_INT INT OUTPUT ,
@testOUTPUT_BIT BIT OUTPUT,
@testOUTPUT_NVARCHAR NVARCHAR(200) OUTPUT
AS
BEGIN
SELECT 'ok';
END
【程序编写】
下面将编写程序从Connection对象里面获取DataBaseMetaData ,从中获得我们需要的存储过程信息及对应参数,为了以后可以对照着来写代码生成器,我特意将所有常用的参数都加进去存储过程了,并且我也在程序里显示出从数据库里面获得的所有信息,
package TestCase;
import EWeb.DB.DBConnection;
import Easis.Common.StringUtil;
import Easis.DBUtility.DataColumn;
import Easis.DBUtility.DataTable;
import Easis.DBUtility.DataTableHelper;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import Easis.DBUtility.DataRow;
public class testDataBaseMetaInfo {
public static void main(String[] args){
Connection myconn= DBConnection.getConnection();
try{
DatabaseMetaData dbMeta=myconn.getMetaData();
Object ob2=dbMeta;
String procTerm= dbMeta.getProcedureTerm();
ResultSet rs= dbMeta.getProcedures(null, "dbo", "proc_paras_test");
DataTable dataTable= DataTableHelper.rs2datatable(rs);
rs.close();
ResultSet rs_columns= dbMeta.getProcedureColumns(null,"dbo","proc_paras_test",null);
DataTable dt_columns=DataTableHelper.rs2datatable(rs_columns);
rs_columns.close();
//--将相关信息打印出来
for (DataRow dr_proc: dataTable.getRows()){
System.out.print("存储过程序号:"+dr_proc.getRowNumber()+",相关参数如下:");
for (DataColumn column1:dr_proc.getColumns()){
System.out.println(StringUtil.Lpad(column1.getColumnName(),' ',20)+":"+column1.getString());
}
}
System.out.println("===================下面是相关存储过程的相关参数======================");
for (DataRow drow2:dt_columns.getRows()){
System.out.println("【参数序号:"+drow2.getRowNumber()+"】");
for (DataColumn col2:drow2.getColumns()){
System.out.println(StringUtil.Lpad(col2.getColumnName(),' ',20)+":"+col2.getString());
}
}
Object ob3="";
}
catch (Exception e){
e.printStackTrace();
}
}
}
【这个程序用了我一些工具类,大家是无法直接运行的,现在来看运行结果】
存储过程序号:0,相关参数如下:PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
NUM_INPUT_PARAMS :-1
NUM_OUTPUT_PARAMS :-1
NUM_RESULT_SETS :-1
REMARKS :
PROCEDURE_TYPE :2
===================下面是相关存储过程的相关参数======================
【参数序号:0】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@RETURN_VALUE
COLUMN_TYPE :5
DATA_TYPE :4
TYPE_NAME :int
PRECISION :10
LENGTH :4
SCALE :0
RADIX :10
NULLABLE :0
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :4
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :0
IS_NULLABLE :NO
SS_DATA_TYPE :56
【参数序号:1】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testBITINT
COLUMN_TYPE :1
DATA_TYPE :-5
TYPE_NAME :bigint
PRECISION :19
LENGTH :8
SCALE :0
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-5
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :1
IS_NULLABLE :YES
SS_DATA_TYPE :108
【参数序号:2】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testBINARY
COLUMN_TYPE :1
DATA_TYPE :-2
TYPE_NAME :binary
PRECISION :1
LENGTH :1
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-2
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :1
ORDINAL_POSITION :2
IS_NULLABLE :YES
SS_DATA_TYPE :37
【参数序号:3】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@test1BIT
COLUMN_TYPE :1
DATA_TYPE :-7
TYPE_NAME :bit
PRECISION :1
LENGTH :1
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-7
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :3
IS_NULLABLE :YES
SS_DATA_TYPE :50
【参数序号:4】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testCHAR
COLUMN_TYPE :1
DATA_TYPE :1
TYPE_NAME :char
PRECISION :1
LENGTH :1
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :1
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :1
ORDINAL_POSITION :4
IS_NULLABLE :YES
SS_DATA_TYPE :39
【参数序号:5】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testDATETIME
COLUMN_TYPE :1
DATA_TYPE :93
TYPE_NAME :datetime
PRECISION :23
LENGTH :16
SCALE :3
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :9
SQL_DATETIME_SUB :3
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :5
IS_NULLABLE :YES
SS_DATA_TYPE :111
【参数序号:6】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testDECIMAL
COLUMN_TYPE :1
DATA_TYPE :3
TYPE_NAME :decimal
PRECISION :18
LENGTH :20
SCALE :0
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :3
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :6
IS_NULLABLE :YES
SS_DATA_TYPE :106
【参数序号:7】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testFLOAT
COLUMN_TYPE :1
DATA_TYPE :8
TYPE_NAME :float
PRECISION :53
LENGTH :8
SCALE :
RADIX :2
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :6
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :7
IS_NULLABLE :YES
SS_DATA_TYPE :109
【参数序号:8】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testINT
COLUMN_TYPE :1
DATA_TYPE :4
TYPE_NAME :int
PRECISION :10
LENGTH :4
SCALE :0
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :4
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :8
IS_NULLABLE :YES
SS_DATA_TYPE :38
【参数序号:9】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testMONEY
COLUMN_TYPE :1
DATA_TYPE :3
TYPE_NAME :money
PRECISION :19
LENGTH :21
SCALE :4
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :3
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :9
IS_NULLABLE :YES
SS_DATA_TYPE :110
【参数序号:10】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testNCHAR
COLUMN_TYPE :1
DATA_TYPE :-15
TYPE_NAME :nchar
PRECISION :1
LENGTH :2
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-8
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :2
ORDINAL_POSITION :10
IS_NULLABLE :YES
SS_DATA_TYPE :39
【参数序号:11】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testNTEXT
COLUMN_TYPE :1
DATA_TYPE :-16
TYPE_NAME :ntext
PRECISION :1073741823
LENGTH :2147483646
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-10
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :2147483646
ORDINAL_POSITION :11
IS_NULLABLE :YES
SS_DATA_TYPE :35
【参数序号:12】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testNUMBERIC
COLUMN_TYPE :1
DATA_TYPE :2
TYPE_NAME :numeric
PRECISION :18
LENGTH :20
SCALE :0
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :2
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :12
IS_NULLABLE :YES
SS_DATA_TYPE :108
【参数序号:13】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testNVARCHAR
COLUMN_TYPE :1
DATA_TYPE :-9
TYPE_NAME :nvarchar
PRECISION :1
LENGTH :2
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-9
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :2
ORDINAL_POSITION :13
IS_NULLABLE :YES
SS_DATA_TYPE :39
【参数序号:14】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testREAL
COLUMN_TYPE :1
DATA_TYPE :7
TYPE_NAME :real
PRECISION :24
LENGTH :4
SCALE :
RADIX :2
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :7
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :14
IS_NULLABLE :YES
SS_DATA_TYPE :109
【参数序号:15】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testSMALLDATETIME
COLUMN_TYPE :1
DATA_TYPE :93
TYPE_NAME :smalldatetime
PRECISION :16
LENGTH :16
SCALE :0
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :9
SQL_DATETIME_SUB :3
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :15
IS_NULLABLE :YES
SS_DATA_TYPE :111
【参数序号:16】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testSMALLINT
COLUMN_TYPE :1
DATA_TYPE :5
TYPE_NAME :smallint
PRECISION :5
LENGTH :2
SCALE :0
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :5
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :16
IS_NULLABLE :YES
SS_DATA_TYPE :38
【参数序号:17】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testSMALLMONEY
COLUMN_TYPE :1
DATA_TYPE :3
TYPE_NAME :smallmoney
PRECISION :10
LENGTH :12
SCALE :4
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :3
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :17
IS_NULLABLE :YES
SS_DATA_TYPE :110
【参数序号:18】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testTINYINT
COLUMN_TYPE :1
DATA_TYPE :-6
TYPE_NAME :tinyint
PRECISION :3
LENGTH :1
SCALE :0
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-6
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :18
IS_NULLABLE :YES
SS_DATA_TYPE :38
【参数序号:19】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testXML
COLUMN_TYPE :1
DATA_TYPE :-16
TYPE_NAME :xml
PRECISION :1073741823
LENGTH :2147483646
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-10
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :2147483646
ORDINAL_POSITION :19
IS_NULLABLE :YES
SS_DATA_TYPE :0
【参数序号:20】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testVARCHAR
COLUMN_TYPE :1
DATA_TYPE :12
TYPE_NAME :varchar
PRECISION :200
LENGTH :200
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :12
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :200
ORDINAL_POSITION :20
IS_NULLABLE :YES
SS_DATA_TYPE :39
【参数序号:21】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testOUTPUT_INT
COLUMN_TYPE :2
DATA_TYPE :4
TYPE_NAME :int
PRECISION :10
LENGTH :4
SCALE :0
RADIX :10
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :4
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :21
IS_NULLABLE :YES
SS_DATA_TYPE :38
【参数序号:22】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testOUTPUT_BIT
COLUMN_TYPE :2
DATA_TYPE :-7
TYPE_NAME :bit
PRECISION :1
LENGTH :1
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-7
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :
ORDINAL_POSITION :22
IS_NULLABLE :YES
SS_DATA_TYPE :50
【参数序号:23】
PROCEDURE_CAT :JWebBase
PROCEDURE_SCHEM :dbo
PROCEDURE_NAME :proc_paras_test;1
COLUMN_NAME :@testOUTPUT_NVARCHAR
COLUMN_TYPE :2
DATA_TYPE :-9
TYPE_NAME :nvarchar
PRECISION :200
LENGTH :400
SCALE :
RADIX :
NULLABLE :1
REMARKS :
COLUMN_DEF :
SQL_DATA_TYPE :-9
SQL_DATETIME_SUB :
CHAR_OCTET_LENGTH :400
ORDINAL_POSITION :23
IS_NULLABLE :YES
SS_DATA_TYPE :39
参数很长吧?里面很多东西用不到的,现在我们简化一下,来看看哪些地方是将来要用到的。
【改写一下方法获取简洁的结果】
package TestCase;
import EWeb.DB.DBConnection;
import Easis.Common.StringUtil;
import Easis.DBUtility.DataColumn;
import Easis.DBUtility.DataTable;
import Easis.DBUtility.DataTableHelper;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import Easis.DBUtility.DataRow;
public class testDataBaseMetaInfo {
public static void main(String[] args){
Connection myconn= DBConnection.getConnection();
try{
DatabaseMetaData dbMeta=myconn.getMetaData();
Object ob2=dbMeta;
String procTerm= dbMeta.getProcedureTerm();
ResultSet rs= dbMeta.getProcedures(null, "dbo", "proc_paras_test");
DataTable dataTable= DataTableHelper.rs2datatable(rs);
rs.close();
ResultSet rs_columns= dbMeta.getProcedureColumns(null,"dbo","proc_paras_test",null);
DataTable dt_columns=DataTableHelper.rs2datatable(rs_columns);
rs_columns.close();
//--将相关信息打印出来
for (DataRow dr_proc: dataTable.getRows()){
System.out.print("存储过程序号:"+dr_proc.getRowNumber()+",相关参数如下:");
for (DataColumn column1:dr_proc.getColumns()){
System.out.println(StringUtil.Lpad(column1.getColumnName(),' ',20)+":"+column1.getString());
}
}
System.out.println("===================下面是相关存储过程的相关参数======================");
for (DataRow drow2:dt_columns.getRows()){
System.out.println("【参数序号:"+drow2.getRowNumber()+"】");
for (DataColumn col2:drow2.getColumns()){
System.out.println(StringUtil.Lpad(col2.getColumnName(),' ',20)+":"+col2.getString());
}
}
System.out.println("===================存储过程简化的参数======================");
for (DataRow drow23:dt_columns.getRows()){
String str_res="参数:【"+StringUtil.Lpad(drow23.get("COLUMN_NAME").toString(),' ',25)+"】,架构:"+drow23.get("PROCEDURE_SCHEM")+","+
"参数类型:【"+StringUtil.Lpad(drow23.get("TYPE_NAME").toString(),' ',14)
+"】,长度:【"+StringUtil.Lpad(drow23.get("LENGTH").toString(),' ',10)+"】,"+
"方向:【"+StringUtil.Lpad(drow23.get("COLUMN_TYPE").toString(),' ',2)+"】,"+
"允许空:【"+StringUtil.Lpad(drow23.get("IS_NULLABLE").toString(),' ',4)+"】,"
+"所属proc:【"+StringUtil.Lpad(drow23.get("PROCEDURE_NAME").toString(),' ',10)+"】";
System.out.println(str_res);
}
Object ob3="";
}
catch (Exception e){
e.printStackTrace();
}
}
}
【运行,结果如下:(只列出需要看到的参数)】
参数:【@RETURN_VALUE 】,架构:dbo,参数类型:【int 】,长度:【4 】,方向:【5 】,允许空:【NO 】,所属proc:【proc_paras_test;1】
参数:【@testBITINT 】,架构:dbo,参数类型:【bigint 】,长度:【8 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testBINARY 】,架构:dbo,参数类型:【binary 】,长度:【1 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@test1BIT 】,架构:dbo,参数类型:【bit 】,长度:【1 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testCHAR 】,架构:dbo,参数类型:【char 】,长度:【1 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testDATETIME 】,架构:dbo,参数类型:【datetime 】,长度:【16 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testDECIMAL 】,架构:dbo,参数类型:【decimal 】,长度:【20 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testFLOAT 】,架构:dbo,参数类型:【float 】,长度:【8 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testINT 】,架构:dbo,参数类型:【int 】,长度:【4 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testMONEY 】,架构:dbo,参数类型:【money 】,长度:【21 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testNCHAR 】,架构:dbo,参数类型:【nchar 】,长度:【2 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testNTEXT 】,架构:dbo,参数类型:【ntext 】,长度:【2147483646】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testNUMBERIC 】,架构:dbo,参数类型:【numeric 】,长度:【20 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testNVARCHAR 】,架构:dbo,参数类型:【nvarchar 】,长度:【2 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testREAL 】,架构:dbo,参数类型:【real 】,长度:【4 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testSMALLDATETIME 】,架构:dbo,参数类型:【smalldatetime 】,长度:【16 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testSMALLINT 】,架构:dbo,参数类型:【smallint 】,长度:【2 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testSMALLMONEY 】,架构:dbo,参数类型:【smallmoney 】,长度:【12 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testTINYINT 】,架构:dbo,参数类型:【tinyint 】,长度:【1 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testXML 】,架构:dbo,参数类型:【xml 】,长度:【2147483646】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testVARCHAR 】,架构:dbo,参数类型:【varchar 】,长度:【200 】,方向:【1 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testOUTPUT_INT 】,架构:dbo,参数类型:【int 】,长度:【4 】,方向:【2 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testOUTPUT_BIT 】,架构:dbo,参数类型:【bit 】,长度:【1 】,方向:【2 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
参数:【@testOUTPUT_NVARCHAR 】,架构:dbo,参数类型:【nvarchar 】,长度:【400 】,方向:【2 】,允许空:【YES 】,所属proc:【proc_paras_test;1】
看到了没有?上面就是mssql的参数对照表,然后我们又要硬编码自行转换了。
补充DataTableHelper代码如下:
package net.w2p.Shared.common.DB; import java.sql.ResultSet; import java.sql.ResultSetMetaData; public class DataTableHelper { public static DataTable rs2datatable(ResultSet rsList) { DataTable mytable = new DataTable(); if (rsList == null) { return mytable; } try { ResultSetMetaData mdata = rsList.getMetaData(); mytable.setColumnCount(mdata.getColumnCount()); boolean firstGetColumnName = true; int cindex = 0; while (rsList.next()) { DataRow myrow = new DataRow(); myrow.setRowNumber(cindex); cindex++; for (int j = 0; j < mytable.getColumnCount(); j++) { if (firstGetColumnName == true) { mytable.addColumnName(mdata.getColumnName(j + 1)); } String columnKeyName = (String)mytable.getColumnNames().get(j); Object columnValue = rsList.getObject(j + 1); DataColumn dcolumn = new DataColumn(); dcolumn.setColumnNumber(j); dcolumn.setColumnName(columnKeyName); dcolumn.setColumnValue(columnValue); myrow.addDataColumn(dcolumn); } firstGetColumnName = false; mytable.getRows().add(myrow); } return mytable; } catch (Exception e) { e.printStackTrace(); } return mytable; } }
注意,其他额外的对象为:
package net.w2p.Shared.common.DB; import java.util.ArrayList; public class DataTable { /* 6 */ protected int _RowCount = -1; /* 7 */ private int _columnCount = -1; /* 8 */ private ArrayList<String> _columnNames = new ArrayList(); /* 9 */ private ArrayList<DataRow> _RowList = new ArrayList(); protected void setRowCount(int rowCount) { /* 12 */ if (this._RowCount >= 0) { /* 14 */ this._RowCount = rowCount; } } public int getRowCount() { /* 18 */ return this._RowList.size(); } public int getColumnCount() { /* 22 */ if (this._columnCount < 0) { /* 23 */ return this._columnNames.size(); } /* 25 */ return this._columnCount; } /* 28 */ protected void setColumnCount(int columnCount) { if (columnCount >= 0) { /* 29 */ this._columnCount = columnCount; } } public DataRow get(int RowIndex) { /* 36 */ if (this._RowList.size() <= RowIndex) { /* 37 */ return null; } /* 40 */ return (DataRow)this._RowList.get(RowIndex); } protected void addColumnName(String columnName) { /* 45 */ this._columnNames.add(columnName); } public ArrayList<String> getColumnNames() { /* 49 */ return this._columnNames; } /* 52 */ public ArrayList<DataRow> getRows() { return this._RowList; } }