3 回答
TA贡献1788条经验 获得超4个赞
问题出在这里:
$sql = "插入 hires_bp (suraduju_od, suraduju_do, id_band, id_producer) VALUES ($timestampa, $tsa, (SELECT id FROM band WHERE band_name = '$myname'), (SELECT id FROM producer WHERE producer_name = '$name' ))";
'' 丢失 --> $timestampa 和 $tsa..
'$timestampa' 和 '$tsa'
TA贡献1789条经验 获得超10个赞
智能对象,而不是哑字符串
我们在 Java 和 SQL 中都有数据类型,因此请使用它们。仅仅使用字符串来思考和工作是笨拙的、容易出错的,并且使您容易受到SQL 注入攻击。
相比之下,使用适当的数据类型可以使您的代码更简单、更自文档化、提供类型安全并确保有效值。
避免遗留日期时间类
您正在使用多年前随着 JSR 310 的采用而被java.time类取代的可怕的日期时间类。
java.time
用于LocalDate
仅限日期的值。此类适用于处理类似于 SQL 标准类型的数据库列DATE
。
LocalDate ld = LocalDate.of( 2019 , 1 , 23 ) ; // January 23, 2019.
使用 JDBC 4.2 及更高版本,传递给数据库。使用准备好的语句来防止 SQL 注入攻击。
myPreparedStatement.setObject( … , ld ) ;
恢复。
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
解析字符串
java.time类在解析/生成表示日期时间值的字符串时默认使用标准 ISO 8601 格式。
LocalDate ld = LocalDate.parse( "2019-01-23" ) ;
生成字符串
生成字符串以显示给用户。使用 自动本地化DateTimeFormatter.ofLocalizedDate
,或生成标准 ISO 8601 格式的字符串。
String output = ld.toString() ; // Generate string in standard YYYY-MM-DD format.
要本地化,请指定:
FormatStyle
确定字符串的长度或缩写。Locale
确定:用于翻译日期名称、月份名称等的人类语言。
决定缩写、大写、标点符号、分隔符等问题的文化规范。
例子:
Locale l = Locale.CANADA_FRENCH ; // Or Locale.US, Locale.JAPAN, etc.
DateTimeFormatter f =
DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( l )
;
String output = ld.format( f );
2019 年 1 月 23 日星期三
添加回答
举报