我看到了this post,但是它并没有真正帮助我解决问题。
我使用的是HTML
对话框,该对话框随Google电子表格上的加载项一起打开,而我使用的是JBDC
。
我从多个查询中加载MYSQL
数据库中的一些数据,我还有一个搜索栏来搜索数据库中的数据,将来我希望我的HTML根据选项自动显示各种数据库值在我的HTML
页中选择。基本上,只有一个应用程序会有很多查询,所以我猜应该有一个连接对象可以使用。
我已经尝试了多种方法,可以用伪代码向您展示。
这就是我的 GS 文件
function firstFunc()
{
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
//do my thing
return (datas);
}
function secondFunc()
{
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
//do my thing
return (datas);
}
function thirdFunc()
{
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
//do my thing
return (datas);
}
然后是我的HTML
<script>
var onSuccessFirst = function (data){
//update my HTML with data
}
var onSuccessSecond = function (data){
//update my HTML with data
}
var onSuccessThird = function (data){
//update my HTML with data
}
google.script.run.withSuccessHandler(onSuccessFirst).firstFunc();
google.script.run.withSuccessHandler(onSuccessSecond).secondFunc();
google.script.run.withSuccessHandler(onSuccessThird).thirdFunc();
</script>
但是当我使用免费的数据库提供程序来开发第三个连接时,返回一条错误消息,提示我验证密码或用户名,因为它无法连接到数据库。
GS文件
function getConnection()
{
return (Jdbc.getConnection(dbUrl, user, userPwd););
}
function firstFunc(conn)
{
conn...
//do my thing
return (datas);
}
function secondFunc(conn)
{
conn...
//do my thing
return (datas);
}
function thirdFunc(conn)
{
conn...
//do my thing
return (datas);
}
然后是我的HTML
<script>
var onSuccessFirst = function (data){
//update my HTML with data
}
var onSuccessSecond = function (data){
//update my HTML with data
}
var onSuccessThird = function (data){
//update my HTML with data
}
var onSuccessConnection = function(conn)
{
google.script.run.withSuccessHandler(onSuccessFirst).firstFunc(conn);
google.script.run.withSuccessHandler(onSuccessSecond).secondFunc(conn);
google.script.run.withSuccessHandler(onSuccessThird).thirdFunc(conn);
}
google.script.run.withSuccessHandler(onSuccessConnection).getConnection();
</script>
但是这里conn
是null
。
当我的输入(搜索栏)为onchange
时,我还会发送很多查询,并且我使用第一种方法有效,但是它不允许快速键入,因为它会增加每个键入字符的连接请求。 / p>
我该怎么办?
答案 0 :(得分:2)
也许尝试使用第一种方法进行链接:
<script>
var onSuccessThird = function (data){
//update my HTML with data
}
var onSuccessSecond = function (data){
//update my HTML with data
google.script.run.withSuccessHandler(onSuccessThird).thirdFunc();
}
var onSuccessFirst = function (data){
//update my HTML with data
google.script.run.withSuccessHandler(onSuccessSecond).secondFunc();
}
google.script.run.withSuccessHandler(onSuccessFirst).firstFunc();
</script>
google.script.run
是一个异步功能。在不等待上一个运行完成的情况下,将一次调用所有三个运行,这意味着在第一种方法中,几乎同时打开了几乎3个Jdbc连接。 script.run
调用将关闭连接。因此,在第二种方法中,conn
将在第一次运行结束之前或之前为null。
当脚本完成执行时,JDBC连接自动关闭。 (请记住,即使进行调用的HTML服务页面保持打开状态,单个google.script.run调用也算是完整的执行。)
答案 1 :(得分:1)
如果您可以使用连接池, 否则,您可以通过检查null并为一次完整的请求响应只打开/关闭一次连接来使一组完整的事务保持连接活动。