通过 JDBC 执行查询

若要通过 JDBC 运行查询,请执行下列操作:

  1. 连接到 Vertica 数据库。请参阅创建和配置连接

  2. 运行查询。

用于运行查询的方法取决于要运行的查询的类型:

  • 不返回结果集的 DDL 查询。

  • 将返回结果集的 DDL 查询。

  • DML 查询。

执行 DDL(数据定义语言)查询

若要运行诸如 CREATE TABLECOPY 等 DDL 查询,请使用 Statement.execute() 方法。可以通过调用连接对象的 createStatement 方法获取此类的实例。

以下示例将创建 Statement 类的实例,并使用该实例执行 CREATE TABLECOPY 查询:

Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE address_book (Last_Name char(50) default ''," +
    "First_Name char(50),Email char(50),Phone_Number char(50))");
stmt.execute("COPY address_book FROM 'address.dat' DELIMITER ',' NULL 'null'");

执行将返回结果集的查询

可以使用 Statement 类的executeQuery 方法执行将返回结果集的查询(例如 SELECT)。若要从结果集获取数据,请根据结果集中的列的数据类型使用诸如 getIntgetStringgetDouble 等方法访问列值。使用 ResultSet.next 可以前进到数据集的下一行。

ResultSet rs = null;
rs = stmt.executeQuery("SELECT First_Name, Last_Name FROM address_book");
int x = 1;
while(rs.next()){
    System.out.println(x + ". " + rs.getString(1).trim() + " "
                       + rs.getString(2).trim());
    x++;
}

使用 executeUpdate 执行 DML(数据操作语言)查询

可以对用于更改数据库中的数据的 DML SQL 查询(例如,INSERTUPDATEDELETE)使用 executeUpdate 方法,这些查询不会返回结果集。

stmt.executeUpdate("INSERT INTO address_book " +
                   "VALUES ('Ben-Shachar', 'Tamar', 'tamarrow@example.com'," +
                   "'555-380-6466')");
stmt.executeUpdate("INSERT INTO address_book (First_Name, Email) " +
                   "VALUES ('Pete','pete@example.com')");

执行存储过程

您可以使用 CallableStatement 来创建和执行存储过程

创建存储过程

Statement st = conn.createStatement();

String createSimpleSp = "CREATE OR REPLACE PROCEDURE raiseInt(IN x INT) LANGUAGE PLvSQL AS $$ " +
"BEGIN" +
    "RAISE INFO 'x = %', x;" +
"END;" +
"$$;";

st.execute(createSimpleSp);

调用存储过程:

String spCall = "CALL raiseInt (?)";
CallableStatement stmt = conn.prepareCall(spCall);
stmt.setInt(1, 42);

存储过程尚不支持 OUT 参数。相反,您可以分别使用 RAISEgetWarnings() 返回和检索执行信息:

System.out.println(stmt.getWarnings().toString());