我正在运行Tomcat 7.0.22,我编写了一个连接到SQL Anywhere 12.0数据库的简单servlet.当我运行servlet时,我得到了java.lang.ClassCastException:org.apache.tomcat.dbcp.dbcp.BasicDataSource无法强制转换为org.apache.tomcat.jdbc.pool.DataSource.我的./META-INF/content.xml文件如下所示:
Run Code Online (Sandbox Code Playgroud)<Context> <Resource name="jdbc/FUDB" auth="Container" type="javax.sql.DataSource" username="dba" password="sql" driverClassName="sybase.jdbc.sqlanywhere.IDriver" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"URL = "JDBC:SQLAnywhere中:UID = DBA; PWD = SQL; ENG = BTH476331A_FedUtilization;" accessToUnderlyingConnectionAllowed ="true"maxActive ="8"maxIdle ="4"/>
我的webapp web.xml如下所示:
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <display-name>FedUtilization</display-name> <servlet> <servlet-name>Report1</servlet-name> <display-name>Report1</display-name> <servlet-class>com.sapgss.ps.servlet.Report1</servlet-class>Report1/Report1
SQL Anywhere 12.0.1服务器jdbc3 jdbc/FUDB javax.sql.DataSource容器
servlet代码如下:
Run Code Online (Sandbox Code Playgroud)import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import javax.naming.*; import org.apache.catalina.core.StandardContext.*; import org.apache.tomcat.jdbc.pool.*; import com.sapgss.ps.dbutil.*; import org.apache.tomcat.dbcp.dbcp.BasicDataSource; public class Report1 extends HttpServlet { public void doGet(HttpServletRequest request, …
我收到以下错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 220 bytes)
我正php 5.4和我一起工作sql Anywhere 11.
对此的解决方案是根据这是放入ini_set('memory_set',-1);我的php-file,但在这之后我得到另一个错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 3 bytes)
编辑:我的代码是
<?php
ini_set('memory_set',-1);
$connect = sasql_connect("UID=username;PWD=pass");
echo "Connection succeed";
$result = sasql_query($connect, "SELECT * FROM table1, table2");
if(!$result){
echo "sasql_query failed";
return 0;
} else {
echo "query …Run Code Online (Sandbox Code Playgroud) 我的问题与SQL到SQL IN参数的String的Python列表有些相同,但是我有一个整数列表。我使用的python代码是:
ids = [1000032, 1000048]
sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN (?)'
cursor.execute(sql, [','.join(ids)])
Run Code Online (Sandbox Code Playgroud)
Sybase数据库引擎的响应为:
pyodbc.Error: ('07006', "[07006] [Sybase][ODBC Driver][SQL Anywhere]Cannot convert '1000032','1000048' to a numeric (-157) (SQLExecDirectW)")
Run Code Online (Sandbox Code Playgroud)
正确的方法是什么?
我想编写一个SQL IF语句来检查是否存在本地临时表,但这些表不会记录在SQL Anywhere系统目录中.
我是ROR的新手.我想在单击VIEW中的提交按钮时调用存储过程进行处理.
Model:
-------
class Pro::DataImport < ActiveRecord::Base
attr_accessible :file_name, :process_name, :updated_by, :validates
end
Controller:
-----------------
class Pro::DataImportsController < ApplicationController
before_filter :authenticate_user!
layout "layouts/enr/energy_master"
def index
@pro_data_imports = Pro::DataImport.all
end
def new
@pro_data_import = Pro::DataImport.new
end
end
View
----------
<%= form_for @pro_data_import do %>
<div class="field">
Browse the file to upload:<br />
<%= file_field_tag ':file_name' %>
</div>
<div class="actions">
<%= submit_tag 'Import File' %>
</div>
<% end %>
Stored Proc
---------------
ALTER PROCEDURE "DBA"."my_enr_test"(file_name long varchar)
BEGIN
INSERT INTO DBA.pro_data_imports(file_name) values(file_name); …Run Code Online (Sandbox Code Playgroud) 我有一个SQL Anywhere 9数据库,我想将我的一个列上的自动增量值重置为特定数字.
我想我需要SQL-Anywhere相当于:
ALTER TABLE foo AUTO_INCREMENT =100
更新: 有人将此问题标记为“我如何分割字符串,以便可以访问项目x”的重复 项。但这是不同的,我的问题是关于Sybase SQL Anywhere,另一个是关于MS SQL Server。这是两个不同的SQL引擎,即使它们具有相同的来源,也具有不同的语法。因此它不是重复的。我首先在描述和标签中写到了关于Sybase SQL Anywhere的全部内容。
我有田野 id_list='1234,23,56,576,1231,567,122,87876,57553,1216'
我想用它来搜索IN该字段:
SELECT *
FROM table1
WHERE id IN (id_list)
Run Code Online (Sandbox Code Playgroud)
id 是 integer
id_list 是 varchar/text
但是以这种方式行不通,因此我需要以某种方式拆分id_list为选择查询。
我应该在这里使用什么解决方案?我正在使用T-SQL Sybase ASA 9数据库(SQL Anywhere)。
我看到的方式是,通过while循环创建自己的函数,并基于分隔符位置搜索拆分每个元素,然后将元素插入到临时表中,该函数将作为结果返回。
是的,你可以多次找到类似的问题,但是:这里发布的最优雅的解决方案适用于SQL Server,但不适用于Sybase(在我的案例中是Sybase Anywhere 11).我甚至发现一些与Sybase相关的问题被标记为SQL Server问题的重复,这没有帮助.
我喜欢但不起作用的解决方案的一个例子是WITH ... DELETE ...构造.
我找到了使用游标或while循环的工作解决方案,但我希望没有循环可能.
我希望有一个漂亮,简单和快速的查询,只删除除了一个完全重复的所有内容.
这里有一个小测试框架:
IF OBJECT_ID( 'tempdb..#TestTable' ) IS NOT NULL
DROP TABLE #TestTable;
CREATE TABLE #TestTable (Column1 varchar(1), Column2 int);
INSERT INTO #TestTable VALUES ('A', 1);
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 2);
INSERT INTO #TestTable VALUES ('B', 1);
INSERT INTO #TestTable VALUES ('B', 2);
INSERT INTO #TestTable VALUES ('B', 2); -- duplicate
INSERT …Run Code Online (Sandbox Code Playgroud) 当执行具有多个用于SET局部变量的参数的查询时,我收到此错误:
iAnywhere.Data.SQLAnywhere.SAException(0x80004005):主机变量的值不足
我使用OdbcConnection或SAConnection得到相同的错误.
var connection = new SAConnection(connectionString);
connection.Open();
var transaction = connection.BeginTransaction();
string sql = @"
DECLARE @A int
DECLARE @B int
SET @A = ?
SET @B = ?
";
var command = new SACommand(sql, connection, transaction);
var param1 = new SAParameter();
param1.Value = 1;
command.Parameters.Add(param1);
var param2 = new SAParameter();
param2.Value = 2;
command.Parameters.Add(param2);
command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
如果只有一个参数,查询执行正常:
DECLARE @A int
DECLARE @B int
SET @A = ?
SET @B = 42
Run Code Online (Sandbox Code Playgroud)
我在Sybase Anywhere 12.0.1.3942服务器上运行它.
更新:经过更多测试后,我注意到当我在同一个查询中有多个参数化语句时会发生这种情况.这也给出了错误:
SELECT ? …Run Code Online (Sandbox Code Playgroud)