2017-02-01 22 views
2

В принципе, я пытаюсь подключиться к базе данных MySQL с помощью драйверов Connector C для MySQL. Я пишу код в Netbeans в системе Linux. Но вот тайна: я могу подключиться к моей базе данных в режиме отладки, но не в режиме деблокирования ??? Я использую Netbeans в качестве моей IDE в Linux, и я создал все библиотеки и включил папки, используя раскрывающийся список в свойствах проекта, поэтому он применяет свойства к настройкам Debug Configuration и Release Configuration, и все же он будет подключаться к базе данных, когда я выполнить в Debug, но не при выполнении в Run - ??? Я упростил код, чтобы показать вам реальный код подключения:Netbeans в Linux для подключения к базе данных MySQL в C

int readDB(void) { 
    MYSQL *mysql = NULL; 
    char *server = "localhost"; 
    char *user = "root"; 
    char *password = ""; 
    char *database = "myDB"; 
    int port = 3306; 

    mysql = mysql_init(mysql); 

    if (!mysql) { 
     puts("Init failed, out of memory?"); 
     return EXIT_FAILURE; 
    } else { 
     puts("SUCCESS!\n"); 
    } 

    if (!mysql_real_connect(mysql,server,user,password,database,port,NULL,0)) { 
     puts("Connect failed\n"); 
    } 

    return 1; 
} 

Так что, когда я запускаю его в Debug, он печатает «SUCCESS», и больше ничего. Когда я запускаю его, он печатает «УСПЕХ», за которым следует «Не удалось подключиться». Я в недоумении. Может ли это быть проблемой с IDE? Есть ли еще одна IDE для C, которая хорошо работает на Linux, которую я должен рассмотреть? Или я пропущу что-то совершенно очевидное?

Update: вызова mysql_error() показал

"Не удается подключиться к локальному серверу MySQL через гнездо '/tmp/mysql.sock' (2)"

+0

почему бы не очевидные 'путы (mysql_error (MySQL));' ?? – e4c5

+1

HaHa !! Потому что вы имеете дело с C/MySQL noob и очевидным не является в меню;) Но ваше предложение действительно создало новую интригу. Исправлена ​​ошибка «Не удается подключиться к локальному серверу MySQL через сокет» /tmp/mysql.sock (2) ». Таким образом, похоже, что у меня проблема сокета. Дайте мне знать, если вы знаете что-нибудь об этом, пока я копаю машину Google. Спасибо! – sax

ответ

2

При использовании клиентской библиотеки mysql на большинстве языков, включая C, если имя хоста указано как localhost, клиентская библиотека попытается подключиться через сокет домена unix. Вы можете заставить соединение с использованием протокола TCP/IP, указав имя хоста, как 127.0.0.1

Да они одно и то же but

Если UNIX_SOCKET не NULL, то строка указывает сокет или именованный трубы для использования. Обратите внимание, что параметр host определяет тип соединения .

В качестве альтернативы вы можете проверить конфигурацию mysql, чтобы узнать, где сокет был создан при запуске сервера и использовать его как параметр unix_socket.

Третья альтернатива, чтобы изменить конфигурацию сервера, чтобы создать сокет на/TMP/

+0

e4c5, вы поддающийся проверке гений! Я бы искал долго и трудно, и, вероятно, не придумал бы с этим. Я - пользователь Windows, и я конвертирую свою базу данных и бэкэнд-обработку в Linux, чтобы сэкономить деньги, и моя голова действительно плавала. Я не могу поблагодарить вас за то, что вы нашли время, чтобы помочь! 127.0.0.1 был ответом для меня – sax

+0

Я рад помочь. Все самое лучшее с вашим проектом. – e4c5

+1

Хороший ответ !!! Я не знал, что 127.0.0.1 и localhost интерпретировались по-разному с помощью mysql –

 Смежные вопросы

  • Нет связанных вопросов^_^