抛弃后台as直接连接数据库

时间:2021-02-24 21:55:09
本人水平太差,解决不了这问题!希望尝试过这方面的高手帮我看下!!(没做过直接google下来的就不要回了)

分不是问题,200分送上!只要解决方案!!

报如下两个异常
Error #2044: 未处理的 ioError:。 text=Error #2031: Socket 错误。 URL: localhost
Error #2044: 未处理的 ioError:。 text=Error #2048: 安全沙箱冲突:file:///D:/workplaceflec/FlexTest/bin-debug/ConnectMySql.swf 不能从 localhost:8080 加载数据。

代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
xmlns:assql="com.maclema.mysql.mxml.*" applicationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import com.maclema.mysql.ResultSet;
import mx.rpc.AsyncResponder;
import com.maclema.mysql.MySqlToken;
import mx.controls.Alert;
import com.maclema.mysql.events.MySqlErrorEvent;
import com.maclema.mysql.Statement;
import com.maclema.mysql.Connection;

private var conn:Connection;
private var sql:String = "select * from ...";

private function onCreationComplete():void{
conn = new Connection("localhost",8080,"root","admin","数据库");
conn.addEventListener(Event.CONNECT,handleConnected);
conn.addEventListener(MySqlErrorEvent.SQL_ERROR,handleError);
conn.connect();
}

private function handleConnected(event:Event):void{
var st:Statement = conn.createStatement();
var token:MySqlToken = st.executeQuery(sql);
token.addResponder(new AsyncResponder(
function(data:Object,token:Object):void{
var rs:ResultSet = ResultSet(data);
Alert.show("记录数:"+rs.size()+"条");
},
function(info:Object,token:Object):void{
Alert.show("错误信息:"+info);
},
token
));
}

private function handleError(event:MySqlErrorEvent):void{
Alert.show(event.text);
}
]]>
</mx:Script>
<!--标签式Mysql驱动
<assql:MySqlService id="service">
</assql:MySqlService>
-->
</mx:Application>

25 个解决方案

#1


抛弃后台as直接连接数据库

#2


没有高手尝试过??

#3


ioError错误,你需要处理conn实例的错误异常,你没有处理这个异常所以ide抛这个错误了,这个不是主要问题,主要问题在于你的安全策略的问题,自己先看看flash的安全策略相关的东西就了解了。

#4


感谢3楼的回答

第一个IO错误是我当时贴代码的时候贴错了一个版本,已经解决

第二个安全沙箱问题:我也知道是安全策略上的问题,需要一个安全策略文件
但是它不同于一般socket的安全沙箱问题,只要在服务端放个安全策略文件就行了
由于是客户端直接连接数据库,这就相当于没有服务端,只有客户端!
那这个时候有该怎么处理??没有这方面的经验,只是对抛弃后台这种技术有点好奇才尝试了下

以上是我的理解,欢迎各路高手指错~~~~

#5


该回复于2010-08-23 15:52:38被版主删除

#6


客房端直接连的话,数据库应该有远程支持的吧,感觉写法和本地连是有区别的,个人理解

#7


引用 6 楼 java_struts2 的回复:
客房端直接连的话,数据库应该有远程支持的吧,感觉写法和本地连是有区别的,个人理解

当然是有区别的,我在4楼已经说明了

这论坛的高手都去哪了??来个能提供解决方案的人!!!!!!!1

#8


我的贴,你不能就怎么沉了!!!

#9


额,在本地放个策略文件呢,直连的话,我的理解,其实客户端就是后台了,

#10


放了N久的帖子,突然记起来了,冒个泡再结贴!

顺便贴上正确代码
conn = new Connection("localhost", 3306,"root","admin","数据库");

居然就这样搞定了!! 自我BS下,太大意了

O(∩_∩)O~~~

#11


好东西就得留名啊,谢谢啊

#12


呵呵~~

#13


assql很强大啊

#14


楼主,我前几天也为了这个安全问题搞得焦头烂额的,有2个经验,希望能帮助大家:
(1)如果访问server端数据,需要把crossdomain。xml放到根目录(默认会找这个路径),也可以指定其他的server路径,但是需要追加代码在flex里面:
Security.allowDomain("*");
Security.allowInsecureDomain("*");
Security.loadPolicyFile("http://server.com/crossdomain.xml"); 
(2)
crossdomain.xml里面一定要做好控制,最开放的设置是:
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
呵呵,要是有问题,可以联系我,:)

#15


对了,如果是本地的话,如果是asp,用的是IIS,需要把crossdomain.xml放到IISroot路径就行了,呵呵,这个我没有测试过,只做提示用。。。。

#16


抛弃后台as直接连接数据库

#17


学习Flex。

#18


该回复于2011-02-12 16:54:28被版主删除

#19


本地的还真的没试过,用过 wenorb与foluninex

#20


引用 10 楼 leemiki 的回复:
放了N久的帖子,突然记起来了,冒个泡再结贴!

顺便贴上正确代码
conn = new Connection("localhost",3306,"root","admin","数据库");

居然就这样搞定了!! 自我BS下,太大意了

O(∩_∩)O~~~


那就奇怪了,楼主之前的设置时因为把数据库的端口设置错误,但我现在设置对的,确还是报跟你第二个一样的错误,安全沙箱问题。我用的是AS项目。

#21


收藏下吧,好东西··

#22


该回复于2011-11-07 15:52:51被版主删除

#23


收藏下,现在在做和Flex相关的项目。

#24


引用 15 楼 david_deeye 的回复:
对了,如果是本地的话,如果是asp,用的是IIS,需要把crossdomain.xml放到IISroot路径就行了,呵呵,这个我没有测试过,只做提示用。。。。


对我有用

#25


楼主说的是这样吗?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"  
xmlns:assql="com.maclema.mysql.mxml.*" applicationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import com.maclema.mysql.ResultSet;
import mx.rpc.AsyncResponder;
import com.maclema.mysql.MySqlToken;
import mx.controls.Alert;
import com.maclema.mysql.events.MySqlErrorEvent;
import com.maclema.mysql.Statement;
import com.maclema.mysql.Connection;

private var conn:Connection;
private var sql:String = "select * from ...";

private function onCreationComplete():void{
conn = new Connection("localhost",3306,"root","admin","数据库");
conn.addEventListener(Event.CONNECT,handleConnected);
conn.addEventListener(MySqlErrorEvent.SQL_ERROR,handleError);
conn.connect();
}

private function handleConnected(event:Event):void{
var st:Statement = conn.createStatement();
var token:MySqlToken = st.executeQuery(sql);
token.addResponder(new AsyncResponder(
function(data:Object,token:Object):void{
var rs:ResultSet = ResultSet(data);
Alert.show("记录数:"+rs.size()+"条");
},
function(info:Object,token:Object):void{
Alert.show("错误信息:"+info);
},
token
));
}

private function handleError(event:MySqlErrorEvent):void{
Alert.show(event.text);
}
]]>
</mx:Script>
<!--标签式Mysql驱动
<assql:MySqlService id="service">
</assql:MySqlService>
-->
</mx:Application>

#1


抛弃后台as直接连接数据库

#2


没有高手尝试过??

#3


ioError错误,你需要处理conn实例的错误异常,你没有处理这个异常所以ide抛这个错误了,这个不是主要问题,主要问题在于你的安全策略的问题,自己先看看flash的安全策略相关的东西就了解了。

#4


感谢3楼的回答

第一个IO错误是我当时贴代码的时候贴错了一个版本,已经解决

第二个安全沙箱问题:我也知道是安全策略上的问题,需要一个安全策略文件
但是它不同于一般socket的安全沙箱问题,只要在服务端放个安全策略文件就行了
由于是客户端直接连接数据库,这就相当于没有服务端,只有客户端!
那这个时候有该怎么处理??没有这方面的经验,只是对抛弃后台这种技术有点好奇才尝试了下

以上是我的理解,欢迎各路高手指错~~~~

#5


该回复于2010-08-23 15:52:38被版主删除

#6


客房端直接连的话,数据库应该有远程支持的吧,感觉写法和本地连是有区别的,个人理解

#7


引用 6 楼 java_struts2 的回复:
客房端直接连的话,数据库应该有远程支持的吧,感觉写法和本地连是有区别的,个人理解

当然是有区别的,我在4楼已经说明了

这论坛的高手都去哪了??来个能提供解决方案的人!!!!!!!1

#8


我的贴,你不能就怎么沉了!!!

#9


额,在本地放个策略文件呢,直连的话,我的理解,其实客户端就是后台了,

#10


放了N久的帖子,突然记起来了,冒个泡再结贴!

顺便贴上正确代码
conn = new Connection("localhost", 3306,"root","admin","数据库");

居然就这样搞定了!! 自我BS下,太大意了

O(∩_∩)O~~~

#11


好东西就得留名啊,谢谢啊

#12


呵呵~~

#13


assql很强大啊

#14


楼主,我前几天也为了这个安全问题搞得焦头烂额的,有2个经验,希望能帮助大家:
(1)如果访问server端数据,需要把crossdomain。xml放到根目录(默认会找这个路径),也可以指定其他的server路径,但是需要追加代码在flex里面:
Security.allowDomain("*");
Security.allowInsecureDomain("*");
Security.loadPolicyFile("http://server.com/crossdomain.xml"); 
(2)
crossdomain.xml里面一定要做好控制,最开放的设置是:
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
呵呵,要是有问题,可以联系我,:)

#15


对了,如果是本地的话,如果是asp,用的是IIS,需要把crossdomain.xml放到IISroot路径就行了,呵呵,这个我没有测试过,只做提示用。。。。

#16


抛弃后台as直接连接数据库

#17


学习Flex。

#18


该回复于2011-02-12 16:54:28被版主删除

#19


本地的还真的没试过,用过 wenorb与foluninex

#20


引用 10 楼 leemiki 的回复:
放了N久的帖子,突然记起来了,冒个泡再结贴!

顺便贴上正确代码
conn = new Connection("localhost",3306,"root","admin","数据库");

居然就这样搞定了!! 自我BS下,太大意了

O(∩_∩)O~~~


那就奇怪了,楼主之前的设置时因为把数据库的端口设置错误,但我现在设置对的,确还是报跟你第二个一样的错误,安全沙箱问题。我用的是AS项目。

#21


收藏下吧,好东西··

#22


该回复于2011-11-07 15:52:51被版主删除

#23


收藏下,现在在做和Flex相关的项目。

#24


引用 15 楼 david_deeye 的回复:
对了,如果是本地的话,如果是asp,用的是IIS,需要把crossdomain.xml放到IISroot路径就行了,呵呵,这个我没有测试过,只做提示用。。。。


对我有用

#25


楼主说的是这样吗?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"  
xmlns:assql="com.maclema.mysql.mxml.*" applicationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import com.maclema.mysql.ResultSet;
import mx.rpc.AsyncResponder;
import com.maclema.mysql.MySqlToken;
import mx.controls.Alert;
import com.maclema.mysql.events.MySqlErrorEvent;
import com.maclema.mysql.Statement;
import com.maclema.mysql.Connection;

private var conn:Connection;
private var sql:String = "select * from ...";

private function onCreationComplete():void{
conn = new Connection("localhost",3306,"root","admin","数据库");
conn.addEventListener(Event.CONNECT,handleConnected);
conn.addEventListener(MySqlErrorEvent.SQL_ERROR,handleError);
conn.connect();
}

private function handleConnected(event:Event):void{
var st:Statement = conn.createStatement();
var token:MySqlToken = st.executeQuery(sql);
token.addResponder(new AsyncResponder(
function(data:Object,token:Object):void{
var rs:ResultSet = ResultSet(data);
Alert.show("记录数:"+rs.size()+"条");
},
function(info:Object,token:Object):void{
Alert.show("错误信息:"+info);
},
token
));
}

private function handleError(event:MySqlErrorEvent):void{
Alert.show(event.text);
}
]]>
</mx:Script>
<!--标签式Mysql驱动
<assql:MySqlService id="service">
</assql:MySqlService>
-->
</mx:Application>