【问题标题】:How to access a specific row in MySQL using Java如何使用 Java 访问 MySQL 中的特定行
【发布时间】:2016-06-28 19:32:30
【问题描述】:

当我作为用户写一个名字时,我需要访问这个名字的姓氏,这个名字已经在数据库中。例如:

Enter a name: beste

beste's surname is: ozcaglar

当我执行我的代码时,我看不到任何姓氏作为输出。

在我的数据库中,我有 namesurnameno(自动递增)列。

import java.sql.*;
import java.util.*;

public class ConnectionMySQL {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter a name: ");
        String isim = scan.next();

        try {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/student","root","");
            //System.out.println("Connection success");
            String query= "SELECT surname FROM student_table WHERE name='isim'";
            Statement stm =conn.createStatement();
            ResultSet rs= stm.executeQuery(query);

            while (rs.next()) {
                System.out.println("Name: " + rs.getString("name")+ " Surname: "+rs.getString("surname"));
            }
        }
        catch (Exception e) {
            System.err.println(e);
        }
    }
}

【问题讨论】:

    标签: java mysql server


    【解决方案1】:

    该错误表示该表没有名为“isim”的列。

    也许你打算写:

    SELECT surname FROM student_table WHERE name='isim'
    

    ?

    编辑(在 cmets 之后):

    query = "SELECT surname FROM student_table WHERE name='" + isim + "'"
    

    但是,出于安全原因,它不应在实际应用程序中使用(它允许 SQL 注入攻击)。

    在实际生产代码中,您应该转义输入字符串,或者使用参数化查询...

    【讨论】:

    • 哦,是的,谢谢,我没有意识到。但是当我像 WHERE name='isim' 这样写时,我无法看到任何结果。
    • 您确定在数据库中有符合此条件的行吗?
    • 是的。在数据库中,我的名字是“beste”,姓氏是“ozcaglar”。
    • 但是isimthen 是什么,如果它不是您要搜索的名称???您的查询应该是WHERE name='beste'
    • 哦,我明白了.. 你想添加一个名为“isim”的变量的内容。也许像这样 - " ... WHERE name='" + isim + "'"
    【解决方案2】:

    你可以按照这个:

    import java.sql.*;
    import java.util.*;
    public class test4 {
    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter a name: ");
        String isim = scan.next();
        try {
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "");
                System.out.println("Connection success");
                String query = "SELECT * FROM users WHERE surname='" + isim + "'";
                Statement stm = conn.createStatement();
                ResultSet rs = stm.executeQuery(query);
                while (rs.next()) {
                    String fName = rs.getString(1);
                    String sName = rs.getString(2);
                    System.out.println("Name: " + fName + " Surname: " + sName);
                }
            } catch (Exception e) {
            System.err.println("Error");
            }
        }
    }
    

    【讨论】:

    • 是的,它可以工作,但查询应该是这样的: String query = "SELECT * FROM users WHERE name='" + isim + "'" ...另外,也谢谢你的回答!
    • 我认为根据我创建的表格是正确的。抱歉,我用不同的名称创建了我的表。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多