用Java插入SQL
作者:互联网
我有一个Java应用程序,并且想使用SQL数据库.我有一个连接课:
public class SQLConnection{
private static String url = "jdbc:postgresql://localhost:5432/table";
private static String user = "postgres";
private static String passwd = "toto";
private static Connection connect;
public static Connection getInstance(){
if(connect == null){
try {
connect = DriverManager.getConnection(url, user, passwd);
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Connection Error", JOptionPane.ERROR_MESSAGE);
}
}
return connect;
}
}
现在,在另一个类中,我成功打印了我的值,但是当我尝试插入一个值时,什么也没有发生……
这是我的代码:
try {
Statement state = SQLConnection.getInstance().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Statement state2 = SQLConnection.getInstance().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
state2.executeUpdate("INSERT INTO table(field1) VALUES (\"Value\")"); // Here's my problem
ResultSet res = state.executeQuery("SELECT * FROM table");
解决方法:
使用后,您需要commit(和close)的连接(和语句).您还需要确保您没有吞下任何SQLExceptions,这可能会导致您什么也不做.
那就是
private static Connection connect;
这是一个非常糟糕的主意.您永远不应在应用程序中将外部资源声明为静态资源.当另一方决定关闭资源时,您的应用程序将中断,因为资源发布时间过长.您确实需要获取并关闭这些资源(Connection,Statement和ResultSet在尽可能短的范围内.即,在与要执行查询的位置相同的方法块内.
另外,我强烈建议使用PreparedStatement
代替Statement,因为这会阻止您的代码来自SQL injection attacks.
您可能会发现this article对于了解更多有关如何以正确方式进行基本JDBC交互的信息很有用.
标签:jdbc,prepared-statement,sql,java 来源: https://codeday.me/bug/20191106/1999728.html