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");//连接为什么还要加上那句话,不加就报错呢?。。
是我的数据库配置有问题吗?
rs=sql.executeQuery("SELECT * FROM studentInfo");
恩..为什么会出现上述问题啊?。。
不加上这句话就跑出上述异常。不明白是怎么一回事。 是不是数据库配置不正确啊?
"DatabaseName=StudyTest"//executeQuery("use StudyTest"); 那个对象的方法?
" DatabaseName=StudyTest"多了个空格
"DatabaseName=StudyTest