import java.net.URL;
import java.net.URLConnection;
import java.sql.*;
public class searchlink{
public static void main(String args[]) throws Exception {
//String link="http://hosted.ap.org";
Connection con=null;
Statement stmt=null;
Statement stmtR=null;
if(con==null){
SQLConnection.setURL("jdbc:sqlserver://192.168.2.53\\SQL2005;user=sa;password=365media;DatabaseName=LN_ADWEEK");
con=SQLConnection.getNewConnection();
stmt=con.createStatement();
stmtR=con.createStatement();
}
ResultSet rs;
rs=stmt.executeQuery("select url from urls where url='http://www.topix.com/rty/elyria-oh'");
while(rs.next()){
String mem=rs.getString(1);
System.out.println("Result is "+mem);}
}
}
如果查询返回一行,则上述程序打印输出。 如果查询未返回任何内容,程序将停止而不打印任何内容。
而不是在没有打印任何内容的情况下停止它,我希望程序识别出查询没有返回任何内容并打印输出,如下所示“SQL查询执行后没有返回任何内容”。
如何识别使用某些方法或变量来执行查询而不返回任何行?
答案 0 :(得分:11)
boolean hasRows = false;
while(rs.next()){
hasRows = true;
// do other stuff required.
}
if(!hasRows)
{
// do stuff when no rows present.
}
- 或 -
if(!rs.next())
{
// do stuff when no rows prsent.
}
else
{
do{
// do stuff required
}while(rs.next());
}
请记住检查if(!rs.next())是否会使光标在结果集中前进。在获得值之前不要再次前进。
答案 1 :(得分:5)
普通的JDBC习惯用法是在List<Entity>
之类的集合中收集结果。另一个正常的习惯用法是在try-with-resources
statement中打开资源,以便它们能够正常自动关闭。您的代码就是通过将这些资源保持打开来泄漏数据库资源。如果在短时间内重复运行,则DB将耗尽资源。
这是一个启动示例:
public List<Entity> list() throws SQLException {
List<Entity> entities = new ArrayList<Entity>();
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM entity");
ResultSet resultSet = statement.executeQuery();
) {
while (resultSet.next()) {
Entity entity = new Entity();
entity.setId(resultSet.getLong("id"));
entity.setName(resultSet.getString("name"));
entity.setValue(resultSet.getInteger("value"));
entities.add(entity);
}
}
return entities;
}
这样您就可以使用通常的List
方法来确定结果的状态:
List<Entity> entities = entityDAO.list();
if (entities.isEmpty()) {
// It is empty!
}
else if (entities.size() == 1) {
// It has only one row!
}
else {
// It has more than one row!
}
答案 2 :(得分:2)
if (rs.hasNext())
{
while(rs.next())
{
String mem=rs.getString(1);
System.out.println("Result is "+mem);
}
}
else
{
System.out.println("There is nothing returned after SQL query execution ");
}
也许〜
答案 3 :(得分:1)
if(!rs.isBeforeFirst())
System.out.println("no data is returned");
答案 4 :(得分:0)
第一个(rs.next())将告诉您是否返回了任何数据。对那个反应,然后循环其余的(如果有的话)。
下面我提取一个逻辑,当有一行进入一个单独的方法时该做什么,然后在“if”之后和每个“where”之内调用它。
. . .
ResultSet rs;
rs=stmt.executeQuery("select url from urls where url='http://www.topix.com/rty/elyria-oh'");
if (rs.next() {
printRow(rs);
while(rs.next()){
printRow(rs);
}
}
else {
System.out.println("no data returned");
}
}
static public printRow(ResultSet rs) {
String mem=rs.getString(1);
System.out.println("Result is "+mem);}
}
}
答案 5 :(得分:0)
在你的循环中放置一个计数器......
int count = 0;
while ( rs.next() )
{
count++;
String mem=rs.getString(1);
System.out.println("Result is "+mem);}
.
.
.
}
然后......
if (count==0)
{
// show your message "There is nothing returned after SQL query execution"
}
对rs.next()
的任何调用都会移动光标,因此if (rs.next() == false)
会使你前面有一个,如果你有2个或更多,你会跳过第一个结果,如果你有一个结果,你会完全错过它。
祝你好运,
瑞克
答案 6 :(得分:0)
boolean got_result = false;
while (...) {
got_result = true;
...
}
if (!got_result) {
...
}
答案 7 :(得分:0)
可以选择查询
rs.next();
int value = resultSet.getInt(1);
if (value == 0)
{
//throw error message
}
else
//