当前位置: 首页 > 知识库问答 >
问题:

它不会给我错误的代码,MySQLSynTaxErrorExcION

蓟雪峰
2023-03-14

这是错误:

运行: Mon Mar25 05:22:00SGT 2019警告:不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL5.5.45 , 5.6.26和5.7.6要求,如果没有设置显式选项,默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序的要求,验证服务器证书属性设置为'false'。您需要通过设置useSSL=false来显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储。Mar25, 2019 5:22:15AMmypackage.profilejButton6ActionPerform SEVERE: nullcom.mysql.jdbc.exceptions.jdbc4.您有一个错误,在您的SQL语法;检查手册,对应于您的MySQL服务器版本的正确语法使用附近的'com.mysql.jdbc.JDBC42PreparedStatement@41399cae: SELECT*从人WHERE id'在第1行在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本地方法)在sun.reflect.NativeConstructorAccessorImpl.new实例(NativeConstructorAccessorImpl.java:62)在sun.reflect.委托构造mpl.new实例(委托构造mpl.java:45)

然后这是代码:

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    PreparedStatement ps;
    ResultSet rs;
    String id = txtid.getText();
    if (id.isEmpty()) {
        JOptionPane.showMessageDialog(null, "ID field is empty");
        return;
    }
    String sql = "SELECT * FROM persons WHERE id = "+ Integer.parseInt(id) + ";";
    JOptionPane.showConfirmDialog(null,"Is this right?\n" + sql);
    try {
        ps = con.prepareStatement(sql);
        rs = ps.executeQuery(String.valueOf(ps));
        if(rs.next()){
        txtln.setText(rs.getString("lastName"));
        txtfn.setText(rs.getString("firstName"));
        txtadrs.setText(rs.getString("address"));
        txtcity.setText(rs.getString("city"));
        }
    } catch (SQLException ex) {
        Logger.getLogger(profile.class.getName()).log(Level.SEVERE, null, ex);
    }
}                                        

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    dispose();
    new menu().setVisible(true);
}

共有1个答案

应翰飞
2023-03-14

rs=ps.executeQuery(String.valueOf(ps));的上下文中不正确。因为在创建ps时已经提供了SQL,所以您需要执行rs=ps.executeQuery();

您的代码几乎没有大问题:

>

切勿使用String串联来构建SQL。在您的示例中,还没有问题,但是如果idString而不是int,则您将存在SQL注入漏洞。由于您已经创建了PreparedStatement使用:

ps = con.prepareStatement("SELECT * FROM persons WHERE id = ?");
ps.setInt(1, Integer.parseInt(id));

处理后关闭PreparedStatement,如果不打算重用它,请使用try with resources语法。

MySQL不需要在语句末尾尾随。只有在启用多语句执行时才需要这样做。

 类似资料:
  • 这段代码给了我一个错误:在'void'void num(int a)plz explain之前需要初始化器

  • 我试图使java编译类文件,但它抛出了一个错误,如何修复它。

  • 我正在做一个编码练习:给定一个整数序列作为一个数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。 所以我写了这段代码: 现在,这段代码似乎适用于大多数序列,但这段代码引发了一个错误: 错误如下: 我只是不明白列表索引怎么可能超出范围…有人有线索吗?

  • 给定一个0和1的数组,我们最多可以将K个值从0更改为1。 返回仅包含1的最长(连续)子数组的长度。 例1: 例2: 注: https://leetcode.com/problems/max-consecutive-ones-iii/ 这是问题链接。在第一个测试用例中,我得到了输出9,但应该是6。我不知道哪里出了问题?

  • 进程 c:在函数“主要”中: prog.c:35:20:警告:格式“%d”需要类型为“int”的参数,但参数3的类型为“void * ”[-w format =]printf(" \ n % c \ t % d \ t identifier \ n ",c,p);^ prog. c: 47:24:警告:格式'%d'需要类型'int'的参数,但参数3的类型'void*'[-Wformat=]prin

  • 我正在尝试将JOOQ与最新版本4.0.0的vertx一起使用。我想通过gradle生成我的DAO和表。以下是我的版本。gradle代码 它取自github链接https://github.com/jklingsporn/vertx-jooq/tree/master/vertx-jooq-classic-jdbc 但是当我运行commmand时/gradlew jooqGenerate要生成代码,它