标签:jdbc prepared-statement sql java
我有一个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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。