请问java中如何获得数据类型

请问java中如何获得数据类型,第1张

您好,提问者:

//如果要得到一个类的具体什么类型,需要进行反射 *** 作,实例代码:

String str = "123";

Systemoutprintln(strgetClass()getName());

输出:javalangString

可以查看一下API文档

Java获取数据库的表中各字段的字段名,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

import javasqlConnection;

import javasqlDriverManager;

import javasqlResultSet;

import javasqlPreparedStatement;

import javasqlResultSetMetaData;

import javasqlSQLException;

public class TestDemo {

public static Connection getConnection() {

Connection conn = null;

try {

ClassforName("commysqljdbcDriver");

String url = "jdbc:mysql://数据库IP地址:3306/数据库名称";

String user = "数据库用户名";

String pass = "数据库用户密码";

conn = DriverManagergetConnection(url, user, pass);

} catch (ClassNotFoundException e) {

eprintStackTrace();

} catch (SQLException e) {

eprintStackTrace();

}

return conn;

}

public static void main(String[] args) {

Connection conn = getConnection();

String sql = "select from AccessType";

PreparedStatement stmt;

try {

stmt = connprepareStatement(sql);

ResultSet rs = stmtexecuteQuery(sql);

ResultSetMetaData data = rsgetMetaData();

for (int i = 1; i <= datagetColumnCount(); i++) {

// 获得所有列的数目及实际列数

int columnCount = datagetColumnCount();

// 获得指定列的列名

String columnName = datagetColumnName(i);

// 获得指定列的列值

int columnType = datagetColumnType(i);

// 获得指定列的数据类型

String columnTypeName = datagetColumnTypeName(i);

// 所在的Catalog名字

String catalogName = datagetCatalogName(i);

// 对应数据类型的类

String columnClassName = datagetColumnClassName(i);

// 在数据库中类型的最大字符个数

int columnDisplaySize = datagetColumnDisplaySize(i);

// 默认的列的标题

String columnLabel = datagetColumnLabel(i);

// 获得列的模式

String schemaName = datagetSchemaName(i);

// 某列类型的精确度(类型的长度)

int precision = datagetPrecision(i);

// 小数点后的位数

int scale = datagetScale(i);

// 获取某列对应的表名

String tableName = datagetTableName(i);

// 是否自动递增

boolean isAutoInctement = dataisAutoIncrement(i);

// 在数据库中是否为货币型

boolean isCurrency = dataisCurrency(i);

// 是否为空

int isNullable = dataisNullable(i);

// 是否为只读

boolean isReadOnly = dataisReadOnly(i);

// 能否出现在where中

boolean isSearchable = dataisSearchable(i);

Systemoutprintln(columnCount);

Systemoutprintln("获得列" + i + "的字段名称:" + columnName);

Systemoutprintln("获得列" + i + "的类型,返回SqlType中的编号:"+ columnType);

Systemoutprintln("获得列" + i + "的数据类型名:" + columnTypeName);

Systemoutprintln("获得列" + i + "所在的Catalog名字:"+ catalogName);

Systemoutprintln("获得列" + i + "对应数据类型的类:"+ columnClassName);

Systemoutprintln("获得列" + i + "在数据库中类型的最大字符个数:"+ columnDisplaySize);

Systemoutprintln("获得列" + i + "的默认的列的标题:" + columnLabel);

Systemoutprintln("获得列" + i + "的模式:" + schemaName);

Systemoutprintln("获得列" + i + "类型的精确度(类型的长度):" + precision);

Systemoutprintln("获得列" + i + "小数点后的位数:" + scale);

Systemoutprintln("获得列" + i + "对应的表名:" + tableName);

Systemoutprintln("获得列" + i + "是否自动递增:" + isAutoInctement);

Systemoutprintln("获得列" + i + "在数据库中是否为货币型:" + isCurrency);

Systemoutprintln("获得列" + i + "是否为空:" + isNullable);

Systemoutprintln("获得列" + i + "是否为只读:" + isReadOnly);

Systemoutprintln("获得列" + i + "能否出现在where中:"+ isSearchable);

}

} catch (SQLException e) {

eprintStackTrace();

}

}

}

ArrayList 存放的是一个泛型,所以只能把它当成Object类型来使用

所以从思路上来说 你就只能看Object这个类的成员函数

Object有一个成员函数getClass() 通过它可以取出List中某一个对象的举起的类

    /

      Returns the unique instance of {@link Class} that represents this

      object's class Note that {@code getClass()} is a special case in that it

      actually returns {@code Class< extends Foo>} where {@code Foo} is the

      erasure of the type of the expression {@code getClass()} was called upon

      <p>

      As an example, the following code actually compiles, although one might

      think it shouldn't:

      <p>

      <pre>{@code

        List<Integer> l = new ArrayList<Integer>();

        Class< extends List> c = lgetClass();}</pre>

     

      @return this object's {@code Class} instance

     /

    public final native Class<> getClass();

晕,Textbox里面的数据是什么数据类型!!当然是字符串了!!我猜你的意思是想判断下用户在里面输入了什么吧?比如说是输入了数字,字母,还是汉字什么的。

如果是这样的话 你写个判断函数就是了。用left 函数在循环中把每个字符取出来,转换成ASCII码 判断下该字符的ASCII范围就知道了该字符是 数字,字母,还是汉字了。希望能对你有帮助。

经过access测试,ok

String url = "jdbc:odbc:test";//最后一个为数据库名

Statement sm = null;

String command = null;

ResultSet rs = null;

String tableName = null;

String cName = null;

String result = null;

String []pram = new String[1];

List <String> tables = new ArrayList<String>();

pram[0] = "table";

BufferedReader input = new BufferedReader(new InputStreamReader(

Systemin));

try {

try {

ClassforName("sunjdbcodbcJdbcOdbcDriver"); // 加载驱动

} catch (ClassNotFoundException e) {

Systemoutprintln("Can not load Jdbc-Odbc Bridge Driver");

Systemerrprint("ClassNotFoundException:");

Systemerrprintln(egetMessage());

}

Connection con = DriverManagergetConnection(url, "admin", "admin"); // 连接到数据库

DatabaseMetaData dm = congetMetaData();

rs = dmgetTables(null, null, null, pram);//查找所有的表

while(rsnext()){

tablesadd(rsgetString(3));

}

rsclose();

for(String tb : tables){

rs = dmgetColumns(null, null, tb, null);//查找当前表的字段

Systemoutprintln("\nthe table is: " + tb);

ResultSetMetaData rsmd = rsgetMetaData();

int len, type;

len = rsmdgetColumnCount();

// Systemoutprintln(len);

for(int i = 1; i <= len; i ++){

type = rsmdgetColumnType(i);

//这里是获取了一个字段类型的int型,需要转化成string的话要做一个swtich,就不转了,你自己看javasqlTypes这个类去

Systemoutprint("\t" + rsmdgetColumnName(i) + ": " + rsmdgetColumnType(i));

}

}

rsclose();

conclose();

// }

} catch (SQLException ex) {

Systemoutprintln("SQLException:");

while (ex != null) {

Systemoutprintln("Message:" + exgetMessage());

ex = exgetNextException();

}

} catch (Exception e) {

Systemoutprintln("IOException");

}

CREATE  PROCEDURE gettableinfo 

/@TableName varchar(32)/

AS

   

/创建临时表/

create table #TableFields(

  tableName   varchar(32),

  fieldname   varchar(32),

  fieldtype   varchar(32),

  fieldlength varchar(32),

  scale       varchar(32),

  des         varchar(256), 

  defaultvalue varchar(32),

  CanNULL varchar(32)

)

/ 声明游标/ 

declare table_cur scroll cursor

for select sysobjectsname from sysobjects where sysobjectsxtype = 'U'

for update of sysobjectsname

/声明临时表名/

declare @TName varchar(32)

/ 打开游标/

open table_cur

fetch next from table_cur into @TName

while @@fetch_status=0 begin

      SELECT sysobjectsname AS tableName, syscolumnsname AS filedname, 

      systypesname AS fieldtype, syscolumnslength, 

      syscolumnsscale

   into #FiledInfo_Master

   FROM syscolumns INNER JOIN

      systypes ON syscolumnsxtype = systypesxtype INNER JOIN

      sysobjects ON syscolumnsid = sysobjectsid

WHERE (sysobjectsxtype = 'U') AND (systypesname <> 'sysname') and   sysobjectsname=@TName

     /得到字段描述/

     SELECT objname as filedname ,value   into  #FiledInfo

     FROM ::fn_listextendedproperty('MS_Description', 'user',

       'dbo', 'table', @TName, 

      'column', DEFAULT) 

      

      

/得到字段缺省值/

  SELECT objname  as filedname, value as defaultvalue 

  into  #FiledInfo2

  FROM ::fn_listextendedproperty('DefaultValue', 'user',

       'dbo', 'table', @TName, 

      'column', DEFAULT) 

      

/得到字段是否可为空/

SELECT objname  as filedname, value as CanNULL 

  into  #FiledInfo3

  FROM ::fn_listextendedproperty('MS_AllowBlanks', 'user',

       'dbo', 'table', @TName, 

      'column', DEFAULT) 

      

      

      

/联结字段描述和属性/      

insert into #TableFields

SELECT cast(#FiledInfo_MastertableName as varchar(32)) ,

      cast(#FiledInfo_Masterfiledname as  varchar(32)),

      cast(#FiledInfo_Masterfieldtype  as varchar(32)), 

      cast(#FiledInfo_Masterlength as  varchar(32)),

      cast(#FiledInfo_Masterscale as  varchar(32)),

      cast(#FiledInfo[value] as  varchar(256)), 

      cast(#FiledInfo2defaultvalue  as varchar(32)),

      cast(#FiledInfo3CanNULL  as  varchar(32))

      

FROM dbo#FiledInfo_Master LEFT OUTER JOIN

      dbo#FiledInfo ON dbo#FiledInfo_Masterfiledname = dbo#FiledInfoFiledName

     LEFT OUTER JOIN dbo#FiledInfo2

       ON dbo#FiledInfo_Masterfiledname = dbo#FiledInfo2FiledName

LEFT OUTER JOIN dbo#FiledInfo3

       ON dbo#FiledInfo_Masterfiledname = dbo#FiledInfo3FiledName

where 

#FiledInfo_Mastertablename=@TName 

fetch next from table_cur into @TName  

--if exists (select  from dbosysobjects where id = object_id(N'#FiledInfo_Master') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table #FiledInfo_Master

--if exists (select  from dbosysobjects where id = object_id(N'#FiledInfo') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table #FiledInfo

--if exists (select  from dbosysobjects where id = object_id(N'#FiledInfo2') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table #FiledInfo2

drop table #FiledInfo3       

end

select  from #TableFields

deallocate table_cur

GO

SET QUOTED_IDENTIFIER OFF 

GO

SET ANSI_NULLS ON 

GO

以上就是关于\请问java中如何获得数据类型全部的内容,包括:\请问java中如何获得数据类型、java怎样读取数据库表中字段的数据类型、怎样取到ArrayList中的数据类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9341473.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存