Java JDBC 执行 sql 语句时报错

2019-10-22 08:50:11 +08:00
 Ygmxy
代码:
import java.sql.*;

public class PreparedStatement {
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e){
e.printStackTrace();
};
String url = "jdbc:mysql://localhost/jdbc?user=root&password=123456&serverTimezone=UTC";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try {

conn = DriverManager.getConnection(url);

stmt = conn.createStatement();

rs = stmt.executeQuery("select id from emp where deptno > 1"); //执行这行代码时报错

while (rs.next()) {
System.out.println(rs.getObject("id"));
}
} catch (SQLException e){
e.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}


报错信息:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200)
at PreparedStatement.main(PreparedStatement.java:21)
Exception in thread "main" java.lang.NullPointerException
at PreparedStatement.main(PreparedStatement.java:30)

Process finished with exit code 1


求助各位大佬
5588 次点击
所在节点    Java
33 条回复
HolmLoh
2019-10-22 11:05:10 +08:00
@ZredoC #7
如果是 java8 的话我倾向于用 try with resources
jay0726
2019-10-22 11:24:01 +08:00
try with resources +1
aborigine
2019-10-22 11:29:04 +08:00
不需要端口,默认自动 3306,你没选 db
Jrue0011
2019-10-22 14:26:11 +08:00
如果你的数据库在本地,端口是默认的 3306,连接的 database 叫 jdbc、table 叫 emp,emp 里存在 id 和 deptno 字段,且 deptno 字段类型是数字的话,看起来都没什么问题。那还是确认外部环境吧,比如你的 mysql 是什么版本,jdbc 驱动是什么版本,有没有多个 jdbc 的 jar 包导致冲突。。。
Ygmxy
2019-10-22 15:02:41 +08:00
@Jrue0011 感谢
saberlove
2019-10-22 16:15:09 +08:00
这是道英语题
Ygmxy
2019-10-22 17:07:56 +08:00
@Jrue0011 请问有没有是 jar 包的版本不同是不是造成我这个报错的呢?我看是跟视频学的视频里的 jar 包是 11,我是 13
Ygmxy
2019-10-22 17:08:10 +08:00
JieS
2019-10-22 17:15:01 +08:00
神 tm 英语题
Jrue0011
2019-10-22 17:38:14 +08:00
@Ygmxy 11、13 是指 JDK 版本吧?我说的版本是 mysql 数据库的版本和你用来连接 mysql 的 jdbc 驱动 mysql-connector-java 的版本
hantsy
2019-10-23 08:43:12 +08:00
url 连接字符格式问题,好多年没调用 Jdbc API 了,尝试将 ?& 全部 URL Encoded 转译一下。
saltedFish666
2019-10-23 10:04:41 +08:00
那什么这个是英语,你看下这个 sql 能不能直接执行
Ygmxy
2019-10-23 15:40:57 +08:00
@saltedFish666 问题解决了,谢啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/611606

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX