我正在做一个网络蜘蛛程序,目前可以循环抓取网页了,由于刚刚学习java对java还不是很熟悉,在存取数据库方面不太会目前有个小程序 显示SQL数据库中表的内容的,可以运行 就是不知道如何应用的我的蜘蛛程序中啊 DBTester.java
import java.sql.*;
public class DBTester{
  public static void main(String args[])throws Exception{
    Connection con;
    Statement stmt;
    ResultSet rs;
    //加载驱动器
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    //注册L驱动器
    DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
    //连接到数据库的URL
    String dbUrl = "jdbc:microsoft:sqlserver://localhost:1479;DatabaseName=SearchDB";
    String dbUser="sa";
    String dbPwd="lovefree";
    //建立数据库连接
    con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
    //创建一个Statement对象
    stmt = con.createStatement();
    //
    rs= stmt.executeQuery("SELECT id,url,title,content,size from webcontent");
    while(rs.next()){
    String title=rs.getString(3);
    System.out.println("title="+title);
    }
    System.out.println("\nDatabase Information ");
    //释放相关资源
    rs.close();
    stmt.close();
    con.close();
  }
}
蜘蛛程序有三个类文件 CheckLinks.java   Spider.java  和接口类ISpiderReportable.java我想在Spider.java类中   在得到源文件是进行数据库存储,可就是把代码挪动不了里面去,老是出错还请高手指点啊 呵呵

解决方案 »

  1.   

    不用挪进去啊,把db类作为一个单独的类来调用不就可以了吗?你的db写的也有点问题:
    这是ms Sql2.0驱动的,3个驱动jar包的连接程序:
        String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";    //连接SQL数据库的方法
        String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name为数据库名
        String Username="username";    //用户名
        String Password="password";    //密码
        Class.forName(Driver).new Instance();    //加载数据可驱动
        Connection con=DriverManager.getConnection(URL,UserName,Password);这是ms Sql3.0驱动的,1个驱动jar包的连接程序:
        String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";    //连接SQL数据库的方法
        String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name为数据库名
        String Username="username";    //用户名
        String Password="password";    //密码
        Class.forName(Driver).new Instance();    //加载数据可驱动
        Connection con=DriverManager.getConnection(URL,UserName,Password);    lz你先明确下自己用的哪种驱动,然后就是把这段加载驱动,连接db的程序替换掉你的,应该就没问题了
     
      

  2.   

    这是我在写宠物医院是写的一个类,一起看看:package pet;
    import java.sql.*;
    public class GetCon {
        public Connection con;
        public Statement st;
        public PreparedStatement pst;
        public ResultSet rs;
        public GetCon(){
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException ex) {
            System.out.print("数据库驱动加载错误!");
        }
        }    synchronized public void getCon(){
            if(con==null){
                try {
                    con = DriverManager.getConnection("Jdbc:Odbc:pet");
                } catch (SQLException ex) {
                    System.out.print("GetCon中获取con 出错!");
                }
            }
        }    public void closeCon(){
        try {
            if(rs!=null){
                rs.close();
            }
            if(pst!=null){
                pst.close();
            }
            if(con!=null){
                con.close();
            }    } catch (SQLException ex) {
            System.out.print("GetCon中关闭con时出错!");
        }
        }
    }使用时继承该类,里面方法没有具体写。当时都是自己实现自己的,可以参考下微软的DBhelp.
      

  3.   

    package com.hzs.order;import java.sql.*; 
    public class DBConn

    String url="jdbc:microsoft:sqlserver://10.58.4.32:1433;DatabaseName=sap_db"; 
    String user="sa"; 
    String psw="abcd$7640"; String drivername="com.microsoft.jdbc.sqlserver.SQLServerDriver"; ResultSet rs=null; 
    Statement stmt=null; 
    Connection conn=null; 
    public DBConn(){} public void openconn()throws Exception{ 
      try{ 
            Class.forName(drivername); 
        conn=DriverManager.getConnection(url,user,psw);  
      } 
      catch(Exception e){ 
    System.out.println(e.getMessage()); 
    }    }     public ResultSet executeQuery(String sql){ 
         try{ 
         stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
         rs=stmt.executeQuery(sql); 
         } 
         catch(SQLException e){ 
         System.err.println("executeQuery:"+e.getMessage()); 
         } 
         return rs; 
        } 
         
         
        public void executeUpdate(String sql){ 
         try{ 
         stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
         stmt.executeUpdate(sql); 
         } 
         catch(Exception e){ 
         System.err.println("executeUpdate:"+e.getMessage()); 
         } 
        } 
         
        public void closeconn(){ 
         try{ 
         conn.close(); 
         } 
         catch(Exception e){ 
         System.out.println(e); 
         } 
        } 
         
        public void closestmt(){ 
         try{ 
         stmt.close(); 
         } 
         catch(Exception e){ 
         System.out.println(e); 
         } 
        } 
      

  4.   

     找本J2EE方面的书看一下上面写的很详细
      

  5.   

    你好 感谢您的回复 看了回复后我写的连接数据库的类如下 还得请教一下怎么引用改类 我用的时候总是出错DBAction.javaimport java.sql.*;
    public class DBAction{
    String dburl = "jdbc:microsoft:sqlserver://localhost:1479;DatabaseName=SearchDB";
    String dbuser="sa";
    String dbPwd="lovefree";
    String drivername="com.microsoft.jdbc.sqlserver.SQLServerDriver";

    ResultSet rs=null;
    Statement stmt=null;
    Connection conn=null;
    public DBAction(){}
    public void openconn()throws Exception{
     try{
    Class.forName(drivername);
    conn=DriverManager.getConnection(dburl,dbuser,dbPwd);
     }
     catch(Exception e){
    System.out.println(e.getMessage());
     }
    }
    public ResultSet executeQuery(String sql){
    try{
    //stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    stmt=conn.createStatement();
    rs=stmt.executeQuery(sql);
    }
    catch(Exception e){
    System.err.println("executeQuery:"+e.getMessage());
    }
    return rs;
    }
    public void executeUpdate(String sql){
    try{
    stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    stmt.executeUpdate(sql);
    }
    catch(Exception e){
    System.err.println("executeQuery:"+e.getMessage());
    }
    }

    public void closeconn(){
    try{
    conn.close();
    }
    catch(Exception e){
    System.out.println(e);
    }
    }

    public void closestmt(){
    try{
    stmt.close();
    }
    catch(Exception e){
    System.out.println(e);
    }
    }

    }测试文件为 DBTester.java import java.sql.*;
    public class DBTester{
    public static void main(String args[])throws Exception{DBAction dbaction =  new DBAction();
    dbaction.openconn();
    /*   * 查询数据表 例子 *
    String sql= "SELECT uid,name from sysusers";
    ResultSet rs = dbaction.executeQuery(sql);
    while(rs.next()){
    String name=rs.getString(2);
    System.out.println("name="+name);
    }
    *///更新数据表 例子
    String nameStr="cola";
    int idInt=888;
    String sql= "insert into webcontent (title,size)"+"values('"+nameStr+"',"+idInt+")";
    dbaction.executeUpdate(sql);

    System.out.println("OK ...");


    dbaction.closeconn();
    dbaction.closestmt();}
    }我的疑问是
    在这个单独的文件中 main函数中用还是有效的,但放入其他类文件中使用的时候就会抛出异常 让我捕捉,还得请教请教你我放进另一个类文件中是这样使用的添加如下代码
    import java.sql.*; //操作数据库 used// 这部分代码是在另一个函数中调用doActionDB(String title,String URLs)
       doActionDB (title,urlHost); 
    // 调用代码结束
    public void doActionDB(String title,String URLs)throws Exception{  //操作数据库函数


    DBAction dbaction =  new DBAction();
    dbaction.openconn();
    String sql= "SELECT uid,name from sysusers";
    ResultSet rs = dbaction.executeQuery(sql);
    while(rs.next()){
    String name=rs.getString(2);
    System.out.println("name="+name);
    }
    System.out.println("OK ...");


    dbaction.closeconn();
    dbaction.closestmt();

    }
    就是不知道改使用那个操作数据库的类DBAction.java 啊???
      

  6.   

    在 DBTester.java 中测试是成功的,是在main函数中的原因吗?就是不知道在其他类里怎么使用啊???
      

  7.   

    你public void doActionDB(String title,String URLs)throws Exception{  //操作数据库函数
    声明了异常,
    当你调用这个方法的时候,你可以有两种处理:
    1)try该异常
    2)继续声明该异常