新手求助,有关对数据库中模糊掉手机号码的程序!!!

cj525111 2014-04-12 04:57:29
小弟]我初学JAVA 先需要对SQL server中的一个表的字段进行模糊处理,这个字段名是U_phone,类型是varchar,大约有20W行数据。这个字段存储的是手机号码,没有重复项。现在需要对这些号码进行模糊处理具体值 举例 8613012345678。
我的思路是将所有的号码的前5位进行字母编码,全国一共只有22个号段,例如 : 130 对应 A 131 对应 B ....
我原本希望在数据库内部写个存储过程,但因为水平原因始终写不出来。于是想到将这个字段的所有号码select到JAVA中在进行处理,我的程序代码如下:

import java.sql.*;
public class PhoneKey {

public static void main(String[] args) {
// TODO Auto-generated method stub
String JDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//SQL数据库引擎
String connectDB="jdbc:sqlserver://localhost:1433;DatabaseName=GOC_01";
String user="sa";
String pass="400";
try
{
Class.forName(JDriver);//加载数据库引擎,返回给定字符串名的类
}catch(ClassNotFoundException e)
{
System.out.println("数据库加载失败!");
e.printStackTrace();
System.exit(0);
}
try{
Connection con=DriverManager.getConnection(connectDB,user,pass);
System.out.println("数据库连接成功!");
String sql="select C_phone from ceshi_2";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
while (rs.next())
{
String s=rs.getString("C_phone");
String s1=s.substring(0, 5);
String s2=s.substring(5, 13);
String biaoji="";
if(s1=="86130")
{
biaoji="K"+s2;
}
else if(s1=="86131")
{
biaoji="J"+s2;
}
else if(s1=="86132")
{
biaoji="I"+s2;
}
else if(s1=="86155")
{
biaoji="H"+s2;
}
else if(s1=="86156")
{
biaoji="G"+s2;
}
else if(s1=="86186")
{
biaoji="F"+s2;
}
else if(s1=="86185")
{
biaoji="E"+s2;
}
else {
biaoji="WRONG"+s2;
}
String sqlupdate="update ceshi_2 set C_phone = ?" ;
pstmt.setString(1, biaoji);
pstmt.executeUpdate(sqlupdate);
}
}
catch(SQLException e)
{
System.out.println("数据库操作失败!");
e.printStackTrace();
System.exit(0);
}
}
}




错误如下:
com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:130)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:667)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:676)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:954)
at PhoneKey.main(PhoneKey.java:64)
...全文
204 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hazel_81 2014-04-13
  • 打赏
  • 举报
回复

String sqlupdate="update ceshi_2 set C_phone = '"+biaoji+"' where ceshi_2='"+s+"'" ;
Statement stmt=con.createStatement();
stmt.executeUpdate(sqlupdate);
草帽小子_DJ 2014-04-13
  • 打赏
  • 举报
回复
为什么一定要模糊了?目的何在?可以建立一个视图让不该看的人看不到!
hz594556878 2014-04-13
  • 打赏
  • 举报
回复
带有问号的sql是预编译语句,调用 perpareStatement先预编译之后才能setString(index,date)。不知道这个解释对不哈。求大牛指教,小菜关注中。
hz594556878 2014-04-13
  • 打赏
  • 举报
回复
 String sqlupdate="update ceshi_2 set C_phone = ?" ;
                pstmt.setString(1, biaoji);
                pstmt.executeUpdate(sqlupdate);
改为这个试试
 String sqlupdate="update ceshi_2 set C_phone = ?" ;
            pstmt=con.prepareStatement(sqlupdate);
                pstmt.setString(1, biaoji);
                pstmt.executeUpdate();
中华雪碧 2014-04-12
  • 打赏
  • 举报
回复
第一点。String sqlupdate="update ceshi_2 set C_phone = ?" 更新少了where条件。 --------------------- 1)看一下你的sql语句中的?号是中文还是英文 2)看一下你的sql语句中?号的个数是否与你传入的参数的个数刚好相等 还不行,biaoji是否有问题,或者先换成“update ceshi_2 set C_phone = ‘’+biaoji+”‘“试试
zzwab99 2014-04-12
  • 打赏
  • 举报
回复
String sqlupdate="update ceshi_2 set C_phone = ?" ;
pstmt=con.prepareStatement(sql);
pstmt.setString(1, biaoji);
cj525111 2014-04-12
  • 打赏
  • 举报
回复
不好意思 我随便选的一个表情 怎么是个鄙视的表情。。。。
cj525111 2014-04-12
  • 打赏
  • 举报
回复
谢谢你 的解答。 但我的数据库中 U_phone 字段为varchar 不是整型数据 这个字段本来就是字符串
coolbamboo2008 2014-04-12
  • 打赏
  • 举报
回复
这句pstmt.setString(1, biaoji);出错了,你原来的这个C_phone字段应该使用了整数,但现在你模糊成了字符串,肯定会报错
cj525111 2014-04-12
  • 打赏
  • 举报
回复
例如 手机号码为 8613012345678 变为 A12345678 模糊掉号码

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧