【问题标题】:java.sql.SQLException: ORA-00933: SQL command not properly endedjava.sql.SQLException: ORA-00933: SQL 命令未正确结束
【发布时间】:2012-09-24 23:20:48
【问题描述】:

我想要完成的是能够编写 SQL 语句并验证结果。 SQL 语句中会包含变量,例如:

String sql = "Select  zoneid from zone where zonename = myZoneName";

myZoneName 是从 count + 生成的

注意:我使用 Apache POI 来解析 Excel 电子表格。

代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.junit.Test;

public class VerifyDBSingleDomain {

    static Logger log = Logger.getLogger(VerifyDBSingleDomain.class.getName());

    String url = "jdbc:oracle:thin:@a.b.c.d:1521:mname";

    @Test
    public void VerifyDBSingleDomainTest() throws SQLException {

        Properties props = new Properties();
        props.setProperty("user", "user");
        props.setProperty("password", "password");

        String sql = "Select  zoneid from zone where zonename = 99224356787.tv";
        //String sql = "Select * from zone";

        Connection conn;
        //try {
            conn = DriverManager.getConnection(url, props);
            PreparedStatement preStatement = conn.prepareStatement(sql);
            ResultSet result = preStatement.executeQuery();
            System.out.println(result);

            /*while (result.next()) {
                System.out.println(result.toString());
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }*/

    //  }
    //}

    }
}

我得到错误:

java.sql.SQLException: ORA-00933: SQL command not properly ended

【问题讨论】:

  • 不确定,但看起来你必须引用你的比较String sql = "Select zoneid from zone where zonename = '99224356787.tv'";
  • @gtgaxiola 不确定您如何看到区域名称的 '',我删除了它,因为它可能是问题中的错字。
  • 我的意思是 99224356787.tv 在您的代码中没有被单引号包围,因为 varchars 上的 SQL 比较通常采用 WHERE field = 'myValue' 的形式

标签: java oracle jdbc


【解决方案1】:

假设myZoneName 是文本类型,您应该在WHERE 子句中使用单引号:

String sql = "Select zoneid from zone where zonename = '99224356787.tv'";

假设 zoneid 是 INTEGER 类型,则使用以下命令显示:

while (result.next()) { 
   System.out.println(result.getInt("zoneid");
}

【讨论】:

  • 太好了,现在我得到了 oracle.jdbc.driver.OracleResultSetImpl@1506dc4。但这似乎是一个对象,我如何获得实际的表格内容
【解决方案2】:

如果 myZoneName 是 Varchar 类型,则必须将其包裹在这样的引号中

        String sql = "Select  zoneid from zone where zonename = '99224356787.tv'";

获取表格内容:

ResultSet result = preStatement.executeQuery();
        System.out.println(result);

        while (result.next()) {
            System.out.println(result.getInt("zoneid")); // if zoneid is int in the db table
        }

更多信息请参考Java resultSet API:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多