英文:
Print SQL Query in Java (JTextPane)
问题
我制作了一个简单的游戏,还连接了一个数据库,一切正常运行,但我遇到问题的地方是让程序打印我制作的查询,以显示数据库中的条目(分数)
String sql = "select * from scores";
			
try {
    PreparedStatement ps =
        conn.prepareStatement(sql);
    JTP.setText("" + ps.toString());
} catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
当我运行游戏(按下按钮后会显示分数板),并且打开分数板时,我得到的文本是这样的:
> "org.sqlite.jdbc4.JDBC4PreparedStatement@691f5716"
我对Java的所有事物都相对陌生,所以我不知道这是什么意思... 有什么想法吗?
(编辑:JTP是JTextPane)
英文:
I made a simple game that is also connected to a database, everything works fine, but where I'm having issues is having the program print a query I made to show the entries in the DB (scores)
String sql = "select * from scores";
		
		try {
			PreparedStatement ps =
			    conn.prepareStatement(sql);
				JTP.setText(""+ps.toString());
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
When I run the game (the ScoreBoard is made to show up with the press of a button) and when I open the ScoreBoard, the text I get is this:
> "org.sqlite.jdbc4.JDBC4PreparedStatement@691f5716"
I'm relatively new with all things Java, so I have no idea what this one means... any ideas?
(edit: JTP is JTextPane)
答案1
得分: 0
我希望你一切安好。
我认为问题出在你准备了语句,但是你从未执行查询并获取结果。
    PreparedStatement ps = conn.prepareStatement(sql);
    // ...执行查询...然后使用结果
    // ...
    JTP.setText("" + results.toString());
    try
    {
      // 创建MySQL数据库连接
      String myDriver = "org.gjt.mm.mysql.Driver";
      String myUrl = "jdbc:mysql://localhost/test";
      Class.forName(myDriver);
      Connection conn = DriverManager.getConnection(myUrl, "root", "");
      String query = "SELECT * FROM SCORES";
      // 创建Java语句
      Statement st = conn.createStatement();
      // 执行查询,并获取Java结果集
      ResultSet rs = st.executeQuery(query);
      // 遍历Java结果集
      while (rs.next())
      {
        int id = rs.getInt("id");
        String score1 = rs.getString("score1");
        String score2 = rs.getString("score2");
        // 打印结果
        System.out.format("%s, %s, %s\n", id, score1, score2);
      }
      st.close();
    }
    catch (Exception e)
    {
      System.err.println("发生异常! ");
      System.err.println(e.getMessage());
    }
为了帮助你,你可以阅读更多关于Java及其对象如何与数据库进行交互的信息。
英文:
I hope you are fine.
I think the problem is you prepare the statement but never you run the query and get the results.
    PreparedStatement ps = conn.prepareStatement(sql);
    ...you run the query.. an then use the results
    ...
    JTP.setText(""+results.toString());
	try
    {
      // create our mysql database connection
      String myDriver = "org.gjt.mm.mysql.Driver";
      String myUrl = "jdbc:mysql://localhost/test";
      Class.forName(myDriver);
      Connection conn = DriverManager.getConnection(myUrl, "root", "");
      
      String query = "SELECT * FROM SCORES";
      // create the java statement
      Statement st = conn.createStatement();
      
      // execute the query, and get a java resultset
      ResultSet rs = st.executeQuery(query);
      
      // iterate through the java resultset
      while (rs.next())
      {
        int id = rs.getInt("id");
        String score1 = rs.getString("score1");
		String score2 = rs.getString("score2");
        
        // print the results
        System.out.format("%s, %s, %s\n", id, score1, score2);
      }
      st.close();
    }
    catch (Exception e)
    {
      System.err.println("Got an exception! ");
      System.err.println(e.getMessage());
    }
For your help, read more about Java and his objects for interact with databases.
答案2
得分: 0
这是一种方法来执行我们的查询:
public ResultSet selectEntity(String query) {
    ResultSet result;
    try {
        PreparedStatement statement = connection.prepareStatement(query);
        result = statement.executeQuery();
    } catch (SQLException ex) {
        // 在此处理你的异常
        return null;
    }
    return result;
}
这个方法将获取查询结果并传递给我们的 JTextPane:
private void printScore() {
    // 我们调用执行查询的方法
    ResultSet resultSet = this.selectEntity("SELECT * FROM scores");
    try {
        // 我假设分数在数据库中保存为整数,所以我会使用 getInt()
        while (resultSet.next()) textPane.setText("" + resultSet.getInt(1));
    } catch (SQLException e) {
        // 在此处理你的异常
    }
}
英文:
well, the question is not clear enough. I think what you're trying to do is to get the result of a query from the DB.
This is one approach:
This method will execute our query
 public ResultSet selectEntity(String query) {
        ResultSet result;
        try {
        	PreparedStatement statement = connection.prepareStatement(query);
            result = statement.executeQuery();
        } catch (SQLException ex) {
			//handle your exception here
            return null;
        }
        return result;
 }
This method will get the result of the query and pass to our JTextPane
private void printScore()
{
    //we're calling the method that executes the query
	ResultSet resultSet = this.selectEntity("SELECT * FROM scores");
	try {
        // I assume that the score is saved as Integer in the DB, so I'll use **getInt()**
		while(resultSet.next())	textPane.setText(""+resultSet.getInt(1));			
	} catch (SQLException e) {
        //handle your exception here
    }
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论