使用PreparedStatement的setString方法会自动在数据库相应表项后面补空格解决办法

本文介绍使用PreparedStatement向数据库插入数据时出现的自动添加空格问题,并提供了解决方案,即将字段类型设置为nverchar。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用PreparedStatement的setString方法会自动在数据库相应表项后面补空格解决办法

原创  2013年10月03日 19:20:27

数据库表的数据项如果设置为char、verchar类型,使用PreparedStatement向表中插入字符串数据时,数据会自动在后面添加空格,解决的办法是将数据项类型设置为nverchar。


[java]  view plain  copy
  1. package Example;  
  2.   
  3. import java.sql.*;  
  4.   
  5. public class MyIcon  
  6. {  
  7.     private Connection con;  
  8.     public void getConnection()  
  9.     {  
  10.         try {  
  11.             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
  12.         } catch (ClassNotFoundException e) {  
  13.             // TODO 自动生成的 catch 块  
  14.             e.printStackTrace();  
  15.         }  
  16.         try {  
  17.             con = DriverManager.getConnection("jdbc:odbc:MySqlTable""sa""");  
  18.         } catch (SQLException e) {  
  19.             // TODO 自动生成的 catch 块  
  20.             e.printStackTrace();  
  21.         }  
  22.     }  
  23.     public void showTable()  
  24.     {  
  25.         try {  
  26.             PreparedStatement sql = con.prepareStatement("select * from student");  
  27.             ResultSet result = sql.executeQuery();  
  28.             while(result.next())  
  29.             {  
  30.                 System.out.print("id:" + result.getString(1));  
  31.                 System.out.print(", name:" + result.getString(2));  
  32.                 System.out.print(", sex:" + result.getString(3));  
  33.                 System.out.println(", birthday:" + result.getString(4));  
  34.             }  
  35.         } catch (SQLException e) {  
  36.             // TODO 自动生成的 catch 块  
  37.             e.printStackTrace();  
  38.         }  
  39.     }  
  40.     public void insertTable()  
  41.     {  
  42.         try {  
  43.             PreparedStatement sql = con.prepareStatement("insert into student values(?, ?, ?, ?)");  
  44.             sql.setInt(125);  
  45.             sql.setString(2"张一");  
  46.             sql.setString(3"女");  
  47.             sql.setString(4"2012-12-01");  
  48.             sql.executeUpdate();  
  49.         } catch (SQLException e) {  
  50.             // TODO 自动生成的 catch 块  
  51.             e.printStackTrace();  
  52.         }  
  53.     }  
  54.     public static void main (String []args)  
  55.     {  
  56.         MyIcon icon = new MyIcon();  
  57.         icon.getConnection();  
  58.         System.out.println("修改前:");  
  59.         icon.showTable();  
  60.           
  61.         icon.insertTable();  
  62.         System.out.println("插入后:");  
  63.         icon.showTable();  
  64.     }  
  65. }  

运行结果:

id:18, name:张三, sex:女, birthday:2012-12-02//表中已存在的数据
id:23, name:李某, sex:女, birthday:1999-10-20//表中已存在的数据
id:24, name:张一, sex:女, birthday:2002-12-01//表中已存在的数据
id:25, name:张一      , sex:女, birthday:2012-12-01   //插入的数据,其中name设置为verchar有空格,sex设置nverchar输出没有空格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值