Java 使用StringBuilder接收所有列
我编写了一个方法,它执行以下命令:select、insert、update、delete。最初,在运行Java 使用StringBuilder接收所有列,java,mysql,Java,Mysql,我编写了一个方法,它执行以下命令:select、insert、update、delete。最初,在运行SELECT*fromsithlords之后,我只需要输出的前两列。如何获取所有的行和列?此外,我如何允许用户在运行select命令时添加换行符,如下所示: 选择绝地武士的名字 来自西斯洛兹 其中级别=‘主级’ 到目前为止,它只执行一行: 从SithLords中选择绝地武士的名字,等级='master' 代码: public void actionPerformed(ActionEvent e)
SELECT*fromsithlords
之后,我只需要输出的前两列。如何获取所有的行和列?此外,我如何允许用户在运行select命令时添加换行符,如下所示:
选择绝地武士的名字
来自西斯洛兹
其中级别=‘主级’代码>
到目前为止,它只执行一行:
从SithLords中选择绝地武士的名字,等级='master'代码>
代码:
public void actionPerformed(ActionEvent e) {
String query = queryStatements.getText();
try {
PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(query);
if(query.matches("(select|SELECT).*")) {
ResultSet result = stmt.executeQuery();
StringBuilder strResult = new StringBuilder();
while(result.next()) {
strResult.append(result.getString(1)).append(" ").append(result.getString(2));
strResult.append("\n");
}
queryResults.setText(strResult.toString());
} else if(query.matches("(insert|INSERT).*")) {
stmt.executeUpdate(query);
} else if(query.matches("(update|UPDATE).*")) {
stmt.executeUpdate(query);
} else if(query.matches("(delete|DELETE).*")) {
stmt.executeUpdate(query);
} else {
System.out.println("Not supported yet!");
}
} catch (SQLException error) {
error.printStackTrace();
}
}
如果您想从recorset中检索其所有列,您可以询问它有多少列(n)以及从1到n的访问权限:
ResultSet result = stmt.executeQuery();
ResultSetMetaData md = result.getMetaData();
int nCols = md.getColumnCount();
for(int c = 1; c <= nCols; c++)
strResult.append(result.getString(c).append(" "));
我完全不明白你的问题。@nachokk我会重新编辑它。全部完成!啊,所以反过来,它真的把所有的空间实例移到一行中。我不知道为什么我没有想到这一点。谢谢你指出这一点,巴勃罗!哦,nCols
不应该是Int类型吗?是的,它是一个代码片段,但我将进行编辑以包含nCols声明。在结果集开始之前,我得到一个sql异常。@TheGrayFox在prepareStatement?
query.replaceAll("(\\r|\\n)", " ");