从Java Derby数据库中选择特定记录

时间:2017-03-19 10:37:35

标签: java jdbc derby

如何实际显示数据库中的单个记录,并在相关的TextFields中显示记录字段 我在下面尝试过,但是我选择了其中一个而且它只显示了一条记录,哪里出错了?

String driver = "org.apache.derby.jdbc.EmbeddedDriver";
Class.forName(driver);
String host = "jdbc:derby://localhost:1527/NoteDatabase";
String uName = "Simon";
String uPass = "Password";

Connection con = getConnection(host, uName, uPass);
Statement stmt = con.createStatement();
stmt = con.createStatement();

stmt.executeQuery(" select * from " + lstGetItems.getSelectedValue() + "");
ResultSet rs = stmt.getResultSet();
if (rs.next()) {
    txtNoteTitle.setText(rs.getString("NOTENAME"));
    txtTextInput.setText(rs.getString(2));

这让我得到以下结果。如截图所示

我尝试过这个来修复,但是当我点击相同的音符时,我得到的只是一个例外。

String driver = "org.apache.derby.jdbc.EmbeddedDriver";
Class.forName(driver);
String host = "jdbc:derby://localhost:1527/NoteDatabase";
String uName = "Simon";
String uPass = "Password";

Connection con = getConnection(host, uName, uPass);
Statement stmt = con.createStatement();
stmt = con.createStatement();

stmt.executeQuery(" select * from " + lstGetItems.getSelectedValue() + " WHERE 'NOTENAME' = " + lstGetNotes.getSelectedValue() + " ");
ResultSet rs = stmt.getResultSet();
if (rs.next()) {
    txtNoteTitle.setText(rs.getString("NOTENAME"));
    txtTextInput.setText(rs.getString("NOTECONENT"));

enter image description here

2 个答案:

答案 0 :(得分:2)

Select的语法是sql select

SELECT column1, column2, ... FROM table_name;

SELECT * FROM table_name;

因此,如果您想从用户输入的特定表(lstGetItems.getSelectedValue())中进行选择,那么您必须先检查您的表名是否存在做你的选择。

如果您想从表格中选择WHERE something = somethingelse,那么您的第二个查询不正确,因为您错过了将字符串放在两个''之间并从名称中删除了两个''你的专栏所以你必须使用:

stmt.executeQuery(" select * from "+ lstGetItems.getSelectedValue() +" WHERE NOTENAME = '" + lstGetNotes.getSelectedValue() + "' " );

我认为lstGetItems.getSelectedValue()是您的表名 NOTENAME是您的专栏名称 以及lstGetNotes.getSelectedValue()列的值。

但是你的方式不安全并且可能导致SQL注入的错误语法,所以你必须使用PreparedStatement

修改

例如:

try (PreparedStatement stmt = connection.prepareStatement(
        "select * from table_name WHERE NOTENAME = ?")) {
    stmt.setString(1, lstGetNotes.getSelectedValue());

    ResultSet result = stmt.executeQuery();
    if (result.next()) {
       ....
    }
}

答案 1 :(得分:1)

1:读取异常:没有列Hello2 ...

2:select * from必须后跟一个表名,而不是一个值:lstGetItems.getSelectedValue()