java - 我的 java spring boot 代码有什么问题
问题描述
现在我想将 java spring boot 连接到 mysql 所以我尝试了这段代码
package com.tutorial.springboot;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
import lombok.var;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.sql.Driver;
public class Application {
public static void main(String[] args) throws IOException, ClassNotFoundException{
var prop = new Properties();
prop.load(new FileInputStream("src/main/resources/Application.properties"));
var ds = new SimpleDriverDataSource();
ds.setDriverClass(((Class<Driver>) Class.forName(prop.getProperty("jdbc.driver"))));
ds.setUrl(prop.getProperty("jdbc.url"));
ds.setUsername(prop.getProperty("jdbc.username"));
ds.setPassword(prop.getProperty("jdbc.password"));
var sql = "SELECT COUNT(*) FROM ked_error_nonumber";
var jtm = new JdbcTemplate(ds);
int numOfCars = jtm.queryForObject(sql, Integer.class);
System.out.format("There are %d", numOfCars);
}
}
这工作得很好
但是当我运行这段代码时
package com.tutorial.springboot;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
import lombok.var;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.sql.Driver;
public class Application {
public static void main(String[] args) throws IOException, ClassNotFoundException{
var prop = new Properties();
prop.load(new FileInputStream("src/main/resources/Application.properties"));
var ds = new SimpleDriverDataSource();
ds.setDriverClass(((Class<Driver>) Class.forName(prop.getProperty("jdbc.driver"))));
ds.setUrl(prop.getProperty("jdbc.url"));
ds.setUsername(prop.getProperty("jdbc.username"));
ds.setPassword(prop.getProperty("jdbc.password"));
var sql = "SELECT * FROM ked_error_nonumber";
var jtm = new JdbcTemplate(ds);
var rows = (List<Map<String, Object>>) jtm.queryForList(sql);
rows.forEach(System.out::println);
}
}
此代码引发错误:(30、13)java:无法在此处使用“var”,因为初始化表达式没有可表示的类型:无法解析类型
那么问题是什么?如果有人知道请教我谢谢!
解决方案
关键字var
意味着您委托编译器猜测变量的正确类型,而不是首先声明它。
这使得代码编写起来不那么冗长,并且可能更快地阅读和理解。
但var
并不总是可用,只是当变量的类型很清楚,编译器可以猜测时。
如果不是,那么您必须将类型声明为正常。
在你的情况下,我认为违规行是:
var rows = (List<Map<String, Object>>) jtm.queryForList(sql);
List<T>
并且Map<K, V>
不是真正的类型,只是用于方法签名和变量声明的接口,以告诉编译器要使用的接口。
但是当我们实例化对象时,我们需要一个具体的类型,一个实现正确接口的类的对象。例如:
List<String> myList = ArrayList<>();
这里我声明了一个字符串列表,但是为了初始化变量我实例化了一个 ArrayList<>。
要解决此问题,您只需更改代码:
List<Map<String, Object>> rows = (List<Map<String, Object>>) jtm.queryForList(sql);
更新
我刚才注意到您正在从 Project Lombok 导入以使用var
.
我认为这可能是编译器无法在错误行中获取正确类型的原因,并且您的 IDE 没有首先提示错误。
在 Java 10+ 上,你有var
一个关键字,然后它应该可以工作。
我想您的 IDE 是var
从 Lombok 导入的,因为您使用的是 Java 8 或低于 10 的 Java 版本。
如果是这种情况,那么您必须遵循类型声明。
如果您使用 java 10+ 并且导入是一种意外,或者您可以使用 Java 10,那么您可以尝试删除导入并使用该语言。
在这种情况下,如果 IDE 未编译,则应立即突出显示。
推荐阅读
- c++ - 以windows形式输出
- python - 通过蓝牙串口将 2 个 ESP32 连接到 Raspberry
- android - 毕加索导致应用程序崩溃说路径为空?代码在另一个适配器中工作
- r - R:使用 rvest 抓取 - 从 href-data 获取标题
- html - Bootstrap微调器在ajax调用之前和之后不起作用
- java - import java.net.http 无法解析
- java - SQLite 中的高性能 JSON 文本解析和存储
- spring - 是否可以使用 Spring 的 Gradle 依赖管理插件设置 dependencySet 条目的分类器
- azure-cognitive-search - 调用 Azure 认知搜索 API 时出现证书验证错误
- python - 在没有网络的情况下在 python 计算机中安装软件包时出错 (Errno 11001)