有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SQL插入引号错误

int rs = stmt.executeUpdate("INSERT INTO Leden VALUES (null,"+u+","+p+",'1')");

我发现了错误

java.sql.SQLException: Unknown column '(the U variable)' in 'field list';

我确信这是100%的“错误”,但我似乎找不到哪里出了问题 感谢您的帮助

这就是我的全部方法(我想学习如何用事先准备好的语句来完成)

    public static void connectionDB(String u, String p, String f){
{
    try {
        String username = "/////////";
        String password = "///////";
        String url = "///////////////";
        Connection connection = DriverManager.getConnection(url, username, password);
        Statement stmt = connection.createStatement();
        int rs = stmt.executeUpdate("INSERT INTO Leden VALUES (null,'"+u+"','"+p+"','1')");
    } catch (SQLException e) {
        e.printStackTrace();
    }

    System.out.println("Database connected!");
}

}

共 (3) 个答案

  1. # 1 楼答案

    应该是这样的

    int rs = stmt.executeUpdate("INSERT INTO Leden VALUES (null,'"+u+"','"+p+"','1')");
    

    更新:-

    你也可以查看准备好的声明,因为

    当您必须使用不同的数据多次运行同一条语句时,准备好的语句要快得多。这是因为SQL只会验证查询一次,而如果只使用语句,每次都会验证查询

    假设字段是A、B、C、D; A是int,余数是字符串

    String insertTableSQL = "INSERT INTO Leden"
            + "(A,B,C,D) VALUES"
            + "(?,?,?,?)";
    
    preparedStatement.setInt(1, 11);
    preparedStatement.setString(2, "Hello");
    preparedStatement.setString(3, "this");
    preparedStatement.setString(4, "OP");]
    
    preparedStatement .executeUpdate();
    
  2. # 2 楼答案

    应该是的

    int rs = stmt.executeUpdate("INSERT INTO Leden VALUES (null,'"+u+"','"+p+"','1')'");
    
  3. # 3 楼答案

    问题是"在SQL中用于列或表之类的对象,而'用于字符串。所以在+u+中,它似乎不存在于您的查询上下文中

    因此,您的查询本身应该类似于+u++p+是字符串

    INSERT INTO Leden VALUES (null,'+u+','+p+','1')
    

    如果你需要在你的专栏里有",它应该是这样的

    INSERT INTO Leden VALUES (null,'"+u+"','"+p+"','1')
    

    此外,我建议指定要插入的列,使其看起来类似于:

    INSERT INTO "Leden" ("col1", "col2", "col3", "col4") VALUES (null,'+u+','+p+','1')
    

    这将防止在通过另一列扩展表定义时查询失败

    此外,在这里使用预先准备好的语句可能是一个好主意,因为它有助于防止SQL注入