有没有快速的方法从所有表中获取所有列名MySQL,而不必列出所有表?
我正在尝试查找一个查询,它将返回一个表的外键列表以及它们引用的表和列.我在那里一半
SELECT a.table_name,
a.column_name,
a.constraint_name,
c.owner
FROM ALL_CONS_COLUMNS A, ALL_CONSTRAINTS C
where A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
and a.table_name=:TableName
and C.CONSTRAINT_TYPE = 'R'
Run Code Online (Sandbox Code Playgroud)
但我仍然需要知道此键引用了哪个表和主键.我怎么会这样?
我想从数据库模式中检索所有表名,如果可能的话,让所有表以指定的前缀开头.
我尝试使用JDBC,connection.getMetaData().getTables()但它根本不起作用.
Connection jdbcConnection = DriverManager.getConnection("", "", "");
DatabaseMetaData m = jdbcConnection.getMetaData();
ResultSet tables = m.getTables(jdbcConnection.getCatalog(), null, "TAB_%", null);
for (int i = 0; i < tables.getMetaData().getColumnCount(); i++) {
System.out.println("table = " + tables.getMetaData().getTableName(i));
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
我试图找到一种方法来获取给定实体类型的基础SQL表名称.我已经尝试过使用MetadataWorkspace查询,虽然我可以从对象或存储空间获取大量信息,但我似乎无法弄清楚如何在两者之间进行映射.
所以说我在对象模型中有一个名为Lookup的类型 - 如何在数据库中找到tablename(wws_lookups)?
我可以查询CSpace和SSpace的所有EntityType对象,我可以看到两者都正确列出,但我无法弄清楚如何从CSpace获取SSpace.
有没有办法做到这一点?
在Oracle中,有没有办法找出特定表的创建时间?
同样,有没有办法找出插入/最后更新特定行的时间?
我有一个ResultSet,返回不同类型的数据.查询是动态构造的,因此在编译时,我不知道查询将返回什么类型的值.
假设所有结果都是字符串,我编写了以下代码.但我也希望得到每个值的类型.我怎样才能做到这一点?
以下是我编写的代码.
while (reportTable_rst.next()) {
String column = reportTable_rst.getString(columnIterator);
}
Run Code Online (Sandbox Code Playgroud)
此时,我想获取列类型,并根据数据类型获取值.
我忙于编写一段代码来获取Oracle数据库中表的列名.我提出的代码如下所示:
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@<server>:1521:<sid>", <username>, <password>);
DatabaseMetaData meta = conn.getMetaData();
ResultSet columns = meta.getColumns(null, null, "EMPLOYEES", null);
int i = 1;
while (columns.next())
{
System.out.printf("%d: %s (%d)\n", i++, columns.getString("COLUMN_NAME"),
columns.getInt("ORDINAL_POSITION"));
}
Run Code Online (Sandbox Code Playgroud)
当我把这个代码运行到我的意外时,返回了太多的列.仔细观察发现ResultSet包含所有列的重复集合,即每列返回两次.这是我得到的输出:
1: ID (1)
2: NAME (2)
3: CITY (3)
4: ID (1)
5: NAME (2)
6: CITY (3)
Run Code Online (Sandbox Code Playgroud)
当我使用Oracle SQL Developer查看表时,它显示该表只有三列(ID,NAME,CITY).我已经在我的数据库中对几个不同的表尝试了这个代码,有些工作得很好,而其他人则表现出这种奇怪的行为.
Oracle JDBC驱动程序中是否存在错误?或者我在这里做错了什么?
更新:感谢Kenster我现在有另一种方法来检索列名.您可以从ResultSet中获取它们,如下所示:
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@<server>:1521:<sid>", <username>, <password>);
Statement st = conn.createStatement();
ResultSet rset = …Run Code Online (Sandbox Code Playgroud) I have been mucking around with XMLs for entity Framework. I tried to create a type of entity that could have properties injected at runtime,
First I created DynamicEntity object that is dynamic
public class DynamicEntity : DynamicObject
{
Dictionary<string, object> dynamicMembers = new Dictionary<string, object>();
public override bool TrySetMember(SetMemberBinder binder, object value)
{
dynamicMembers[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (dynamicMembers.TryGetValue(binder.Name, out result))
{
return dynamicMembers.TryGetValue(binder.Name, out result);
} …Run Code Online (Sandbox Code Playgroud) 运行以下内容时出现语法错误:
show columns from (select * from (select * from my_table) as T)
Run Code Online (Sandbox Code Playgroud)
如何从我编写的查询中显示列,而不是从表中显示?
我目前正在尝试列出特定表的所有列,并确定每列是否未签名.
这是我的测试夹具的一个例子:
CREATE TABLE ttypes
(
cbiginteger BIGINT UNSIGNED,
cinteger INT UNSIGNED,
csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
为了列出特定表的所有列,我发现了两种可能性:
SHOW FULL COLUMNS
FROM ttypes;
Run Code Online (Sandbox Code Playgroud)
根据文档,此查询返回以下字段:字段,类型,空,默认,额外和注释.它们都不允许我确定列是否未签名.
之后,我查看information_schema.columns哪个是SHOW COLUMNS查询使用的基表.
SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有结果字段允许我确定列是否未签名.