Как вы вводите символы Java в базу данных MYSQL, а затем также получаете их? - PullRequest
0 голосов
/ 03 декабря 2010

Я использую базу данных MYSQL для хранения постоянных данных для Java-приложения.

CREATE TABLE testtable1( key1a CHAR, key1b CHAR, encoded1a CHAR, encoded1b CHAR);

Как видите, я создаю таблицу, в которой для каждой строки хранятся 4 разных символа CHAR.

sql, который я написал для ввода символов в таблицу:

 char k1[] = new char[2]
 char p[] = new char[2];

 k1[0]=0x00aa;
 k1[1]=(char)0xaaaa;

 p[0]=0x0001;
 p[1]=0x0002;

sql = "INSERT INTO testtable1 "
                +"(key1a, key1b , encoded1a,encoded1b) "
                + "VALUES "
                + "('"+ k1[0] + "',"
                + "'"+ k1[1] + "',"
                + "'"+ p[0] + "',"
                + "'"+ p[1] + "')";

Вышеупомянутое утверждение, я не думаю, работает. он вставляет данные как таковые alt text

А потом в базу данных вот так alt text

Итак, как вы можете видеть, в него вводится знак? (Что это?), А затем последние два столбца не заполняются.

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

А также, как мне получить символы из таблицы базы данных? так как я не могу найти никаких документов на это ???

большое спасибо

Ответы [ 2 ]

3 голосов
/ 03 декабря 2010

Я бы предложил посмотреть в PreparedStatement.

Пример может быть следующим:

PreparedStatement ps = nulll;
try {
    ps = connection.prepareStatement("INSERT INTO testtable1 (key1a, key1b , encoded1a,encoded1b) VALUES (? ,? ,?, ?)");
    for (int i = 1; i <= k.length; i++) {
        ps.setString(i, "" + k[i]);
    }

    ps.executeUpdate();
} catch (SQLException) {
    //Log exception
} finally {
    if (ps != null) {
        try {
            ps.close();
            ps = null;
        } catch (SQLException e) {}
    }
}

Проблема здесь в том, что если длина char[]k больше 4, будет выдано исключение.

2 голосов
/ 03 декабря 2010

В дополнение к ответу PreparedStatement:

Java char - это 16-битное UTF-16 значение.

MySQL CHAR - это синоним CHAR(1) ..., который имеет ширину всего в один символ (количество байтов зависит от набора символов таблицы).

Теперь PreparedStatement setString должен позаботиться о преобразовании кодировки для вас, но это все еще оставляет одну проблему: MySQL в некоторых системах по умолчанию использует набор символов latin1. Это означает, что CHAR слишком мало.

Существует исправление для этого. Во время создания таблицы вы можете заставить таблицу быть определенным набором символов:

CREATE TABLE testtable1( key1a CHAR, key1b CHAR, encoded1a CHAR, encoded1b CHAR) CHARACTER SET utf8;

Примечание: вы также можете использовать utf16 вместо utf8; Я просто использовал utf8 из соображений размера хранилища.

...