使用ajax异步传值生成首字母索引大致有以下几个步骤:
1、服务器端使用servlet提取出数据库里的数据;
2、使用首字母工具类对数据进处理得到首字母;
3、再将首字母和数据一一对应存入json数组,并返回到客户端;
4、HBuilder中的html文件使用ajax接受传值并动态添加数据显示。
四点详细阐释如下:
1、用servlet提取数据库的数据应该不是什么问题,sql server、mysql等之类的数据库语句都是通用的,只是驱动和使用的jar包有所不同。
public List<baike> loadAll() throws SQLException
{
List<baike> list=new ArrayList<>();
Connection connection=null;
connection = GBUtil.get();
Statement stmt=connection.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM HotWord");
String name;
String content;
String type;
String num;
while(rs.next())
{
name=rs.getString("name").trim();
content=rs.getString("content").trim();
type=rs.getString("type").trim();
num=rs.getString("num").trim();
baike baike=new baike();
baike.setName(name);
baike.setContent(content);
baike.setType(type);
baike.setNum(num);
list.add(baike);
}
stmt.close();
connection.close();
return list;
}
在自定义的类里自定义一个调取全部数据的方法,来打包成一个集合,方便在servlet里调用。
2、对数据进行处理得到首字母:
首字母工具类(HeadUtil.java):
package com.gb.util;
import java.util.Random;
public class HeadUtil
{
public static String getPYIndexStr(String strChinese, boolean bUpCase)
{
try
{
StringBuffer buffer = new StringBuffer();
byte b[] = strChinese.getBytes("GBK");//把中文转化成byte数组
for(int i = 0; i < b.length; i++){
if((b[i] & 255) > 128)
{
int char1 = b[i++] & 255;
char1 <<= 8;
int chart = char1 + (b[i] & 255);
buffer.append(getPYIndexChar((char)chart, bUpCase));
continue;
}
char c = (char)b[i];
if(!Character.isJavaIdentifierPart(c))
c = 'A';
buffer.append(c);
}
return buffer.toString().toUpperCase();
}
catch(Exception e)
{
System.out.println((new StringBuilder()).append("\u53D6\u4E2D\u6587\u62FC\u97F3\u6709\u9519").append(e.getMessage()).toString());
}
return null;
}
private static char getPYIndexChar(char strChinese, boolean bUpCase){
int charGBK = strChinese;
char result;
if(charGBK >= 45217 && charGBK <= 45252)
result = 'A';
else
if(charGBK >= 45253 && charGBK <= 45760)
result = 'B';
else
if(charGBK >= 45761 && charGBK <= 46317)
result = 'C';
else
if(charGBK >= 46318 && charGBK <= 46825)
result = 'D';
else
if(charGBK >= 46826 && charGBK <= 47009)
result = 'E';
else
if(charGBK >= 47010 && charGBK <= 47296)
result = 'F';
else
if(charGBK >= 47297 && charGBK <= 47613)
result = 'G';
else
if(charGBK >= 47614 && charGBK <= 48118)
result = 'H';
else
if(charGBK >= 48119 && charGBK <= 49061)
result = 'J';
else
if(charGBK >= 49062 && charGBK <= 49323)
result = 'K';
else
if(charGBK >= 49324 && charGBK <= 49895)
result = 'L';
else
if(charGBK >= 49896 && charGBK <= 50370)
result = 'M'