#java #apache-flex #postgresql #flex4 #blazeds
#java #apache-flex #postgresql #flex4 #blazeds
Вопрос:
Меня зовут Рахул.Я новичок в flex. Я пытаюсь интегрировать flex с blazeds с использованием java. Я написал некоторый код, насколько мне известно. Но это не подключение к базе данных. Я вставляю сюда свой код.Пожалуйста, изучите это и дайте мне знать, если я допустил какие-либо ошибки там:
Мой гибкий код:
<fx:Script>
<![CDATA[
import com.hello.vo.FeedbackVO;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.ObjectUtil;
public function insertData():void
{
var feedbackvo:FeedbackVO = new FeedbackVO();
feedbackvo.name = input_name.text;
feedbackvo.number = input_number.text;
feedbackvo.email = input_email.text;
feedbackvo.feedback = input_feedback.text;
ro.insertData(feedbackvo);
}
public function onResult(event:ResultEvent):void
{
Alert.show(ObjectUtil.toString(event.result));
}
public function onFault(event:FaultEvent):void
{
Alert.show(ObjectUtil.toString(event.fault));
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:RemoteObject id="ro"
destination="feedback"
source="com.hello.Feedback"
endpoint="http://localhost:8082/Feedback/messagebroker/amf">
<s:method name="insertData"
result="onResult(event)"
fault="onFault(event)"/>
</s:RemoteObject>
</fx:Declarations>
<s:BorderContainer x="0"
y="0"
width="100%"
height="100%">
<s:Panel width="364"
height="333" x="206" y="83">
<mx:Form x="0"
y="0"
width="100%"
height="100%">
<mx:FormItem label="Name:">
<s:TextInput id="input_name" width="249"/>
</mx:FormItem>
<mx:FormItem label="Number:">
<s:TextInput id="input_number" width="249"/>
</mx:FormItem>
<mx:FormItem label="Email:">
<s:TextInput id="input_email" width="248"/>
</mx:FormItem>
<mx:FormItem label="Feedback:">
<s:TextInput id="input_feedback" width="248" height="143"/>
</mx:FormItem>
<mx:FormItem>
<s:Button id="insert_btn"
label="Insert Data"
click="insertData();"/>
</mx:FormItem>
</mx:Form>
</s:Panel>
</s:BorderContainer>
Мой Java-код:
FeedbackVO.java:
package com.hello.vo;
public class FeedbackVO
{
private String name;
private String number;
private String email;
private String feedback;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getNumber()
{
return number;
}
public void setNumber(String number)
{
this.number = number;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public String getFeedback()
{
return feedback;
}
public void setFeedback(String feedback)
{
this.feedback = feedback;
}
}
Feedback.java:
package com.hello;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.hello.vo.FeedbackVO;
public class Feedback
{
Connection connection;
Statement stmt;
ResultSet rs;
public Feedback()
{
String host = "localhost";
String port = "5432";
String dbName = "test";
Connection connection = null;
try
{
connection = DriverManager.getConnection(
"jdbc:postgresql://" host ":" port "/" dbName,"postgres", "admin");
System.out.println("Database is connected");
stmt = connection.createStatement();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public String insertData(FeedbackVO feedbackvo)
{
try
{
stmt = connection.createStatement();
String sql = "INSERT into feedback(name,number,email,feedback) VALUES ('" feedbackvo.getName() "','" feedbackvo.getNumber() "','" feedbackvo.getEmail() "','" feedbackvo.getFeedback() "')";
if(stmt.execute(sql))
{
return "Thanks For your Valuable Feedback";
}
}
catch (Exception e)
{
e.printStackTrace();
}
return "Sorry Your feedback is not entered";
}
}
Если я пытаюсь выполнить Feedback.mxml, то в качестве выходных данных я получаю «Извините, ваш отзыв не введен».Я не знаю, в чем проблема.Я думаю, что flex подключен успешно, но проблема в коде Java.Если у кого-нибудь есть идея, пожалуйста, помогите мне.
Большое спасибо, Рахул
Ответ №1:
- Вам следует использовать протоколирование (например, log4j, slf4j) в коде вашего сервера для протоколирования ваших исключений.
- Вместо того, чтобы возвращать сообщение в результате
insertData()
, вы должны вернуть код успеха или просто выдать исключение. Оба варианта могут быть обработаны на стороне клиента, где проще отобразить локализованное сообщение. - Используйте пул подключений и закройте свое соединение сразу после завершения работы.
- Просто определите локальную
Statement
переменную и, наконец, вызовите close() - Ознакомьтесь с отладкой веб-приложений в Tomcat
- Используйте executeUpdate (), и ваша ошибка должна исчезнуть. execute() возвращает
false
, если результатом является количество обновлений, и вы выполняетеINSERT
инструкцию, поэтому она это сделает.
Это было бы моим предложением:
private Connection getConnection() throws SQLException
{
// get a connection from the connection pool
}
public int insertFeedback(FeedbackVO feedbackvo) throws SQLException
{
try
{
Connection con = getConnection();
try
{
String sql = "INSERT INTO feedback(name,number,email,feedback) "
"VALUES (?, ?, ?, ?)";
PreparedStatement stmt = connection.prepareStatement();
try
{
stmt.setString(1, feedbackvo.getName());
stmt.setString(2, feedbackvo.getNumber());
stmt.setString(3, feedbackvo.getEmail());
stmt.setString(4, feedbackvo.getFeedback());
return stmt.executeUpdate(sql);
}
finally
{
stmt.close();
}
}
finally
{
con.close();
}
}
catch (SQLException e)
{
log.error(e);
throw e;
}
}
Комментарии:
1. Привет, splash, я совершенно новичок в FLEX и JAVA. Мне нужно создать приложение, которое интегрирует FLEX и JAVA. Я хочу знать, как это возможно. Какое программное обеспечение требуется? Пожалуйста, ответьте мне как можно раньше. Я очень хочу изучить эту вещь.
2. @SagarRawal: Поиск в Google с помощью «flex java» должен направить вас на adobe.com/devnet/flex/flex_java.html который является очень хорошей компиляцией ресурсов разработки Flex / Java.
Ответ №2:
Вероятно, что-то пошло не так со ВСТАВКОЙ. Трудно сказать, что именно (базовый синтаксис в порядке), но простое объединение строк делает его уязвимым для специальных символов, таких как кавычки в значениях, передаваемых в запросе (и атак SQL-инъекций). Гораздо лучше использовать подготовленные инструкции
Также те трассировки стека исключений, которые печатаются, могут содержать полезную информацию для решения проблемы.