ВСТАВИТЬ SQL в Java - PullRequest
       15

ВСТАВИТЬ SQL в Java

3 голосов
/ 27 мая 2010

У меня есть приложение на 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");

Ответы [ 3 ]

3 голосов
/ 27 мая 2010

Вам необходимо зафиксировать закрыть ) соединение (и инструкцию) после использования. Вы также должны убедиться, что вы не глотаете никаких SQLException с, что может привести к тому, что вы видите, что «ничего» не происходит.


Тем не менее,

private static Connection connect;

Это ужасно плохая идея. Вы никогда не должны объявлять внешние ресурсы как static в вашем приложении. Ваше приложение сломается, когда другая сторона решит закрыть ресурс, потому что он был выпущен слишком долго. Вам действительно нужно получить и , чтобы закрыть эти ресурсы (Connection, Statement и ResultSet в кратчайшей возможной области . Т.е. внутри того же самого блока метода, где находится запрос должен быть выполнен.

Кроме того, я настоятельно рекомендую использовать PreparedStatement вместо Statement, поскольку это предотвратит ваш код от SQL-инъекций атак .

Вы можете найти эту статью полезной, чтобы узнать больше о том, как правильно выполнять базовое взаимодействие с JDBC.

1 голос
/ 27 мая 2010
state2.executeUpdate("INSERT INTO table(field1) VALUES (\"Value\")");

должно быть:

state2.executeUpdate("INSERT INTO plateau(field1) VALUES (\"Value\")");
0 голосов
/ 27 мая 2010

Copuld будет просто копией ошибки SO, но если смотреть, но должна ли таблица INSERT INTO (field1) быть INSERT INTO плато (field1)?

...