我已经使用Java开发了一个系统。我可以保存pdf,doc文件等,它们保存在jTable
中。我想通过单击Jtable
行来打开这些文件。如果我尝试打开本地磁盘中的已保存文件,它们将无法打开。但是我可以打开可移动磁盘上的文件。请帮我解决这个问题。
这是我的代码:
int row = jTable1.getSelectedRow();
try {
String value = (jTable1.getModel().getValueAt(row, 2).toString());
// Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler" + value);
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + value);
} catch (Exception e) {
e.printStackTrace();
}
打开文件并获取目录路径:
try {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.showOpenDialog(null);
File selectedPfile = chooser.getSelectedFile();
jTextField1.setText(selectedPfile.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
保存代码:
try {
Connection con = DB.connect();
PreparedStatement p = con.prepareStatement("insert into documents values( '" + jTextField3.getText() + "','" + jTextField2.getText() + "', '" + jTextField1.getText() + "')");
p.executeUpdate();
p.close();
JOptionPane.showMessageDialog(null, "save success");
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:1)
反斜杠在保存到数据库时会从路径中丢失,因为字符串直接插入到PreparedStatement
中,而不是被设置为参数。改为这样做:
try (Connection con = DB.connect()) {
try (PreparedStatement p = con.prepareStatement(
"insert into documents values (?, ?, ?)")) {
p.setString(1, jTextField3.getText());
p.setString(2, jTextField2.getText());
p.setString(3, jTextField1.getText());
p.executeUpdate();
}
} catch (SQLException e) {
// handle exception...
}