【发布时间】:2018-02-19 05:35:40
【问题描述】:
我正在尝试用 Java 确定 MySQL 数据库中的列顺序。我有表的创建语句(this.create)和列的名称(column.getName())。然后我在 create 语句中找到列名的索引。我将这些值分配给一个列表,然后使用 Collectio.sort() 对它们进行排序。然后使用它来确定列的顺序。唯一的问题是我没有得到预期的结果。这是我的代码:
public void orderColumns() {
List<Integer> cols = new ArrayList();
for ( column column : columns ) {
cols.add( this.create.indexOf( "`" + column.getName() + "`"));
}
Collections.sort( cols );
for ( column column : columns ) {
for ( int i = 0; i < cols.size(); i++) {
if ( this.create.indexOf( "`" + column.getName() + "`") == cols.get( i )) {
this.order_of_columns.add( column );
}
}
}
System.out.println(this.create);
for( column column : order_of_columns ) {
System.out.println( this.name + " : " + this.create.indexOf( "`" + column.getName() + "`") + " " + column.getName());
}
}
这是一张表的输出:
CREATE TABLE `versions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`version` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
versions : 77 name
versions : 119 version
versions : 28 id
对我做错了什么有任何想法吗?非常感谢您的帮助!
【问题讨论】:
-
我认为你的 for 循环可能有问题。你可以试试:
for ( column c : columns )而不是for ( column column : columns )?我不明白为什么 Java 编译器会编译它! -
你期待什么?
-
@cdaiga 因为这是合法的 Java。它为不同类型的标识符保留单独的名称空间。但是,约定是使用以大写开头的类名,因此
column作为类名不符合约定。 -
我希望整数按升序排列。