Не может вставить байт [] в MySQL с помощью Java

Я всегда использовал (в PHP)

<form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?>">

Заставить мои формы отправлять себе.

5
задан Asaph 10 December 2010 в 07:43
поделиться

3 ответа

Попробуйте использовать «setBinaryStream ()» вместо «setBytes ()» и передать ему ByteArrayInputStream, созданный на основе вашего байтового массива. Это, конечно, предполагает, что тип данных, назначенный столбцу, может хранить байты ... Убедитесь, что это BLOB, BINARY или VARBINARY.

Кроме того, используйте обратные кавычки для заключения ваших объектов. "key" - это ключевое слово SQL, а в остальном это просто хорошая привычка:

String query = "INSERT INTO `keytable` (`name`, `key`) VALUES (?,?)";
0
ответ дан 14 December 2019 в 08:56
поделиться

Вы должны добавить двоичный поток. У вас есть доступ к входному потоку ?? вот так ..

FileInputStream input = new FileInputStream("myfile.gif");
String query = "INSERT INTO `keytable` (`name`, `key`) VALUES (?,?)";
PreparedStatement pstmt = (PreparedStatement) connection.prepareStatement(query);
pstmt.setString(1, "test");
pstmt.setBinaryStream(2, input, input.available());
-3
ответ дан 14 December 2019 в 08:56
поделиться

Проблема в том, что столбец с именем «ключ» является резервным словом в SQL. Окружите его обратными кавычками, и все должно работать. Еще лучше подумать о переименовании столбца во что-то, что не является резервным словом SQL. Я доказал это, используя приведенный ниже код:

Таблица MySQL:

create table keytable (name varchar(255) not null, `key` blob not null);

Код Java:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class MySQLBlobInsert {

    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        Connection conn = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
            byte[] bkey = "This is some binary stuff".getBytes();
            String query = "INSERT INTO keytable (name, `key`) VALUES (?,?)";
            PreparedStatement pstmt = conn.prepareStatement(query);
            pstmt.setString(1, "test");
            pstmt.setBytes(2, bkey);
            pstmt.execute();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            if (conn != null) {
                try { conn.close(); } catch (SQLException e) {}
            }
        }
        System.out.println("done :)");
    }
}
10
ответ дан 14 December 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: