gpt4 book ai didi

java - 在 Java 中接受来自外部文本文件的 SQL 查询

转载 作者:行者123 更新时间:2023-12-02 09:24:00 25 4
gpt4 key购买 nike

我被分配制作一个Java程序,该程序逐行接受来自文本文件的SQL查询,第1行是驱动程序名称,第2行是URL,第3行和第4行分别是用户名和密码,第5行是查询。例如,我的文本文件将具有以下内容:

org.apache.derby.jdbc.ClientDriver
jdbc:derby://localhost:1527/STUDENTDB
app
app
SELECT * FROM StudentDb WHERE STUDENT_NAME = ?
Jesse

这是代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import static java.lang.Boolean.parseBoolean;
import static java.lang.Integer.parseInt;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;

public class TestPreparedStatement {
public static void main (String args[]) throws FileNotFoundException, IOException {
try {
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\PCUSER\\info.txt"));
String driver = br.readLine();
Class.forName(driver);
System.out.println("LOADED DRIVER ---> " + driver);

String url = br.readLine();
Connection con = DriverManager.getConnection (url, br.readLine(), br.readLine());
System.out.println("CONNECTED TO ---> "+ url);

String queryStr = br.readLine();
PreparedStatement ps = con.prepareStatement(queryStr);
String argu = br.readLine();
ps.setString(1, argu);

String queryStr2 = br.readLine();

ResultSet rs = ps.executeQuery();
System.out.println("EXECUTED QUERY ---> " + queryStr);
System.out.println("\nPROCESSING RESULTS:\n");
while (rs.next())
{
System.out.println("Name: " + rs.getString("STUDENT_NAME").trim());
System.out.println("Student Number: " + rs.getString("STUDENT_NUMBER").trim());
System.out.println("Course: " + rs.getString("COURSE").trim());
}

rs.close();
ps.close();
con.close();
}

catch (SQLException e) {
e.printStackTrace();
}

catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

}

我设法使其工作的 SELECT 命令,但我不确定如何实现其他查询命令,如 INSERT INTO 和 DELETE。例如,如果我想 insert或者如果我想updatedelete 。基本上,我需要帮助才能使用除 SELECT 之外的其他命令。

最佳答案

您运行executeUpdate而不是executeQuery,其余的都是一样的。检查this举个例子。您必须检测是否正在处理 select 语句或其他语句,这也很简单:queryStr.trim().toUpperCase().startsWith("SELECT ")

我对输入很偏执,它可能像“SELECT a FROM B”一样好,也可能不太好“select a from b”,这仍然是有效的sql,但简单的startsWith不会这样做。 Trim() 删除前导空格,toUpperCase 使其大写;)

为了检测正确的参数数量(查询中的“?”),我建议不要从查询中派生它,而是从输入的其余部分派(dispatch)生。在查询中,可能存在包含问号的字符串值 (INSERT INTO TABLE (COMMENT, GRADE), VALUES("To be or not to be?", ?)),这使得它成为有点复杂。

关于java - 在 Java 中接受来自外部文本文件的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58471879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com