代码段: 单击按钮,将调用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;
}
}
请帮助解决问题。
答案 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。