通过 JDBC 执行查询
若要通过 JDBC 运行查询,请执行下列操作:
-
连接到 Vertica 数据库。请参阅创建和配置连接。
-
运行查询。
用于运行查询的方法取决于要运行的查询的类型:
-
不返回结果集的 DDL 查询。
-
将返回结果集的 DDL 查询。
-
DML 查询。
执行 DDL(数据定义语言)查询
若要运行诸如 CREATE TABLE 和 COPY 等 DDL 查询,请使用 Statement.execute()
方法。可以通过调用连接对象的 createStatement
方法获取此类的实例。
以下示例将创建 Statement
类的实例,并使用该实例执行 CREATE TABLE 和 COPY 查询:
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)。若要从结果集获取数据,请根据结果集中的列的数据类型使用诸如 getInt
、getString
和 getDouble
等方法访问列值。使用 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++;
}
注意
Vertica JDBC 驱动程序不支持可滚动光标。您只能在结果集中向前读取。使用 executeUpdate 执行 DML(数据操作语言)查询
可以对用于更改数据库中的数据的 DML SQL 查询(例如,INSERT、UPDATE 和 DELETE)使用 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')");
注意
Vertica JDBC 驱动程序的Statement
类支持在传递给 execute
方法的 SQL 字符串中执行多个语句。PreparedStatement
类不支持在一次执行中使用多个语句。
执行存储过程
您可以使用 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 参数。相反,您可以分别使用 RAISE 和 getWarnings() 返回和检索执行信息:
System.out.println(stmt.getWarnings().toString());