Как вы вводите символы Java в базу данных MYSQL, а затем также получаете их?

0

Я использую базу данных 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] + "')";

Вышеупомянутое утверждение я не думаю, что работа. он вводит данные как таковые Изображение 174551

А затем в базу данных, подобную этой Изображение 174551

Итак, как вы можете видеть, он вводится с помощью? (whatis this?), а затем последние два столбца не заполняются.

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

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

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

  • 0
    Вы хотите сохранить CHAR но у вас есть char[] в Java ... почему?
  • 0
    этот вызов k1 [0] вернет переменную char. Он перейдет к порядковому номеру в массиве char и вернет переменную char
Теги:
jdbc
char

2 ответа

3
Лучший ответ

Я бы предложил посмотреть 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, будет выбрано исключение.

  • 0
    «Прежде всего, символ в java является байтовым значением диапазона [0..255]» Нет, это не так, символ является двухбайтовым значением UTF-16.
  • 0
    @R Бемроуз, да, спасибо ... нашел это ... Я удалил свое заявление.
Показать ещё 2 комментария
2

В дополнение к ответу 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 по причинам размера хранилища.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню