从Oracle 10g数据库中获取数据时java中的列索引错误。无法弄清楚什么是错的

时间:2016-10-07 11:40:40

标签: java oracle jdbc

代码段: 单击按钮,将调用actionevent

public void actionPerformed(ActionEvent e)
{
Function f = new Function();

Function是一个嵌套类,我用它来建立与数据库的连接。 最后还提供了函数类的代码片段。

ResultSet rs = null;
String Cid ="cust_id";
String Pno="cust_phone";
String cat="cust_cat";
String start_date="st_date";
String Adv_amt="adv";
String Adv_end="end_date";
String Address="addr";

t2是我用来输入客户名称的Textfield名称。我想使用此客户名称作为PK从DB获取有关该客户的所有其他数据。

rs=f.find(t2.getText());
try{
    if(rs.next())
    {
        t1.setText(rs.getString("cust_id"));
        t3.setText(rs.getString("cust_phone"));
        t4.setText(rs.getString("cust_cat"));
        t5.setText(rs.getString("st_date"));
        t6.setText(rs.getString("adv"));
        t7.setText(rs.getString("end_date"));
        t8.setText(rs.getString("addr"));
    }
    else
        JOptionPane.showMessageDialog(null,"No data for this name");
}
catch(Exception ex)
{
    JOptionPane.showMessageDialog(null,ex.getMessage());
}
}

以下是嵌套类Function的代码片段,它位于主类中:

class Function{
Connection con=null;
ResultSet rs= null;
PreparedStatement ps = null;
public ResultSet find(String s)
{
    try
    {
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    con = DriverManager.getConnection("jdbc:oracle:thin:@Localhost:1521:xe","system","qwerty");
    ps= con.prepareStatement("Select * from gkkdb where cust_name='?'");

    ps.setString(1,s);

    rs= ps.executeQuery();
    }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
        return rs;
}
}

请帮助解决问题。

2 个答案:

答案 0 :(得分:2)

不要将参数占位符?放在单引号中。

这:

ps = con.prepareStatement("Select * from gkkdb where cust_name='?'");

应该是

ps = con.prepareStatement("Select * from gkkdb where cust_name = ?");

如果将?括在单引号中,则let path=document.getElementById("db-1").dataset.path; if(path==="USB/sda1-usb-SanDisk_Cruzer_B"){ //do stuff } 不会被识别为占位符。

答案 1 :(得分:0)

排除绑定变量将解决您的直接问题。

您应该明确指定要选择的列,以及您只获得所需的内容(有人可能会在以后添加BLOB列),并且您将按正确的顺序获取它们(有人可能会更改)表在另一个数据库实例上运行之前创建脚本,虽然您按名称查找列,但只有在使用位置索引时才会影响其他顺序。

同上另一个答案:绑定变量(即没有引号)

另外,"从"中选择*从来都不是个好主意,请问你的DBA。

显然,您的代码就是例如,但是您应该确保在完成后立即释放所有资源(Connection,Statement,ResultSet)。使用Java 7 try-with-resources。