package 数据库;import java.sql.*;  
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;import java.util.*;
class JTable1 extends JFrame
{
JPanel cp = new JPanel();
JTable jtable1;
JScrollPane jscrp1 = new JScrollPane();
public JTable1()
    {
cp = (JPanel)this.getContentPane();
this.setTitle("student result");
this.setSize(500, 200);
cp.setLayout(new FlowLayout());

Connection  con;
Statement sql;
ResultSet rs;
DefaultTableModel dtm;
    //DefaultTableModel是 TableModel 的一个实现,它使用一个 Vector 来存储单元格的值对象,该 Vector 由多个 Vector 组成。 

Vector <Vector> content=new  Vector <Vector>();
Vector <String> title=new Vector <String>();
     
try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); } //建立桥接器
catch (java.lang.ClassNotFoundException  e)
{ e.printStackTrace();}  
        try  
        {    
    con= DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;" +
     " DatabaseName=StudyTest","sa","sa");//连接
   
sql=con.createStatement();//创建SQL语句对象
                            
                            //executeQuery("use StudyTest");                         
 
     rs=sql.executeQuery("SELECT  *  FROM  score");
ResultSetMetaData rsmd=rs.getMetaData();
//ResultSetMetaData可用于获取关于 ResultSet 对象中列的类型和属性信息的对象
                           //后面的代码目的是生成一张表(可不看)
for(int i = 1; i <= rsmd.getColumnCount(); i++)//getColumnCount()记录条数
{
         title.add(rsmd.getColumnName(i));//获取列名(对象String)
       
}

while(rs.next())
{
     Vector <String> tmp=new Vector<String>();//一个Vector content包含多个Vector
for(int i = 1; i <= rsmd.getColumnCount(); i++)
tmp.add(rs.getString(i));//获取记录
content.add(tmp);
}
dtm=new DefaultTableModel(content,title);
     
     jtable1 = new JTable(dtm);
jtable1.setRowHeight(20);
    jscrp1.getViewport().add(jtable1);//getViewport()滚动窗格的视口子级
cp.add(jscrp1);

/*while(rs.next())
{
  System.out.println(rs.getInt("学号")+"  "+rs.getString("姓名")+"  "+rs.getFloat("数学"));
}*/
 
con.close();
}   
catch  (SQLException el)
    { el.printStackTrace();} 
    }
}
public  class  JAVADB

public static void main(String args[])

JTable1 JTable1 = new JTable1();
JTable1.setVisible(true);
       }  
} 我有一个名为StudyTest的数据源,里面有一张名为studentInfo的表。
如果我不加上这句://executeQuery("use StudyTest");   
运行就会报错:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'studentInfo' 无效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)加上这句运行才会正常。可是我不明白的是我已经与这个数据源建立连接了啊
con= DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;" +
     " DatabaseName=StudyTest","sa","sa");//连接为什么还要加上那句话,不加就报错呢?。。
是我的数据库配置有问题吗? 

解决方案 »

  1.   

    程序中没发现你使用studentInfo啊?
      

  2.   

    哦,呵呵 我忘记改下了。
    rs=sql.executeQuery("SELECT * FROM studentInfo");
    恩..为什么会出现上述问题啊?。。
      

  3.   

    显然是从数据库中没有找到studentInfo 这个东东  好好检查是不是写错啦 ...
      

  4.   

    表没错的。 我强调过了,如果加上这句executeQuery("use StudyTest");就能正常访问studentInfo
    不加上这句话就跑出上述异常。不明白是怎么一回事。 是不是数据库配置不正确啊?
      

  5.   

    " DatabaseName=StudyTest"不会是多了个空格吧
    "DatabaseName=StudyTest"//executeQuery("use StudyTest");   那个对象的方法?
      

  6.   

    同志们呐, 8楼的同学正解啊!!  坑爹啊!
    " DatabaseName=StudyTest"多了个空格
    "DatabaseName=StudyTest