Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > добавить и извлечь запись изи бд


Автор: enzaime 16.3.2014, 19:34
Привет всем. Встала задача записать/извлечь данные из бд через java, столкнулся с некоторыми трудностями.
1) скачал denwer
2) включил сервер базы данных MySQL
3)создал БД history в ней таблицу hystory с полями id,login,message.
4)скачал connector, в эклипсе подключил к проекту mysql-connector-java-5.1.14-bin.jar через properties/build path. В eclipse com.mysql.jdbc стала доступна
теперь сам код:
Код

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
public class DataBase {

    public static void main(String[] args) {
        String userName = "root";
        String password = "";
        String url = "jdbc:mysql://localhost/history";
        Class.forName ("com.mysql.jdbc.Driver").newInstance ();
        conn = (Connection) DriverManager.getConnection(url, userName, password);
        String log="'лог'";
        String mes="'сообщ'";
        String query="INSERT INTO hystory (login,message) VALUES ("+log+","+mes+")";
        Statement st = (Statement) conn.createStatement();
            //Statement позволяет отправлять запросы базе данных
            //st.executeQuery(query);
            System.out.println();
        System.out.println ("Database connection established");
        }
        catch (Exception e)
        {
        System.err.println ("Cannot connect to database server");
        e.printStackTrace();
        }
        finally
        {
        if (conn != null)
        {
        try
        {
        conn.close ();
        System.out.println ("Database connection terminated"); 
        }
        catch (Exception e) { }
        }
        }
    }

}


если st.executeQuery(query); закомментировано, то соединяется ( я так думаю ), иначе нет. Запрос проверен в phpMyAdmin. 
Всё вроде по феншую, а не работает, кто знает как надо подскажите, плз.

Автор: LSD 17.3.2014, 10:50
Код который ты запостил, даже не скомпилируется. Там неправильное количество скобок и нет try для первого catch.

Автор: enzaime 17.3.2014, 17:15
Позор мне, это я от невнимательности не то копировал
Код

public class DataBase {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Connection conn = null;
        try
        {
            
        String userName = "root";
        String password = "";
        String url = "jdbc:mysql://localhost/history";
        Class.forName ("com.mysql.jdbc.Driver").newInstance ();
        conn = (Connection) DriverManager.getConnection(url, userName, password);
        String log="'лог'";
        String mes="'сообщ'";
        String query="INSERT INTO hystory (login,message) VALUES ("+log+","+mes+")";
        Statement st = (Statement) conn.createStatement();
            st.executeQuery(query);
            System.out.println();
        System.out.println ("Database connection established");
        }
        catch (Exception e)
        {
        System.err.println ("Cannot connect to database server");
        e.printStackTrace();
        }
        finally
        {
        if (conn != null)
        {
        try
        {
        conn.close ();
        System.out.println ("Database connection terminated"); 
        }
        catch (Exception e) { }
        }
        }
    }
}

Автор: Pawl 17.3.2014, 18:07
Сам запрос какой-то мутный... Попробуй так:
Код

            String query="INSERT INTO hystory (login, message) VALUES ('лог', 'сообщ')";
            Statement st = conn.createStatement();
            st.executeUpdate(query); //вместо st.executeQuery(query);

Автор: enzaime 17.3.2014, 18:17
Всё равно пишет, что 
Cannot connect to database server
java.sql.SQLException: Field 'date' doesn't have a default value
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
    at DataBase.main(DataBase.java:28)-//строка st.executeUpdate(query);
Я видимо неправильно бд установил

Автор: Pawl 17.3.2014, 18:30
Цитата(enzaime @  17.3.2014,  18:17 Найти цитируемый пост)
java.sql.SQLException: Field 'date' doesn't have a default value

как я понял, требуется заполнение какого-то обязательного поля date. В твоей таблице поля точно называются 
Цитата(enzaime @  16.3.2014,  19:34 Найти цитируемый пост)
id,login,message

?
Попробуй создать запрос, который бы заполнял все поля, а не только 2.

Автор: enzaime 17.3.2014, 20:29
Всё работает, я создал таблицу на 3 поля id,login,message и норм всё стало.Блин, Pawl, ты просто БОГ. Я поставлю дома идол и буду тебе молиться.

Автор: Pawl 17.3.2014, 20:34
Цитата(enzaime @  17.3.2014,  20:29 Найти цитируемый пост)
Pawl, ты просто БОГ. Я поставлю дома идол и буду тебе молиться.

Это лишнее, + в репу хватит smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)