2012-05-08 2 views
2

При попытке вставить значение строки в мой db с помощью JDBC вместо того, чтобы вставлять значение String, оно вставляет имя String.JDBC - Как вставить строковое значение

У меня есть строка с именем firstName, значение этой строки задается пользователем.

Вот мое заявление SQL:

String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','+firstName()','123')"; 
+4

Вы, кажется, не понимают разницу между вещами внутри двойных кавычек против снаружи. Он делает * точно * то, о чем вы говорите. –

ответ

6

По разным причинам, то лучше использовать java.sql.PreparedStatement. для выполнения операторов с параметрами. Например, если вы хотите избежать атак sql injection.

См. Примеры в Using Prepared Statements от The Java Tutorials.

Преимущество использования операторов SQL, принимающих параметры, заключается в том, что вы можете использовать один и тот же оператор и предоставлять его разными значениями каждый раз при его выполнении.

PreparedStatement pstmt = conn.prepareStatement(
    "UPDATE EMPLOYEES SET FIRST_NAME= ? WHERE ID = ?"); 

pstmt.setString(1, "user1080390"); // set parameter 1 (FIRST_NAME) 
pstmt.setInt(2, 101); // set parameter 2 (ID) 

int rows = pstmt.executeUpdate(); // "rows" save the affected rows 
+0

В ближайшие недели я обязательно буду читать PreparedStatement. К сожалению, и я знаю, что это звучит плохо; В настоящий момент у меня нет времени, я должен соответствовать крайнему сроку. Есть ли вероятность, что вы можете быть более конкретным? – user1080390

+0

Время, проведенное с помощью грязных хаков, может быть потрачено на чтение PreparedStatments и использование его. Кодексу кода Павла должно быть достаточно, чтобы вы пошли. – Jonathan

+0

Я попытался изменить подготовленный оператор вставки из этой темы: http://stackoverflow.com/questions/1073101/how-do-you-do-an-extended-insert-using-jdbc-without-building-strings Но я получил сообщение об ошибке: Не удалось найти символ, подготовленный ... – user1080390

0

Попробуйте

String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','"+firstName()+"','123')";

Чтобы предотвратить SQL инъекции, вам нужно бежать строку перед использованием в запросе или попробовать подготовленные заявления.

+1

Это грязный и опасный способ, подверженный ошибкам (что, если firstName содержит кавычки?), И, прежде всего, имеет опасность атаки SQL-инъекций. Никогда не делайте этого в реальном коде. – leonbloy

+0

Provider.java:90: не удается найти символ символа: метод firstName() localtion: class Provider String sql = "Вставить INTO users (ID, firstName, address) Значения ('124', '" + firstName() + "', '123') ";^ – user1080390

+0

@leonbloy вы абсолютно правы, извините. – Karo

0

Что-то вроде этого ..

String firstName ="sample"; 
String sql = "Insert INTO users (ID, firstName, address) VALUES ('124',"+firstName+",'123')"; 
Смежные вопросы