【问题标题】:JAVA SQL assign all wildcards to nullJAVA SQL 将所有通配符赋值为 null
【发布时间】:2015-06-11 18:22:25
【问题描述】:

我目前有一个带有标记空值的字符串通配符返回的 sql 字符串。我正在尝试找到一种将所有这些通配符值设置为 null 的方法。环顾四周后,我发现了一个preparedStatement.setNull() 方法,但是它需要一个索引,并且通配符的索引会发生变化。有没有办法克服这个问题? (下面给出的示例 sql 字符串):

String sqlCmd=
"INSERT INTO gs_support_structure (OBJECTID, gs_support_structure_gs_guid, 
gs_support_structure_gs_vc_revision, gs_support_structure_gs_old_objectid, 
gs_support_structure_gs_symbol_rotation, gs_support_structure_gs_subtype_cd, 
gs_support_structure_gs_equipment_location, gs_support_structure_gs_map_no, 
gs_support_structure_gs_substation, gs_support_structure_gs_description, 
gs_support_structure_gs_height, gs_support_structure_gs_class, 
gs_support_structure_gs_installation_date, gs_support_structure_gs_comments, 
gs_support_structure_gs_date_created, gs_support_structure_gs_date_modified, 
gs_support_structure_gs_diameter, gs_support_structure_gs_foundation_type, 
gs_support_structure_gs_grounded, gs_support_structure_gs_manufacturer, 
gs_support_structure_gs_material, gs_support_structure_gs_owner, 
gs_support_structure_gs_pole_count, gs_support_structure_gs_style, 
gs_support_structure_gs_treatment_type, gs_support_structure_gs_usage_type, 
gs_support_structure_gs_old_layer_name, 
gs_support_structure_gs_year_manufactured, gs_support_structure_gs_obj_no, 
gs_support_structure_gs_prev_pole_id, gs_support_structure_gs_feeder_number, 
gs_support_structure_gs_bec_substation, 
gs_support_structure_gs_line_section, gs_support_structure_gs_facility_id, 
gs_support_structure_gs_work_initiation_id, 
gs_support_structure_gs_height_estimated, 
gs_support_structure_gs_double_wood, gs_support_structure_gs_damaged, 
gs_support_structure_gs_image_number, gs_support_structure_gs_x_coordinate, 
gs_support_structure_gs_y_coordinate, gs_support_structure_gs_latitude, 
gs_support_structure_gs_longitude, gs_support_structure_gs_gps_type, 
gs_support_structure_gs_quality_value_meters, 
gs_support_structure_gs_elevation_meters, 
gs_support_structure_gs_construction_unit, gs_support_structure_gs_tag, 
gs_support_structure_gs_tag_placed, gs_support_structure_gs_oldattachpole, 
gs_support_structure_gs_poletopped, gs_support_structure_gs_polehazard, 
gs_support_structure_gs_raptor, gs_support_structure_gs_groundpresent, 
gs_support_structure_gs_test, gs_support_structure_gs_gpsdate, 
gs_support_structure_gs_gpstime, gs_support_structure_gs_sriid, 
gs_support_structure_gs_vc_modified_sw, 
gs_support_structure_gs_ju_attached_fi, 
gs_support_structure_gs_related_staking_guid, 
gs_support_structure_gs_hyperlink, gs_display_feature_name, gs_guid) VALUES 
('227', '{20731926-2A46-CDAC-547C-71226454977D}', '1099', '12202', '0.0', 
'1', '1812', '571871874801', '9', ?, '40', '6', ?, ?, 'Thu Feb 25 17:25:19 
CST 2010', 'Mon Feb 13 12:19:34 CST 2012', ?, ?, ?, ?, 'WOOD', 'BARTLETT', 
?, ?, ?, 'PRI', ?, 'UNK', ?, ?, '03', 'Salty', ?, '1812', ?, 'Y', 'N', 'N',  
?, '3293532.68888944', '1.021396693284668E7', '30.64895755', '-97.16239132', 
?, ?, ?, ?, '106382', 'Y', 'N', 'N', 'NONE', 'NONE', 'Y', 'UNK', 'Fri Sep 04 
00:00:00 CDT 2009', 'Sat Dec 30 10:24:13 CST 1899', '1812', ?, 'N', ?, ?, 
'gs_support_structure', '{D63C9735-4632-7E71-726C-3248E8B25E44}')"

PreparedStatement preparedStatement =     
spatialLiteConnection.prepareStatement(sqlCmd);

preparedStatement.execute();
JdbcUtil.close(preparedStatement);

【问题讨论】:

  • 你能解释一下“通配符索引是如何变化的”吗?
  • 对不起,如果我不清楚。当您调用preparedStatement.setNull() 时,您需要传递?您想在其中设置为空。我的空值出现在不同的地方。即:有时第一个值是?有时第一个值将是实际值
  • 典型的 JDBC 不起作用是有原因的吗? (例如:ps.setInt(1, int)); ps.setString(2, String);

标签: java sql prepared-statement wildcard


【解决方案1】:

在这种情况下,我可以建议您不要使用preparedStatement.setNull()(因此您的语句每次都会不同,并且每次都需要进行硬解析),而只需替换您所有的“?”在您的声明中为“NULL”。 为什么不呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    相关资源
    最近更新 更多