MySQL-Verbindungen von außerhalb erlauben

In einer sicheren MySQL-Umgebung dürfen Zugriffe auf die Datenbank nur vom eigenen Host (localhost) des MySQL-Services ausgeführt werden. Zugriffe von außerhalb (remote) werden nicht akzeptiert, um die Sicherheit zu erhöhen. In einer Produktionsumgebung ist dieser erhöhte Sicherheitsaspekt sehr wünschenswert, während der Entwicklungsphase kann der eingeschränkte Zugriff aber sehr schnell zum „Showstopper“ werden. Besonders dann, wenn man das Hosting der MySQL-Datenbank auf einem Testserver betreibt und vom eigenen Laptop aus über ein Tool wie beispielsweise der MySQL Workbench 6.0 darauf zugreifen möchte.

Ich möchte zeigen, wie man entgegen der Sicherheitsempfehlung, trotzdem von einem entfernten Rechner mit einem MySQL Client auf eine MySQL-Datenbank zugreifen kann. Als Beispiel dient eine MySQL-Installation unter Ubuntu.
MySQL-Verbindungen von außerhalb erlauben weiterlesen

„DROP DATABASE“ – Anweisungen wurden deaktiviert.

Wer XAMPP benutzt und mit phpMyAdmin versucht eine Datenbank zu löschen, der wird eventuell die Meldung: "DROP DATABASE" - Anweisungen wurden deaktiviert. erhalten. Ist das der Fall, muss man in der Datei C:\xampp\phpMyAdmin\config.inc.php folgende Zeile hinzugefügt werden: $cfg['AllowUserDropDatabase'] = true;. Danach muss der Apache -und MySQL-Server neu gestartet werden.

JDBC Datenbank-Anbindung mit Properties für MySQL

In meinem Blog habe ich bereits gezeigt, wie man eine Verbindung zu einer MySQL-Datenbank via JDBC aufbauen kann (siehe [post id=3219]Connecting to a MySQL Database with Java (JDBC)[/post]).

In dem dort vorgestelltem Code-Beispiel wurden die Datenbankdetails (Hostname, Port, Datenbankname, Benutzername und Passwort) fest im Code eingetragen. Möchte man eine andere Datenbank verwenden, muss man den Code ändern und neu kompilieren. Das ist nicht sehr stilvoll. Schöner wäre es, wenn diese Infromationen aus einer externen Konfigurationsdatei geladen werden, so dass man nur diese Datei mit einem Texteditor öffnen muss, um die Daten zu ändern. Für diesen Zweck lassen sich Properties einsetzen.

Wie das geht, zeige ich in folgendem Beispiel.
JDBC Datenbank-Anbindung mit Properties für MySQL weiterlesen

MySQL NOW() equivalent in Java for prepared statements

If you are used to MySQL then you probably know the MySQL function NOW() which inserts the current date and time in a MySQL query. But if you use JDBC and prepared statements, then you can reconstruct this function with a GregorianCalendar (which is the successor of Date):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void insertArticle(Article article) throws SQLException
{
  //query = "INSERT INTO articles(title,content,date) VALUES (?,?,NOW())";
  query = "INSERT INTO articles(title,content,date) VALUES (?,?,?)";
 
  statement = connection.prepareStatement(query);
 
  statement.setString(1, article.getTitle());
  statement.setString(2, article.getContent());
  statement.setTimestamp(3, new Timestamp(new GregorianCalendar().getTimeInMillis()));
 
  logger.info(statement);
  statement.executeUpdate();
}

Insert only in specific columns with MySQL

If you have a big MySQL table and you want to insert data only in specific columns, then you can do this with naming the columns in parentheses after the table name:

INSERT INTO `wp_posts`(`post_author`,`post_content`,`post_title`,`post_date`) VALUES (0,'Hello World','Text...',NOW());

This works even without apostrophes:

INSERT INTO wp_posts(post_author,post_content,post_title,post_date) VALUES (0,'Hello World','Text...',NOW());

java.sql.SQLException – Value can not be represented as java.sql.Date

If you receive an error that is similar to this:

java.sql.SQLException: Value ‚0000-00-00 00:00:00‘ can not be represented as java.sql.Date

Then you should check your database connection. If your connection url looks like jdbc:mysql://localhost/my_database then you should try jdbc:mysql://localhost/my_database?zeroDateTimeBehavior=convertToNull.

Other options are:
jdbc:mysql://localhost/my_database?zeroDateTimeBehavior=round
jdbc:mysql://localhost/my_database?zeroDateTimeBehavior=exception

The explanation can be found in „handling DATETIME values„.