Я использую базу данных 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] + "')";
Вышеупомянутое утверждение я не думаю, что работа. он вводит данные как таковые
А затем в базу данных, подобную этой
Итак, как вы можете видеть, он вводится с помощью? (whatis this?), а затем последние два столбца не заполняются.
Итак, любой из вас, ребята, укажет мне в правильном направлении, где мое мышление ошибочно, когда дело доходит до хранения переменной char.
А также, как я могу получить символы из таблицы базы данных? как я не могу найти Doc на этом???
Большое спасибо
Я бы предложил посмотреть 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, будет выбрано исключение.
В дополнение к ответу 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
по причинам размера хранилища.
CHAR
но у вас естьchar[]
в Java ... почему?