odbc无效的配置值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了odbc无效的配置值相关的知识,希望对你有一定的参考价值。
打开 "ODBC 数据源管理器"。在 "ODBC 数据源管理器" 对话框中,单击 "添加"。 此时将显示 "新建数据源" 对话框。
ODBC无效的配置值可以选择 "Microsoft ODBC for Oracle",然后单击 "完成"。 此时将显示 "Microsoft ODBC for Oracle 设置" 对话框。在 "数据源名称" 框中,键入要访问的数据源的名称。 它可以是你选择的任何名称。在 "说明" 框中,键入驱动程序的说明。 此可选字段描述数据源连接到的数据库驱动程序。 它可以是你选择的任何名称。在 "用户名" 框中,键入数据库用户名称 (数据库用户 ID) 。在 "服务器" 框中,键入要访问的 Oracle 服务器引擎的数据库别名或连接字符串。祝您生活愉快,谢谢提问😊 参考技术A odbc无效的配置值:在32位winxp上安装mysql ODBC 5.1.7,然后按照标准步骤创建dsn。如果中间配置没有完成,点击ok,创建成功,但点击配置或删除时。
为啥我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效
【中文标题】为啥我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效【英文标题】:Why am I getting: [Oracle][ODBC][Ora]ORA-00904: invalid identifier为什么我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效 【发布时间】:2011-04-17 16:26:14 【问题描述】:当我清楚地识别出变量时,Oracle 一直给我一个无效标识符错误。
//get parameters from the request
String custID=request.getParameter("cust_ID");
String saleID=request.getParameter("sale_ID");
String firstName=request.getParameter("first_Name");
String mInitial=request.getParameter("mI");
String lastName=request.getParameter("last_Name");
String streetName=request.getParameter("street");
String city=request.getParameter("city");
String state=request.getParameter("state");
String zipCode=request.getParameter("zip_Code");
String DOB2=request.getParameter("DOB");
String agentID=request.getParameter("agent_ID");
String homePhone=request.getParameter("home_Phone");
String cellPhone=request.getParameter("cell_Phone");
String profession=request.getParameter("profession");
String employer=request.getParameter("employer");
String referrer=request.getParameter("referrer");
query =
"UPDATE customer"
+ " SET customer.cust_ID=custID, customer.sale_ID=saleID, customer.first_Name=firstName, customer.mI=mInitial, customer.last_Name=lastName, customer.street_Name=streetName, customer.city=city, customer.state=state, customer.zip_Code=zipCode,customer. DOB=DOB2, customer.agent_ID=agentID, customer.home_Phone=homePhone, customer.cell_Phone=cellPhone, customer.profession=profession, customer.employer=employer, customer.referrer=referrer"
+ " WHERE customer.cust_ID=custID " ;
preparedStatement = conn.prepareStatement(query);
preparedStatement.executeUpdate();
SQL 表
CREATE TABLE customer
(cust_ID NUMBER NOT NULL,
sale_ID NUMBER NOT NULL,
first_NameVARCHAR2(30) NOT NULL,
mI VARCHAR2(2) ,
last_Name VARCHAR2(50) NOT NULL,
street_Name VARCHAR2(50) ,
city VARCHAR2(30) NOT NULL,
state VARCHAR2(50) NOT NULL,
zip_Code VARCHAR2(5) NOT NULL,
DOB DATE ,
agent_ID NUMBER ,
home_Phone VARCHAR2(12) UNIQUE,
cell_Phone VARCHAR2(12) UNIQUE,
profession VARCHAR2(30) ,
employer VARCHAR2(30) ,
referrer VARCHAR2(30)
);
【问题讨论】:
【参考方案1】:您的代码没有按照您的想法执行。看看这个:
query =
"UPDATE customer"
+ " SET customer.cust_ID=custID, customer.sale_ID=saleID, customer.first_Name=firstName, customer.mI=mInitial, customer.last_Name=lastName, customer.street_Name=streetName, customer.city=city, customer.state=state, customer.zip_Code=zipCode,customer. DOB=DOB2, customer.agent_ID=agentID, customer.home_Phone=homePhone, customer.cell_Phone=cellPhone, customer.profession=profession, customer.employer=employer, customer.referrer=referrer"
+ " WHERE customer.cust_ID=custID "
此时query
的内容正是将发送到数据库的内容。在将查询发送到数据库之前,JSP 将不会神奇地为您填写 custID
、saleID
(等等...)。因此,Oracle 不知道custID
是什么(它肯定不是customer
表中其他列的名称)。因此,您会收到无效标识符错误。
我认为你试图这样做:
query =
"UPDATE customer"
+ " SET customer.cust_ID=" + custID + ", customer.sale_ID=" + saleID + ...
就像 duffymo 提到的那样,这会导致严重的 SQL 注入问题(想想客户端可以提交的值,以便通过 custID
字段劫持您的 SQL)。更好的方法是在PreparedStatement
上使用参数:
query =
"UPDATE customer"
+ " SET customer.cust_ID=?, customer.sale_ID=? ...";
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, custID);
statement.setString(2, saleID);
statement.executeUpdate();
【讨论】:
【参考方案2】:我建议不要在您的 JSP 中使用脚本。尽快学习 JSTL。
答案似乎很明显:您的参数都是字符串,但 Oracle 架构有一些数据和数字类型。插入时必须转换为正确的类型。
此代码请求 SQL 注入攻击。在 INSERT 之前不进行任何绑定或验证。你不可能比这更不安全。我希望您不打算将此网站用于网络上的任何内容。
更好的方法是从 JSP 中取出 scriptlet 代码,仅使用 JSTL 来编写它,并引入一个 servlet 和一些其他层来帮助绑定、验证、安全等。
【讨论】:
感谢大家的反馈。我正在重写这个并将发布一个新问题。提出上述建议后,我仍然收到错误消息。我认为这与我的 SQL 语句本身有关,因为我有另一个页面与上面的页面完全相同(使用准备好的语句等),但使用的是 SQL INSERT 语句。过去 2 天我一直在为这个项目工作,我的代码刚刚变得循环!【参考方案3】:我认为在 sql 查询中,您在 customer,DOB 之间输入了空格。
客户。出生日期=出生日期2
【讨论】:
以上是关于odbc无效的配置值的主要内容,如果未能解决你的问题,请参考以下文章
(fast_executemany = True) 错误“[ODBC Driver 17 for SQL Server]强制转换规范 (0) (SQLExecute)'的字符值无效”)