gpt4 book ai didi

java - 如何在sql中正确使用两个表之间的连接我有一个异常(exception)

转载 作者:行者123 更新时间:2023-11-30 01:32:45 25 4
gpt4 key购买 nike

我遇到了 sql 查询问题,我需要你的帮助:(。在我的代码中,我想在输入本类(class)的 id 时显示 c#Log 中的学生姓名,这是 c#Log 表:HERE这是类(class)表:HERE

这是我的代码:

public void searchRows() throws ClassNotFoundException, SQLException

{
String logName=null;
Class.forName("com.mysql.jdbc.Driver");
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/psd_DB?"
+ "user=root&password=123");

Scanner s=new Scanner(System.in);
System.out.println("Enter the course id you want to display its log:");
courseId=Integer.parseInt(s.nextLine());

PreparedStatement st1 = (PreparedStatement) con.prepareStatement(" SELECT * FROM courses WHERE courseId="+courseId);
ResultSet r=(ResultSet) st1.executeQuery();
while(r.next())

{
logName=r.getString("courseName")+"Log";
}

//System.out.println(logName);

PreparedStatement st2 = (PreparedStatement) con.prepareStatement("SELECT "+logName+"."+"studentName FROM "+logName+" INNER JOIN courses ON "+logName+"."+courseId+"="+"courses."+courseId+";");
st2.executeQuery();

}

当我输入 2 时,输出是这个异常:

线程“main”com.mysql.jdbc.exceptions.MySQLSyntaxErrorException中出现异常:“字段列表”中的未知列“C”

最佳答案

首先,您正在使用 PreparedStatement,但您的代码仍然容易受到 SQL 注入(inject)攻击。

这样做:

courseId=Integer.parseInt(s.nextLine());

PreparedStatement st1 = (PreparedStatement) con.prepareStatement("
SELECT * FROM courses WHERE courseId=?");

st1.setInt(1,courseId);
ResultSet r = st1.executeQuery();

而且这个异常(exception)是不言自明的:

未知列C意味着您正在尝试从表中选择不存在的列,因此最好检查您是否正在访问正确的列。

解决方法:在执行 SQL 查询之前打印它们,以便您知道正在执行哪个查询(您可以在获得预期结果后删除此打印语句)。

关于java - 如何在sql中正确使用两个表之间的连接我有一个异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259425/

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