我有一个java derby数据库,我可以写入数据库并从中读取。
我遇到了麻烦:
然后将用户输入文本字段的文本合并到数据库查询中以确定显示的结果。
我试过这种方式,结果是,如果我点击搜索按钮,它会将信息/查询返回到"运行"屏幕,不实际将用户输入合并到查询中,我必须在代码中执行此操作,方法是将abc替换为数据库中的数字。
我是否必须创建某种命令行参数?设置变量不同?我是否可以将数据库信息所在的查询信息替换为变量,就像我在下一个示例中尝试的那样?
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String abc = jTextField1.getText();
String data = "jdbc:derby://localhost:1527/sample";
try (
Connection conn = DriverManager.getConnection(
data, "app", "app");
Statement st = conn.createStatement()) {
Class.forName("org.apache.derby.jdbc.ClientDriver");
ResultSet rec = st.executeQuery(
"select ROW1, ROW2, ROW3, ROW4, ROW5 from APP.NAME1 "
+ "where (ROW4 = 'abc')");
while (rec.next()) {
System.out.println("ROW1:\t"
+ rec.getString(1));
System.out.println("ROW2:\t" + rec.getString(2));
System.out.println("ROW3:\t" + rec.getString(3));
System.out.println("ROW4:\t" + rec.getString(4));
System.out.println("ROW5:\t" + rec.getString(5));
System.out.println();
}
st.close();
} catch (SQLException s) {
System.out.println("SQL Error: " + s.toString() + " "
+ s.getErrorCode() + " " + s.getSQLState());
} catch (Exception e) {
System.out.println("Error: " + e.toString()
+ e.getMessage());
}
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
}
答案 0 :(得分:1)
您没有正确设置变量。而不是将ROW4设置为'abc'
,您需要设置变量。试试这个。
"select ROW1, ROW2, ROW3, ROW4, ROW5 from APP.NAME1 " + "where (ROW4 = '"+abc+"')"
使用preparedStatement总是更好。这样可以避免很多与SQL Injection相关的问题。
String selectSQL = "select ROW1, ROW2, ROW3, ROW4, ROW5 from APP.NAME1 where ROW4 = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setString(1, abc);
ResultSet rs = preparedStatement.executeQuery(selectSQL );