
Java连接和操作SQLServer.doc
5页说明】此处只说明基本思想和一种具体的操作思路只要思想正确,具体的操作思路还有很多,可自行挖掘1. 需要 MS SQLServer 的连接驱动 jar 包——sqljdbc4.jar,将 jar 包加入到工程中,并设置好 Build Path2. 编写专门的数据库操作类,实现数据库的连接和操作:public class DB {private static Statement ste = null;private static Connection conn = null;static {try {//JDBC连接方式String user = "sa";//数据库链接账号String pwd = "hzshen";//数据库连接密码String ip = "127.0.0.1";//数据库所在IPString port = "1433";//数据库所在端口String dbf = "bookstore";//数据库名String url = "jdbc:sqlserver://" + ip + ":" + port + ";" + "databasename=" + dbf;//构造数据库访问URL//注册驱动DriverManager.registerDriver (new com.microsoft.sqlserver.jdbc.SQLServerDriver());//获得一个连接conn = DriverManager.getConnection (url, user, pwd);//设置自动提交为falseconn.setAutoCommit (false);//建立高级载体ste = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);}catch (Exception ex) {JOptionPane.showMessageDialog (null, "数据库连接失败...", "错误" , JOptionPane.ERROR_MESSAGE);System.exit(0);//ex.printStackTrace();}//End try}/**==========================================================*** [## public static int executeUpdate(String sql) {} ] : * 参数 :String 对象, 表示需要执行的 sql语句* 返回值 :int, 表示此sql语句对数据库影响了几行* 修饰符 :public static 可以不实例化对象而直接调用方法* 功能 :执行对数据库更改的sql命令,并返回更改所影响的行数**==============================================================***/public static int executeUpdate(String sql) {int i = 0 ;try {i = ste.executeUpdate(sql) ;mit();}catch(Exception e) {e.printStackTrace() ;}//End tryreturn i ;}/**=========================================================*** [## public static ResultSet executeQuery(String sql) {} ] :* 参数 :String 对象, 表示需要执行的 sql语句* 返回值 :ResultSet对象, 表示此查询语句返回的结果集* 修饰符 :public static 可以不实例化对象而直接调用方法* 功能 :执行对数据库的select查询功能,并返回查询所得到的结果**==============================================================***/public static ResultSet executeQuery(String sql) {ResultSet rs = null ;try {rs = ste.executeQuery(sql) ;}catch(Exception e) {e.printStackTrace() ;}//End tryreturn rs ;}/**==========================================================*** [## public static void initDTM (DefaultTableModel fdtm, String sqlCode) {} ] :* 参数 :DefaultTableModel对象表示要添充数据的表模式* String对象表示一条SQL 语句* 返回值 :无 * 修饰符 :public static 可以不实例化对象而直接调用方法* 功能 :按SQL语句从数据库中获得数据,添加到fdtm中(也可以说JTable中)**================================================================***/public static void initDTM (DefaultTableModel fdtm, String sqlCode) {try {ResultSet rs = executeQuery( sqlCode ); //获得结果集int row = recCount( rs ); //获得结果集中有几行数据ResultSetMetaData rsm =rs.getMetaData(); //获得列集int col = rsm.getColumnCount(); //获得列的个数String colName[] = new String[col];//取结果集中的表头名称, 放在colName 数组中for (int i = 0; i < col; i++) {colName[i] = rsm.getColumnName( i + 1 );}//End forrs.beforeFirst();String data[][] = new String[row][col];//取结果集中的数据, 放在data数组中for (int i = 0; i < row; i++) {rs.next();for (int j = 0; j < col; j++) {data[i][j] = rs.getString (j + 1);//System.out.println (data[i][j]);}}//End forfdtm.setDataVector (data, colName);}catch (Exception ex) {ex.printStackTrace();}//End try}/**========================================================*** [## public static int recCount(ResultSet rs)) {} ] :* 参数 :ResultSet 对象, 表示目标结果集* 返回值 :int, 表示结果集中的记录个数* 修饰符 :public static 可以不实例化对象而直接调用方法* 功能 :获得指定结果集的记录数量**===========================================================***/public static int recCount(ResultSet rrs) {int i = 0;try {if(rrs.getRow() != 0)rrs.beforeFirst();//while用于计算rs的记录条数while(rrs.next())i++;rrs.beforeFirst();}catch(Exception ex) {ex.printStackTrace();}//End tryreturn i;}/*** 关闭ste和conn ,释放资源。
/public static void close(){try {if(ste!=null){ste.close();}if(conn!=null){conn.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}3. 数据库操作类的使用由于都是静态方法,可直接使用,例如:ResultSet rst=DB.executeQuery("select * from T_Book");//直接调用操作,参数为SQL语句try {while(rst.next()){//循环获取所有查询到的数据System.out.println(rst.getString("id"));System.out.println(rst.getString("name"));System.out.println(rst.getString("publisher")); System.out.println(rst.getFloat("price"));}rst.close();//释放数据库资源}catch (Exception ex) {ex.printStackTrace();}依次类推。
4. 连接 SQLServer 2000 和 2005 的区别:在 sql server 2000 中加载驱动和 URL 路径的语句是String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sample";而 sql server 2005 中加载驱动和 url 的语句则为String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=sample";上例数据库操作类中是针对 2005 的,请根据实际情况修改,如果写法错误将会找不到驱动5. 如何释放数据库资源?数据库操作会消耗资源,因此当使用完数据库后,需要释放掉这些资源,否则会导致资源无法回收,引起系统崩溃如上例,包括:ResultSet rstStatement ste Connection conn需要将它们关闭(close()) 。
其中 ResultSet 在使用完后直接关闭,如上例Statement 和 Connection 可通过 DB 操作类中的 close()方法关闭一般在数据库调用完全使用完成时关闭6. 其他。












