我正在尝试使用字符“,”上的用户分割填充的字段。但是,用户文本中可能会有不同数量的逗号。我将它用于JDBC,用户输入整个查询,我可以将他们选择的列保存在数组中。
例如,我想进行如下的简单拆分。
String usr = "SELECT NAME, DATE, AGE, PETS FROM CUSTOMER";
String[] parts = usr.split(",");
String[] part1 = parts[0];
String[] part2 = parts[1];
String[] part3 = parts[2];
只需要生成最少量的零件数组来保存字符串,而不是创建大量可能为空的数组,而不是预设数组量。有一种简单的方法可以做到这一点吗?
答案 0 :(得分:1)
请尝试以下解决方案:
private List<String> getColumnNames( String query, Connection conn )
{
List<String> columnNames = new ArrayList<>();
try
{
PreparedStatement ps = conn.prepareStatement(query);
ResultSetMetaData meta = ps.getMetaData();
if ( meta != null )
{
for ( int i = 1; i <= meta.getColumnCount(); i++ ) //columns start with "1" not "0" for ResultSetMetaData.
{
columnNames.add( meta.getColumnName(i) );
}
}
}
catch ( SQLException e )
{
e.printStackTrace();
}
return columnNames;
}
此代码的作用是 - 它获取有关ResultSet
的元数据,在执行语句时将返回。但是你赢了执行它。它只是检查查询的完整性,并获取查询中的列!
PreparedStatement
已预编译,因此包含metadata
关于执行查询时将返回的ResultSet
,但正如我所说,您不需要执行 - 这里唯一的目的是进行健全性检查并获取列名称。
答案 1 :(得分:0)
在"SELECT NAME, DATE, AGE, PETS FROM CUSTOMER"
上分割","
会导致
["SELECT NAME", " DATE", " AGE", " PETS FROM CUSTOMER"]
您不需要在第一次拆分后拆分每个元素。