您好我刚开始用Java编写Java(实际上也是不久前用Java开始的......) 我创建了一个与MySQL数据库连接的类,这一切都运行良好。
现在我有一个获得结果的问题。
在PHP中我会做类似
的事情While($row = mysql_fetch_assoc()) {
echo $row['rowname'];
}
在Java中,我尝试创建类似于此的东西,但我不知道我是以正确的方式还是应该有很大的不同或其他......这就是我所做的(参见getResultList方法)
public class MysqlConnect{
private String query;
private ResultSet rs;
public void connectToAndQueryDatabase(String database, String username, String password) throws SQLException {
Connection con = null;
try {
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/" + database,
username,
password);
} catch (SQLException e) {
e.printStackTrace();
}
Statement stmt = con.createStatement();
rs = stmt.executeQuery(query);
}
public void setQuery(String query) {
this.query = query;
}
public List getResultList() {
ArrayList<HashMap> row = new ArrayList<HashMap>();
while(row = rs.next()) {
}
return rs;
}
}
答案 0 :(得分:3)
ResultSetMetaData是一个接口,它提供有关ResultSet的所有信息,如生成的ResultSet的所有列名,类型,长度等。
只需使用该界面即可。有关API的更多信息和文档,请访问Oracle网站。
答案 1 :(得分:3)
尝试以下代码。使用所需的查询和凭据更改查询,网址,用户,密码。
public static void main(String args[]) {
String url = "database url";
Connection con;
String query = "Your select query here";
Statement stmt;
try {
Class.forName("Full driver class name");
} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try {
con = DriverManager.getConnection(url,
"user", "password");
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
int rowCount = 1;
while (rs.next()) {
System.out.println("Row " + rowCount + ": ");
for (int i = 1; i <= numberOfColumns; i++) {
System.out.print(" Column " + i + ": ");
System.out.println(rs.getString(i));
}
System.out.println("");
rowCount++;
}
stmt.close();
con.close();
} catch(SQLException ex) {
System.err.print("SQLException: ");
System.err.println(ex.getMessage());
}
}
有关文档和api,请访问以下oracle网站。
答案 2 :(得分:2)
在你的while循环中你使用了赋值运算符。 rs.next()返回true或false
while(row=rs.next())
{}
你可以简单地说,
while(rs.next())
{}
答案 3 :(得分:2)
它非常容易在java中完成,你很擅长这个代码,你可以在这个链接中看到并查看示例
http://www.roseindia.net/answers/viewqa/Java-Beginners/3488-mysql-with-jsp.html
答案 4 :(得分:2)
public void connectToAndQueryDatabase(String username, String password) {
Connection con = DriverManager.getConnection(
"jdbc:myDriver:myDatabase",
username,
password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
}
了解如何使用JDBC的最佳位置是Oracle网站的JDBC tutorial。
要了解如何从结果集中检索值,请查看本教程的this部分。
ResultSet对象是表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
您可以通过游标访问ResultSet对象中的数据。注意 此游标不是数据库游标。这个游标是一个指针 指向ResultSet中的一行数据。最初,光标是 位于第一行之前。 ResultSet.next方法移动了 光标到下一行。如果光标是,则此方法返回false 位于最后一排之后。这种方法反复调用 带有while循环的ResultSet.next方法迭代遍历所有 ResultSet中的数据。
ResultSet接口声明了getter方法(例如, getBoolean和getLong)用于从当前检索列值 行。您可以使用索引编号检索值 列或列的别名或名称。列索引通常是 更高效。列从1开始编号。为了最大程度的便携性, 应该从左到右读取每行中的结果集列 订单,每列应该只读一次。
答案 5 :(得分:2)
ResultSet中有很多方法可以处理它。
如果您需要循环播放,请使用
rs.next();
如果您需要通过别名获取列:
rs.getString("alias");
rs.getFloat("other_alias");
// or by column index
rs.getString(3);
您还有一个实用程序类,用于提取有关结果集的信息,如列数及其名称:
rs.getMetaData();
确保在完成连接后关闭连接。
答案 6 :(得分:2)
刚刚将结果集转到下面的方法,它将返回您正在寻找的所需结果。
public List<Map<String, Object>> getResultsList(ResultSet rs) throws SQLException
{
ResultSetMetaData metadata = rs.getMetaData();
int columns = metadata.getColumnCount();
List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();
while (rs.next())
{
Map<String, Object> row = new HashMap<String, Object>(columns);
for (int i = 1; i <= columns; ++i)
{
row.put(metadata.getColumnName(i), rs.getObject(i));
}
results.add(row);
}
return results;
}
答案 7 :(得分:2)
处理Database Java提供了java.sql。*包。您需要阅读此API的Java文档并了解它们的用法。只有在了解java.sql。* package的用法时,才能根据业务需求应用最佳逻辑和技巧。
我建议您首先浏览oracle文档,然后在某个地方找到社区。 p>
浏览ResultSetMetaData接口。我想这个界面可以回答你的问题。
http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSetMetaData.html