Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java从数据库中检索值_Java_Mysql_Debugging_Jtextfield - Fatal编程技术网

用java从数据库中检索值

用java从数据库中检索值,java,mysql,debugging,jtextfield,Java,Mysql,Debugging,Jtextfield,可能重复: 我正在制作另一个程序,从我创建的数据库中检索字段的输入数据/值。但这次,我输入的值将来自我创建的JtextField。我想知道这里出了什么问题,当我运行它时,输出总是空的 在这个程序中,我将把输入的JTextField值转换为int。如下所示: public class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource() ==

可能重复:

我正在制作另一个程序,从我创建的数据库中检索字段的输入数据/值。但这次,我输入的值将来自我创建的JtextField。我想知道这里出了什么问题,当我运行它时,输出总是空的

在这个程序中,我将把输入的JTextField值转换为int。如下所示:

public class ButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == extendB)
{
    ExtensionForm extend = new ExtensionForm();
    extend.setVisible(true);
    }
else if(e.getSource()== searchB)            
{
//get text from the textField 
String guest = guestIDTF.getText();
//parse the string to integer for retrieving of data
int id = Integer.parseInt(guest);
GuestsInfo guestInfo = new GuestsInfo(id);
Room roomInfo = new Room(id);
String labels[] = {guestInfo.getFirstName()+" "+guestInfo.getLastName(),""+roomInfo.getRoomNo(),roomInfo.getRoomType(),guestInfo.getTime(),"11:00"}; for(int z = 0; z<labels.length; z++) { labelDisplay[z].setText(labels[z]); }
}

我已经在3moronsdb中插入了一些值,它们是(1,Classic,103)。这是我的主要测试课程:

public class TestMain {
    public static void main(String [] a){

        GuestsInfo guest = new GuestsInfo(1); //note that this instantiation is the other class which i just
 ask the other day.. (https://stackoverflow.com/questions/12762835/retrieving-values-from-database-in-java)   
        Room rum = new Room(1);
    System.out.print(rum.getRoomType()+"  "+ guest.getFirstName());
}
}

当我运行它时,它只为Room类提供null输出,但我得到guestinfo类的输出,即“Ericka”。你们能帮帮我吗?我知道我昨天问过这类问题,但我真的不知道现在这里出了什么问题

此方法中的select语句看起来错误。它不应该从
房间
表格中选择信息吗

public Room(int guestsID)
{
    this();
    try{
        // This line looks wrong, shouldn't this be selecting from the
        // room table??
        // statement = con.prepareStatement("SELECT * FROM room WHERE guestID=?");
        // instead???
        statement = con.prepareStatement("SELECT * FROM guest WHERE guestID=?");
        statement.setInt(1, guestID);
        ResultSet rs = statement.executeQuery();
        while(rs.next()){
            this.guestID = rs.getInt(1);
            this.roomType = rs.getString(2);
            this.roomNo = rs.getInt(3);
        }
    }catch(Exception e){
        System.out.print(e);
    }
}
您应该尝试使用列名,而不是使用列索引来检索值。虽然可能非常罕见,但数据库返回列的顺序可能与代码中预期的顺序不同

(发生这种情况的原因有很多,数据库被更新,数据库被重新创建,数据库引擎正在改变主意…:p)

显然,我对数据库结构一无所知,因此需要适当地更新列名。当您出错并从错误的表中选择时,这将突出显示

还有。您应该在不再需要数据库资源时释放它们

PreparedStatement statement = null;
try{
    statement = con.prepareStatement("SELECT * FROM guest WHERE guestID=?");
    statement.setInt(1, guestID);
    ResultSet rs = statement.executeQuery();
    while(rs.next()){
        this.guestID = rs.getInt(1);
        this.roomType = rs.getString(2);
        this.roomNo = rs.getInt(3);
    }
}catch(Exception e){
    System.out.print(e);
} finally {
    try {
        statement.close();
    }catch(Exception e){
    }
}
否则,您将面临耗尽数据库资源的风险:p


我也不会为每个类创建
连接。我要么为应用程序创建一个连接,要么使用某种类型的连接池

我很好奇
SELECT*FROM guestID=?
来自
Room
类,这不应该是从Room表中选择的吗?如果在从结果集中检索值时使用列名,而不是使用列索引,那么您可能会发现这一点。列索引可能会改变(名称也可以这样说),因为顺序取决于数据库决定返回结果的方式。@程序员,你能给我一个你所说的例子吗?实际上,我使用select语句从数据库中检索数据。请。请纠正我。@MadProgrammer所说的是,如果您的select语句是“select fname,lname from TABLE”,您应该使用rs.getString(“fname”)而不是rs.getString(1),因为如果您将查询更改为“select lname,fname…”rs.getString(1),您将不再检索fname,但rs.getString(“fname”)将检索fname。谢谢先生。我甚至没有注意到。也许是贝克。因为睡眠不足,也许我在编程方面太笨了。缺乏睡眠。对于一个六个月大的孩子来说,我是一个快乐的爸爸,我有睡眠的记忆P
while(rs.next()){
    this.guestID = rs.getInt("guestID");
    this.roomType = rs.getString("roomType");
    this.roomNo = rs.getInt("roomNumber");
}
PreparedStatement statement = null;
try{
    statement = con.prepareStatement("SELECT * FROM guest WHERE guestID=?");
    statement.setInt(1, guestID);
    ResultSet rs = statement.executeQuery();
    while(rs.next()){
        this.guestID = rs.getInt(1);
        this.roomType = rs.getString(2);
        this.roomNo = rs.getInt(3);
    }
}catch(Exception e){
    System.out.print(e);
} finally {
    try {
        statement.close();
    }catch(Exception e){
    }
}