[英]How to SELECT using Stored Procedure
How can I retrieve (SELECT) all my data using Stored Procedure while using this Stored Procedure via Callable Statement? 在通过可调用语句使用此存储过程的同时,如何使用存储过程检索(选择)我的所有数据? I created a sample project where I need to SELECT all the data from my table.
我创建了一个示例项目,在这里我需要从表中选择所有数据。 First I used a Prepared Statement so I can insert data to the following textfields.
首先,我使用了Prepared Statement,因此可以将数据插入以下文本字段。 Btw I'm using derby.
顺便说一句,我正在使用德比。
TABLE 表
CREATE TABLE SAMPLEONLY
(
FULLNAME VARCHAR(50),
ADDRESS VARCHAR(50)
)
GUI 图形用户界面
CODES FOR INSERT 插入代码
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
String addFullname = fullnameTf.getText();
String addAddress = addressTf.getText();
String insert = "INSERT INTO SAMPLEONLY (FULLNAME,ADDRESS) VALUES (?,?)";
try (Connection myConn = DriverManager.getConnection(url, user, pass);
PreparedStatement myPs = myConn.prepareStatement(insert);){
myPs.setString(1, addFullname);
myPs.setString(2, addAddress);
myPs.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
After inserting to the following textfields. 插入到以下文本字段之后。 I need to retrieve all my data using Stored Procedure.
我需要使用存储过程检索所有数据。 I created a stored procedure base on what I read on Derby Reference Manual.
我根据《 Derby参考手册》上的内容创建了一个存储过程。 How can insert SELECT * FROM SAMPLEONLY in my Stored Procedure?
如何在我的存储过程中插入SELECT * FROM SAMPLEONLY?
STORED PROCEDURE 存储过程
CREATE PROCEDURE show_data(IN FULLNAME VARCHAR(50), IN ADDRESS VARCHAR(50))
PARAMETER STYLE JAVA
LANGUAGE JAVA
READS SQL DATA
EXTERNAL NAME 'Frame.searchButton'
//HOW CAN I INSERT HERE?
How can I insert the SELECT * FROM SAMPLEONLY here? 如何在此处插入SELECT * FROM SAMPLEONLY? I'm a little bit confused creating this stored procedure because this is my first time to use this.
我对此创建过程有些困惑,因为这是我第一次使用它。 I named my class as Frame
我将班级命名为Frame
CODE FOR SELECT 选择代码
private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {
String seeachStoredProc = "{call show_data(?,?)}";
try (Connection myConn = DriverManager.getConnection(url, user, pass);
CallableStatement myCs = myConn.prepareCall(seeachStoredProc);)
{
//what goes here?
}
catch (SQLException e)
{
e.printStackTrace();
}
}
Any help will appreciate! 任何帮助将不胜感激! Guide me if something wrong in my codes.
如果我的代码有问题,请指导我。 Feel free to comment.
随时发表评论。
Please use below code 请使用下面的代码
Stored procedure 存储过程
CREATE PROCEDURE show_data(IN FULLNAME VARCHAR(50), IN ADDRESS VARCHAR(50))
PARAMETER STYLE JAVA
LANGUAGE JAVA
READS SQL DATA
EXTERNAL NAME 'Frame.searchButton'
BEGIN
INSERT INTO SAMPLEONLY("FULLNAME", "ADDRESS")
VALUES (FULLNAME , ADDRESS);
COMMIT;
END;
CODE FOR SELECT 选择代码
private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {
String seeachStoredProc = "{call show_data(?,?)}";
try (Connection myConn = DriverManager.getConnection(url, user, pass);
CallableStatement myCs = myConn.prepareCall(seeachStoredProc);)
{
String addFullname = fullnameTf.getText();
String addAddress = addressTf.getText();
myCs .setInt(1, addFullname
myCs .setString(2, addAddress );
// execute store procedure
myCs .executeUpdate();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
You could use something like the following: 您可以使用如下所示的内容:
CREATE PROCEDURE show_data(IN FULLNAME VARCHAR(50), IN ADDRESS VARCHAR(50))
PARAMETER STYLE JAVA
LANGUAGE JAVA
READS SQL DATA
DYNAMIC RESULT SETS 1
EXTERNAL NAME 'SomeClass.showData'
Inside the SomeClass class (or the forms class) add an static method called showData that has two string parameters 在SomeClass类(或Forms类)内部,添加一个名为showData的静态方法,该方法具有两个字符串参数
public class SomeClass{
public static void showData(String fullname, String address, ResultSet[] data){
Connection conn = ... //somehow create a connection to database
PreparedStatement ps = conn.prepareStatement("SELECT * FROM SAMPLEONLY");
data[0] = ps.executeQuery();
conn.close();
}
}
And inside your button 在你的按钮里面
CallableStatement cs = conn.prepareCall("{ call showData(?, ?)}");
cs.setString(1, p1);
cs.setString(2, p2);
boolean hasResults = cs.execute();
if (hasResults) {
ResultSet rs = cs.getResultSet();
while (rs.next()) {
// do stuff with selected data
}
}
EDIT I've noticed that when you access to the connection in the stored procedure, you must use the connection string jdbc:default:connection So in the code above change the connection line 编辑我注意到,当您在存储过程中访问连接时,必须使用连接字符串jdbc:default:connection,因此在上面的代码中更改连接行
public class SomeClass{
public static void showData(String fullname, String address, ResultSet[] data){
Connection conn = DriverManager.getConnection("jdbc:default:connection");
PreparedStatement ps = conn.prepareStatement("SELECT * FROM SAMPLEONLY");
data[0] = ps.executeQuery();
conn.close();
}
In derby stored procedures you always return a result in form of another method parameter (in this case the ResultSet array). 在derby存储过程中,您总是以另一个方法参数(在这种情况下为ResultSet数组)的形式返回结果。 The NullException you're having is probably somewhere else }
您遇到的NullException可能在其他地方}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.