Java初学者对JDBC有些怀疑

时间:2012-09-05 07:30:50

标签: java jdbc

如何建立JDBC连接如何查找localhost 请解决我的问题并解释我的代码错误解释我必须集中精力和如何在j swing中打印数据库的字段

package swingtesting;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 *
 * @author Admin
 */
public class NewClass {
    public static void main(String[] args){
     Connection con=null;
        Statement st=null;
        ResultSet rs=null;
       try{
       Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
       con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:3535;DatabaseName=swingmail;User=sa;Password=sa;");
       st=con.createStatement();
       String qry=" select * from empmail";
       rs=st.executeQuery(qry);
       System.out.println(rs.getString("empid"));
       System.out.println(rs.getString("empname"));
       System.out.println(rs.getString("desg"));
       System.out.println(rs.getString("basic"));
}
catch(Exception e)
{
  e.printStackTrace();
}

    }
}

java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at swingtesting.NewJSwing.main(NewJSwing.java:130)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at swingtesting.NewJSwing.initComponents(NewJSwing.java:39)
        at swingtesting.NewJSwing.<init>(NewJSwing.java:27)
        at swingtesting.NewJSwing$2.run(NewJSwing.java:122)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

1 个答案:

答案 0 :(得分:2)

假设您要求提供代码说明。首先,你需要阅读一些事情

  • JDBC API
  • JDBC驱动程序管理器
  • JDBC-ODBC Bridge

现在,您的代码说明就像

  • Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");这会加载Driver类并返回其实例,这隐藏了套接字建立的所有复杂性并调用了本机代码等。
  • DriverManager.getConnection(url, username, password);这将使用给定的URL和凭据建立与数据库的连接。每个驱动程序都指定了自己的标准来定义URL,您可以在他们的文档中找到它们。
  • st=con.createStatement();建立连接后,您可以在单个连接上执行多个语句(查询)。您需要为要针对数据库触发的每个查询调用此语句。
  • rs=st.executeQuery(qry);最后执行查询并接受查询结果,它们将包含在跟随迭代器模式的ResultSet中。

获得结果集后,它将包含查询结果的所有行。您需要遍历它以获取所有行,示例如下

while( rs.next() ) { 
   String empId = rs.getString("empid");
   System.out.println( empId);
   //other fields
}

您可以在谷歌上找到很多信息和帮助。经历过一次。

更新(OP编辑后) 例外清楚地说,在classapth上找不到驱动程序类。 将sqlserver的jdbc jar添加到类路径中。