Перейти к содержимому


Подскажите с выводом тектса

KFan

Сообщений в теме: 4

#1 KFan

    Новичок

  • Пользователи
  • Pip
  • 24 сообщений
  • ГородЕкатеринбург

Отправлено 06 Декабрь 2012 - 18:12

Имеется код
public String getVseAdmMsg(){
String s="40 последних сообщений от наблюдателей:\n[№] [ID] [Ник] [Сообщение] [дд-мм-гг] [чч:мм:сс]\n";
try{
PreparedStatement pst = db.get("admmsg").getDb().prepareStatement("select id, id_2, msg, time from admmsg");
ResultSet rs = pst.executeQuery();
[color=#ff0000]for(int i=1;i<10;i=i+1){[/color]
if(rs.next()){
Users us = getUser(rs.getInt(2));

s += i +  ". - " + (us.localnick.equals(" ") ? "Еще не зареган" : (" " + us.id + " " + us.localnick)) +    " - " + rs.getString(3) + "\n" + "Сообщение отправлено: " + rs.getTimestamp(4) + "\n\n";
}
}
rs.close();
pst.close();
} catch (Exception ex){
ex.printStackTrace();
}
return s;
}

когда я пишу в чате например команду !1
мне выводит 10 сообщений от пользователей хотя в базе имеется к примеру 20 сообщений

[color=#ff0000]for(int i=1;i<10;i=i+1){[/color]
с этой строчкой я разобрался - это строчка задает количество сообщений входящие от чата-----все нормально так и должно быть!!!!

теперь!!!!!!
в базе имеется текста
1) тут там вон там
2) тут там вон там
3) тут там вон там
4) тут там вон там
5) тут там вон там
6) тут там вон там
7) тут там вон там
8) тут там вон там
9) тут там вон там
10) тут там вон там

теперь я добавляю в базу ешё одно сообщение например какой нить смайлик
11) :-|

и теперь очень без пантовая ситуация пишу в чат команду для просмотра сообщений и мне вот что выдает

1) тут там вон там
2) тут там вон там
3) тут там вон там
4) тут там вон там
5) тут там вон там
6) тут там вон там
7) тут там вон там
8) тут там вон там
9) тут там вон там
10) тут там вон там

а должно выводится вот так!!!

2) тут там вон там
3) тут там вон там
4) тут там вон там
5) тут там вон там
6) тут там вон там
7) тут там вон там
8) тут там вон там
9) тут там вон там
10) тут там вон там
11) :-|

прошу помощи помогите пожалуйста

#2 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 816 сообщений
  • ГородТамбовская обл.

Отправлено 06 Декабрь 2012 - 22:13

Просмотр сообщенияKFan (06 Декабрь 2012 - 18:12) писал:

Имеется код
public String getVseAdmMsg(){
String s="40 последних сообщений от наблюдателей:\n[№] [ID] [Ник] [Сообщение] [дд-мм-гг] [чч:мм:сс]\n";
try{
PreparedStatement pst = db.get("admmsg").getDb().prepareStatement("select id, id_2, msg, time from admmsg");
ResultSet rs = pst.executeQuery();
[color=#ff0000]for(int i=1;i<10;i=i+1){[/color]
if(rs.next()){
Users us = getUser(rs.getInt(2));

s += i +  ". - " + (us.localnick.equals(" ") ? "Еще не зареган" : (" " + us.id + " " + us.localnick)) +	" - " + rs.getString(3) + "\n" + "Сообщение отправлено: " + rs.getTimestamp(4) + "\n\n";
}
}
rs.close();
pst.close();
} catch (Exception ex){
ex.printStackTrace();
}
return s;
}
......
во-первых этот sql запрос выводит не последние сообщения, а все полностью, а уже потом циклом ограничивается их кол-во начиная с первого что уже некорректно
во-вторых судя по коду, цикл будет повторяться не 10 раз а 9 т.к. i<10 следовательно и строчек в итоге 9 а не 10
в третьих этот код можно сделать проще, в sql запросе сортировать по дате и ставить лимит на 10,20, или сколько там нужно и потом выводить результат

#3 alex_xpert

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 488 сообщений

Отправлено 07 Декабрь 2012 - 00:29

Так должно вывести последние 10 сообщений, начиная с самого свежего.
public String getVseAdmMsg() {
    String s="40 последних сообщений от наблюдателей:\n[№] [ID] [Ник] [Сообщение] [дд-мм-гг] [чч:мм:сс]\n";
    try {
	    PreparedStatement pst = db.get("admmsg").getDb().prepareStatement("SELECT id, id_2, msg, time FROM admmsg ORDER BY time DESC LIMIT 0,10");
	    ResultSet rs = pst.executeQuery();
	    while(rs.next()) {
		    Users us = getUser(rs.getInt(2));
		    s += i +  ". - " + (us.localnick.equals(" ") ? "Еще не зареган" : (" " + us.id + " " + us.localnick)) + " - " + rs.getString(3) + "\n" + "Сообщение отправлено: " + rs.getTimestamp(4) + "\n\n";
	    }
	    rs.close();
	    pst.close();
    } catch (Exception ex) {
	    ex.printStackTrace();
    }
    return s;
}


#4 KFan

    Новичок

  • Пользователи
  • Pip
  • 24 сообщений
  • ГородЕкатеринбург

Отправлено 07 Декабрь 2012 - 01:46

Просмотр сообщенияXpert™ (07 Декабрь 2012 - 00:29) писал:

Так должно вывести последние 10 сообщений, начиная с самого свежего.
public String getVseAdmMsg() {
	String s="40 последних сообщений от наблюдателей:\n[№] [ID] [Ник] [Сообщение] [дд-мм-гг] [чч:мм:сс]\n";
	try {
		PreparedStatement pst = db.get("admmsg").getDb().prepareStatement("SELECT id, id_2, msg, time FROM admmsg ORDER BY time DESC LIMIT 0,10");
		ResultSet rs = pst.executeQuery();
		while(rs.next()) {
			Users us = getUser(rs.getInt(2));
			s += i +  ". - " + (us.localnick.equals(" ") ? "Еще не зареган" : (" " + us.id + " " + us.localnick)) + " - " + rs.getString(3) + "\n" + "Сообщение отправлено: " + rs.getTimestamp(4) + "\n\n";
		}
		rs.close();
		pst.close();
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	return s;
}


Спасибо большое на отклик :-P
но сообщение стало выводить так что допустим я написал 1 пишу адмлист и мне это сообщение стало выводить вверху а не внизу!!! а на счет кода он не работает поменялось только вот это что я написал в этом посте ну все равно на этом спасибо)))


код
public String getVseAdmMsg(){
String s="40 последних сообщений от наблюдателей:\n[№] [ID] [Ник] [Сообщение] [дд-мм-гг] [чч:мм:сс]\n";
try{
PreparedStatement pst = db.get("admmsg").getDb().prepareStatement("select id, id_2, msg, time from admmsg");
ResultSet rs = pst.executeQuery();
for(int i=1;i<41;i=i+1){
if(rs.next()){
Users us = getUser(rs.getInt(2));
//s += i + ". - " + (us.localnick.equals("") ? "Еще не зареган" : ("" + us.id + "" + us.localnick)) +
//" - " + rs.getString(3) + " " + rs.getTimestamp(4) + "\n";
s += i +  ". - " + (us.localnick.equals(" ") ? "Еще не зареган" : (" " + us.id + " " + us.localnick)) +    " - " + rs.getString(3) + "\n" + "Сообщение отправлено: " + rs.getTimestamp(4) + "\n\n";
}
}
rs.close();
pst.close();
} catch (Exception ex){
ex.printStackTrace();
}
return s;
}

и

/**
* Список админ сообщений
* !адмлист
* @author fraer72
*/
private void commandAdmList(IcqProtocol proc, String uin){
if (!isChat(proc, uin) && !props.testAdmin(uin)) return;
if(!auth(proc,uin, "admlist")) return;
try{
cutsend(proc, uin, srv.us.getVseAdmMsg());
}catch (Exception ex){
Log.getLogger(srv.getName()).error("Ошибка - " + ex.getMessage().toString());
}
}


#5 REDOSS

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 800 сообщений
  • ГородКраснодар

Отправлено 07 Декабрь 2012 - 03:40

Дам совет, попробуйте сами разобраться с кодом на детали. выяснить, что где выполняется.
У вас появится понимание, а в дальнейшем, сможете сами написать что-то полезное.
Так же прочитайте про SQL. Вам уже вроде бы это советовал Кот.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей