Не удается записать данные в mysql

288
26 ноября 2016, 20:08

Я создала простую форму регистрации. Использую struts2 и хочу чтобы когда пользователь кликает на submit -> данные отобразились в mysql database.

Таким образом я пытаюсь записать данные в датабейс:

public void registerUser(){

        user.add(username);
        user.add(password);
        user.add(email);
        user.add(picture);

        //connect to database
        try {
            Class.forName("com.mysql.jdbc.Driver");
            try {
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myFacebook?" + "user=root&password=root");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

         //Insert Data into database 
        try(PreparedStatement createUser = connection.prepareStatement("Insert into user(username, password, email, picture)" + "VALUES (?, ?, ?, ?)")){
                for(int i = 0; i < 1000; i++)
        {
        createUser.setInt(0, i+1);
        }
        createUser.setString(1, user.get(0));  
        createUser.setString(2, user.get(1));  
        createUser.setString(3, user.get(2));   
        createUser.setString(4, user.get(3));  
        int rowsUpdated = createUser.executeUpdate();
            createUser.close();
        }catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Я решила создать ArrayList в классе User, потому что мне кажется так легче записать данные.

ArrayList<String> user = new ArrayList<String>();

Запускаю все свою систему через apache tomcat. Все запускается и не выдает никаких ошибок. Все методы и файлы между собой правильно соединены. Но когда проверяю датабейс в консоле, то данные не отображаются и мой столик user - пустой.

Никак не могу понять в чем ошибка. То ли данные с формы как-то неправильно вызываются, то ли я неправильно записываю их в датабейс.

Помогите, пожалуйста, разобраться. Заранее спасибо!

UPD:

 //Insert Data into database 
        try(PreparedStatement createUser = connection.prepareStatement("Insert into user(user_id, username, password, email, picture)" + "VALUES (?, ?, ?, ?, ?)")){
            createUser.setInt(0, userid);
            createUser.setString(1, user.get(0));  
            createUser.setString(2, user.get(1));  
            createUser.setString(3, user.get(2));   
            createUser.setString(4, user.get(3));  
            int rowsUpdated = createUser.executeUpdate();
            createUser.close();
Answer 1

Судя по всему проблема в этом участке кода.

for(int i = 0; i < 1000; i++)
{
   createUser.setInt(1, i+1);
   createUser.setString(2, user.get(0));  
   createUser.setString(3, user.get(1));  
   createUser.setString(4, user.get(2));   
   createUser.setString(5, user.get(3));  
}
int rowsUpdated = createUser.executeUpdate();

Здесь вы в теле цикла устанавливаете параметры запроса, но исполнение запускаете после выхода из цикла.

Вам нужно либо перенести в тело цикла строку

int rowsUpdated = createUser.executeUpdate();

Либо добавить в цикл строку

createUser.addBatch();

А после цикла вызвать

preparedStatement.executeBatch();

А executeUpdate убрать вовсе.

UPD:

Похоже дело не только в этом. Вот ваша строка sql:

"Insert into user(username, password, email, picture)" + "VALUES (?, ?, ?, ?)"

Четыре судя по всему строковых параметров. Вы же пытаетесь установить ей пять параметров, к тому же не соответствуя по типу!

   createUser.setInt(1, i+1);
   createUser.setString(2, user.get(0));  
   createUser.setString(3, user.get(1));  
   createUser.setString(4, user.get(2));   
   createUser.setString(5, user.get(3)); 

Выпадет SQLException на пятой строке.

Скорее всего ваше строка sql должна теперь выглядеть как то так:

"Insert into user(id, username, password, email, picture)" + "VALUES (?,?, ?, ?, ?)"
READ ALSO
Реализация drop-down(Back-End) [требует правки]

Реализация drop-down(Back-End) [требует правки]

Зачем это нужно? Чтобы скрыть треки, которые не нравятся пользователюКак реализовать? Создать таблицу tracks_hide с полями user_id,owner_id,track_id

243
React: Unexpected token &lt;

React: Unexpected token <

Ругается на закрывающий h1, соответственно ничего не выводитсяВ чем дело?

378
Не работает filter в AngularJS [закрыто]

Не работает filter в AngularJS [закрыто]

Делаю поиск, но что-то выдает ошибку (ошибка на скриншоте), мне кажется что это через json, на картинке его структура показанаЕсли делать бес...

346
Как подружить grunt-typescript и requirejs?

Как подружить grunt-typescript и requirejs?

Есть следующая проблема: я использую requirejs для AMD, при этом попытался использовать typescript и поставил grunt-typescriptВот отрывок из Gruntfile

291