我有个哥们写sql语句喜欢用StringBuffer,你喜欢用什么啊?
我一般都用String ,哪个好点啊?
[解决办法]
此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【dd121011】截止到2008-06-26 14:07:31的历史汇总数据(不包括此帖):
发帖数:109 发帖分:2511
结贴数:104 结贴分:2251
未结数:5 未结分:260
结贴率:95.41 % 结分率:89.65 %
值得尊敬
[解决办法]
这不是喜好的问题,是与占多少内存有关的。
关键看你的sql是一个字符串还是多个部分拼成的,如果是一个字符串用String,多个部分拼成的就必须用StringBuffer。
另外,其实多数情况下,SQL是放在.properties文件里的。
[解决办法]
20. res += " ";
21. pos++;
22. } while (pos % 8 != 0);
23. }
24. else {
25. res += c;
26. pos++;
27. }
28. }
29. return res;
30. }
31.
32. public static String detab2(String s)
33. {
34. if (s.indexOf('\t') == -1)
35. return s;
36. StringBuffer sb = new StringBuffer();
37. int len = s.length();
38. int pos = 0;
39. int i = 0;
40. for (; i < len && s.charAt(i) == '\t'; i++)
41. {
42. sb.append(" ");
43. pos += 8;
44. }
45. for (; i < len; i++) {
46. char c = s.charAt(i);
47. if (c == '\t') {
48. do {
49. sb.append(' ');
50. pos++;
51. } while (pos % 8 != 0);
52. }
53. else {
54. sb.append(c);
55. pos++;
56. }
57. }
58. return sb.toString();
59. }
60.
61. public static String testlist[] = {
62. "",
63. "\t",
64. "\t\t\tabc",
65. "abc\tdef",
66. "1234567\t8",
67. "12345678\t9",
68. "123456789\t"
69. };
70.
71. public static void main(String args[])
72. {
73. for (int i = 0; i < testlist.length; i++) {
74. String tc = testlist[i];
75. if (!detab1(tc).equals(detab2(tc)))
76. System.err.println(tc);
77. }
78.
79. String test_string =
80. "\t\tthis is a test\tof detabbing performance";
81. int N = 5000;
82. int i = 0;
83.
84. long ct = System.currentTimeMillis();
85. for (i = 1; i <= N; i++)
86. detab1(test_string);
87. long elapsed = System.currentTimeMillis() - ct;
88. System.out.println("String time = " + elapsed);
89.
90. ct = System.currentTimeMillis();
91. for (i = 1; i <= N; i++)
92. detab2(test_string);
93. elapsed = System.currentTimeMillis() - ct;
94. System.out.println("StringBuffer time = "
95. + elapsed);
96. }
97. }
执行以上代码的结果可以看到使用StringBuffer的版本的方法比使用String版本的一般都快十倍以上(本人使用的是JDK1.4.0),你可以执行一下看看结果到底如何。
因此得到的结论是:如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法好了!也许这就是你的程序的性能瓶颈!
[解决办法]
意义不大效率上的差别可以忽略不计了还影响了美观
[解决办法]
以前写代码的时候也明和的String
后面看公司里的系统,别人都用StringBuffer,问了我同事,也没说什么实质的东西,就知道这么写比较好,所以现在一直用这种方式,不仅是写SQL语句,还有其他的,需要字符串连接等功能的时候都会使用StringBuffer
[解决办法]
影响很大吗?
[解决办法]
如果用string和StringBuilder来拼接字符串的话StringBuilder肯定要好点
比如String str="";str=str+"aaa";
这样str就是两个对象,如果用StringBuilder就不存在这个问题了
[解决办法]
俺们公司要求stringbuffer
毕竟是省点内存的
[解决办法]
StringBuffer q = new StringBuffer(); //バッファ String pdtnm_tableName = CssDAO.getWithDBO(GmPdtnm.TABLE_NAME); //PDT名称テーブル名の保存 // PDT名称DBのフィールド名称配列 String [] pdtnm_fields = new String [] { GmPdtnm.pdtkind, GmPdtnm.cd1, GmPdtnm.cd2, GmPdtnm.cd3, GmPdtnm.snm1, GmPdtnm.snm2, GmPdtnm.nm, GmPdtnm.entdttm, GmPdtnm.dttm, GmPdtnm.who, }; // Select句の作成 q.append("SELECT "); for(int i = 0; i < pdtnm_fields.length; i++){ q.append(pdtnm_fields[i]).append(", "); } q.append(" CASE WHEN ").append(GmPdtnm.pdtkind).append("=").append(GmPdtnm.PDTKIND7_PDT); q.append(" THEN LPAD(TRIM(").append(GmPdtnm.cd1).append("),2,'0') "); q.append(" ELSE ").append(GmPdtnm.cd1).append(" END AS cd1Sort,"); q.append(" LPAD(").append(GmPdtnm.pdtkind).append(",2,'8') AS SORTKEY "); // From句の作成 q.append(" FROM ").append(pdtnm_tableName).append(" "); // Where句の作成 q.append(" WHERE NOT ( ").append(GmPdtnm.pdtkind).append("=").append(GmPdtnm.PDTKIND7_PDT); q.append(" AND ").append(GmPdtnm.cd1).append("=").append(GmPdtnm.PDTKIND7_PDT).append(") "); if (searchCondition != null) { String searchCondition_pdtkind = (String)searchCondition.get(PdtnmScreenParams.Pdtkind); String searchCondition_snm1 = (String)searchCondition.get(PdtnmScreenParams.Snm1); String searchCondition_snm2 = (String)searchCondition.get(PdtnmScreenParams.Snm2); boolean b_where = false; // PDT種別条件の付加 if ( searchCondition_pdtkind != null && searchCondition_pdtkind.length() > 0){ b_where = MasterCommon.EditWildCard(q, GmPdtnm.pdtkind, searchCondition_pdtkind, b_where); } if ( searchCondition_snm1 != null && searchCondition_snm1.length() > 0){ b_where = MasterCommon.EditWildCard(q, GmPdtnm.snm1, searchCondition_snm1, b_where); } if ( searchCondition_snm2 != null && searchCondition_snm2.length() > 0){ b_where = MasterCommon.EditWildCard(q, GmPdtnm.snm2, searchCondition_snm2, b_where); } } // Order by句の作成 q.append("order by SORTKEY,cd1Sort"); q.append(", ").append(GmPdtnm.cd2); q.append(", ").append(GmPdtnm.cd3);