你查询用的select里没有表名吗

解决方案 »

  1.   

    对表名要通过sql 语句实现。jdbc是没有实现sybase 里是 select * from sysobjects where type ='u' (得到用户表)
      

  2.   

    不知道你用的是什么数据库,如果是oracle的话,可以用oracle的JDBC driver,它里面的ResultSetMetaData可以取到表名。另外一个方法,在oracle里面有很多object,你可以写SQL进行查询,然后得到含有列名(colname)的TableName.
      

  3.   

    呵呵,估计只能换个驱动了...
    jdbcodbc仅仅演示用的,干嘛非要要它?
    其他的驱动应该都实现了esultSetMetaData...
      

  4.   

    什么是通过列名得到表名呢?不同的表有相同的列名怎么办呢?列应该不会保持对表的引用关系的就是通过ResultSetMetaData去获取,要jdbc去实现那个方法不然就要去数据库里查询得到表名。
      

  5.   

    数据库应该是一个向下的合成模式,库保持对表的引用,表保持对字段的引用反过来应该就不行。建议楼主换一个驱动,下载一个特定数据库的jdbc驱动
    这样就可以用纯java来写数据库操作程序而用JdbcOdbcDriver桥接,odbc部分是用C++实现的。
      

  6.   

    俺倒是想到一个土办法,根据列名来获取表名。
    其实很简单,首先获取所有的表名,记录下来。有了表名,就可以知道其Meta信息了,可以获取相应的列名。然后把已知的列名在所有列名中遍历,对应的所有表名就可以得到了。
    提供一段获取所有表名的代码片断,主要靠DatabaseMetaData:
    <<
    DatabaseMetaData databaseMetaData = conn.getMetaData();
            String[] tableType = {"TABLE"};
            ResultSet resultSet = databaseMetaData.getTables(null, null, "%", tableType);        try {
                while(resultSet.next()) {
                    String schemaName = resultSet.getString(2);
                    String tableName = resultSet.getString(3);
                }
            } finally {
                resultSet.close();
            }
    >>
      

  7.   

    请问可否提供一个可支持常用数据库 Access,Sql server, MySql,Db2,Oracle 等的驱动
      

  8.   

    用的时候换驱动啊
    你用jdbcodbcdriver也要为每一种数据库分别建立数据源的啊只要更换连接时的DriverManager和url就行。
      

  9.   

    通过特定的驱动实现了,我想原因在于有些驱动中未实现getTableName方法!
      

  10.   

    驱动从数据库厂商网站下载
    http://otn.oracle.com/software/tech/java/sqlj_jdbc/index.html