Java Oracle jdbc SELECT 语句
Posted
技术标签:
【中文标题】Java Oracle jdbc SELECT 语句【英文标题】:Java Oracle jdbc SELECT statement 【发布时间】:2012-01-08 14:43:56 【问题描述】:我在 Eclipse 环境中使用 java 练习 Oracle JDBC。我了解如何通过使用 next()
迭代表格的每一行来输出 SELECT * from product
。我在挣扎
输出语句
SELECT pid, pname
from product
where price>20
这是我的代码:
import java.sql.*;
public class intro
/**
* @param args
*/
public static void main(String[] args)
// throws SQLException
//initiazlie the connection
Connection con=null;
try //try connection to database
//load driver
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("Oracle JDBC driver loaded ok.");
con=DriverManager.getConnection("jdbc:oracle:thin:test/123321@localhost:1521:orcl");
System.out.println("Connect with @oracle:1521:orcl");
//declaring statement
Statement stmt = con.createStatement();
String dropProductTable="drop table product cascade constraints";
//create string
String createProductTable="CREATE TABLE product(" +
"pid number," +
"pname CHAR(20)," +
"price number," +
"PRIMARY KEY (pid)" +
")"; //do not add the semicolon(;) after closing the parenthesis.
/*drop table */
stmt.executeUpdate(dropProductTable);
//execute the create statement
stmt.executeUpdate(createProductTable);//execure the create statement
//create string that holds the insert statement
String insertIntoProduct="INSERT INTO product VALUES (1,'Pepsi',10)";
String insertIntoProduct1="INSERT INTO product VALUES (2,'Fanta',20)";
String insertIntoProduct2="INSERT INTO product VALUES (3,'Mirinda',30)";
String insertIntoProduct3="INSERT INTO product VALUES (4,'Gum',5)";
String updatePrice="UPDATE product set price=55 where price=20";
//stmt.executeUpdate(insertIntoProduct);
stmt.executeUpdate(insertIntoProduct);
stmt.executeUpdate(insertIntoProduct1);
stmt.executeUpdate(insertIntoProduct2);
stmt.executeUpdate(insertIntoProduct3);
//update statement
stmt.executeUpdate(updatePrice);
//save the select statement in a string
String selectStat="SELECT * FROM product";
String selectProduct="SELECT pid, pname from product where price>20";
//stmt.executeUpdate(selectStat);
//create a result set
ResultSet rows = stmt.executeQuery(selectStat);
ResultSet rows1= stmt.executeQuery(selectProduct);
//stmt.executeQuery(selectStat);
int count=0;
while (rows.next())
count+=1;
String productNumber = rows.getString("pid");
String productName = rows.getString("pname");
String productPrice = rows.getString("price");
System.out.println("Row #:"+count);
System.out.println("Product#: "+productNumber);
System.out.println("Product Name: "+productName);
System.out.println("Price: "+productPrice);
int count1=0;
while (rows1.next())
count1+=1;
String productNumber = rows1.getString("pid");
String productName = rows1.getString("pname");
String productPrice = rows1.getString("price");
System.out.println("Row #:"+count);
System.out.println("Product#: "+productNumber);
System.out.println("Product Name: "+productName);
System.out.println("Price: "+productPrice);
con.close();
catch (Exception e)
System.err.println("Exception:"+e.getMessage());
当我尝试输出 selectProduct
变量时,我得到了这个错误
Exception:Invalid column name
需要帮助
这是我得到的输出
Oracle JDBC driver loaded ok.
Connect with @oracle:1521:orcl
Row #:0
Product#: 2
Product Name: Fanta
Price: 55
Row #:0
Product#: 3
Product Name: Mirinda
Price: 30
【问题讨论】:
当您执行 selectStat 查询时,返回的列是什么? 问题出在您的一个 SQL 调用中。我强烈建议将您的逻辑拆分为离散的方法——每个方法应该只做一件事。同时输出堆栈跟踪,因为它会告诉您在程序中的哪个位置遇到问题,从而更快地诊断错误。 【参考方案1】:在您的 SELECT 中,您只会得到“pid”和“pname”:
String selectProduct="SELECT pid, pname from product...
但是您尝试使用不在您的 SELECT 中的字段:
String productPrice = rows1.getString("price");
尝试在您的 SELECT 子句中加入“价格”。
【讨论】:
是的,你说得对,每个结果集都应该在单独的循环中处理。【参考方案2】:你必须更换
SELECT pid, pname from product where price>20;
与
SELECT pid, pname, price from product where price>20;
【讨论】:
以上是关于Java Oracle jdbc SELECT 语句的主要内容,如果未能解决你的问题,请参考以下文章
java 如何接收 oracle 的 select 查询结果 并赋值给变量
使用JDBC从Java调用Oracle SQL中的存储过程的示例
用jmeter做oracle数据库测试时,JDBC配置正确,输入语句,执行报错。
jdbc -- 001 -- 一般方式创建数据库连接(oracle/mysql)