• jdbc连接sql server2017进行简单的增、删、改、查操作


            这几天刚做完数据库的课程设计,来稍微总结一下如何通过jdbc访问sql server数据库进行简单的增删改查操作。在连接之前,需要简单地配置一下,包括下载对应jdk版本的驱动,设置环境变量等等。相关配置可参考博客: https://blog.csdn.net/rebekahq/article/details/78691343

            我重点总结一下如何在java代码里连接数据库,进行增删改查。先贴一段用来查询数据库的代码实例:

    查询

     package com.ph;
     import java.sql.Connection;
     import java.sql.DriverManager;
     import java.sql.PreparedStatement;
     import java.sql.ResultSet;
     public class Test1 {
     
         public static void main(String[]args) {
             PreparedStatement ps=null;
             Connection ct=null;
             ResultSet rs=null;
             try {
                 //1.加载驱动
                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                 //2.得到链接 127.0.0.1:1433
                 ct=DriverManager.getConnection
                         ("jdbc:sqlserver://127.0.0.1:1433;databaseName=Mytest","sa","123456");
             
                 ps=ct.prepareStatement("select * from course");
                 rs=ps.executeQuery();
                 while(rs.next()) {
                     String cno=rs.getString(1);
                     String cname=rs.getString(2);
                     String tno=rs.getString(3);
                     System.out.println("cno "+cno+" cname "+cname+" tno "+tno);
                 }
             }catch(Exception e) {
                 e.printStackTrace();
             }finally {
                 try {
                     if(rs != null)rs.close();
                     if(ps != null)ps.close();
                     if(ct != null)ct.close();
                 }catch(Exception e) {
                     e.printStackTrace();
                 }
             }
         }
     }

    分析一下代码:

    (1)、Class.forName()   如代码中的注释,第14行一整行代码是用来加载sql server驱动的。那 Class.forName() 这个函数是用来干嘛的呢,它的作用是:用来初始化给定的类,即引号里面的类。如果换一种写法:DriverManger.registerDriver(new Driver());  更为直接点,直接初始化,也是可以的。对Class.forName()这个函数感兴趣的,可以参考

    http://www.jb51.net/article/117468.htm

    (2)、DriverManger.getConnection()   DriverManger这个类,查API就可以知道,是用来管理jdbc驱动的基本服务。如果把参数加上,就是:

    static Connection DriverManger.getConnecttion(String url, String user, String password)

    返回类型是Connection,其中的参数分别为:绝对路径、用户名、密码。最好使用windows加Sql server混合验证,在数据库设置一下账号和密码,否则可能连不上。

    绝对路径是指本地数据库的绝对路径:jdbc:sqlserver://127.0.0.1:1433  其中包含了ip地址,对应的端口(这也是使用前必须设置好的,前面的链接有详细教程)。

    (3)、Connection接口介绍。 上一个方法的返回值,是Connection接口的一个实例对象,而Connection接口中的函数可以与连接的数据库“对话”,注意:sql语句就是通过该接口的函数执行的。例如上述代码中的:ps=ct.prepareStatement("select * from course");     Connection中的getMetaData方法还可以获取已连接数据库所支持的sql语法、存储过程、此连接功能等信息。下面介绍PreparedStatement对象。

    (4)、PreparedStatement对象。上条方法的返回值ps即为其实例,这个类与执行sql语句的效率有关。Connection中的sql语句可以预编译保存在PreparedStatement对象中(如ps),当需要执行该语句时,直接调用ps,不需要重复地编译select语句,提高了效率。

    (5)、ResultSet。它用来承接PreparedStatement对象查询到的结果,可以通过该对象中的方法来访问数据库。如代码中的循环所示,一开始rs光标停在第一行的前面(注意,并非第一行,当第一次执行rs.next()函数时,光标才会到第一行,用一个while循环就可以遍历整个表的行。而rs.getString(index)是用来返回第index列的值,是横向的。注意:第一列的index就是1,而不是0,和数组下标有所区别。

    (6)、整个代码用try catch包起来,并且记得调用close方法依次关闭引用,做好善后工作,防止内存泄漏。(顺序:后使用的率先关闭)

    以上就是简单的遍历查询方法,可以根据具体情况修改  sql语句、是否使用循环、以及循环跳出的条件。

    修改

     PreparedStatement ps=null;
                 Connection ct=null;
                 ResultSet rs=null;
                 try {
                     //1.加载驱动
                     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                     //2.得到链接 127.0.0.1:1433
                     ct=DriverManager.getConnection
                             ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");
                 
                     String sql="update s set sname=?,sex=?,age=?,saddress=?,"
                             + "spnumber=?,dno=?,political=? where sno=?";
                     ps=ct.prepareStatement(sql);
                     //给?赋值
                     ps.setString(1, jtf2.getText());
                     ps.setString(2, jtf3.getText());
                     ps.setString(3, jtf4.getText());
                     ps.setString(4, jtf5.getText());
                     ps.setString(5, jtf6.getText());
                     ps.setString(6, jtf7.getText());
                     ps.setString(7, jtf8.getText());
                     ps.setString(8, jtf1.getText());
     
                     ps.executeUpdate();
                     this.dispose();
                 }catch(Exception e) {
                     e.printStackTrace();
                 }finally {
                     try {
                         if(rs!=null)rs.close();
                         if(ps!=null)ps.close();
                         if(ct!=null)ct.close();
                     }catch(Exception e) {
                         e.printStackTrace();
                     }
                 }

    这个是所做项目中截取的,getText( )方法是用来获取输入框内的内容的, ps.setString(  i , String   )前一个参数对应着sql语句中第 i个问号(?),而String可以理解要给问号(?)赋的值。当然,不一定是String类型,也可以是其他的类型。

    删除

     public class DeleData {
     
         PreparedStatement ps=null;
         Connection ct=null;
         ResultSet rs=null;
         public DeleData(String sId){
             try {
                 //1.加载驱动
                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                 //2.得到链接 127.0.0.1:1433
                 ct=DriverManager.getConnection
                         ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");
             
                 ps=ct.prepareStatement("delete from s where sno=?");
                 ps.setString(1, sId);
                 ps.executeUpdate();
                 
             }catch(Exception e) {
                 e.printStackTrace();
             }finally {
                 try {
                     if(ps!=null) ps.close();
                     if(ps!=null) ct.close();
                 }catch(Exception e) {
                     e.printStackTrace();
                 }
             }
         }
         
     }

    换汤不换药,看懂第一个,下面的也该会了。

    添加

         public void actionPerformed(ActionEvent arg0) {
             // TODO Auto-generated method stub
             if(arg0.getSource()==jb1){
                 PreparedStatement ps=null;
                 Connection ct=null;
                 ResultSet rs=null;
                 try {
                     //1.加载驱动
                     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                     //2.得到链接 127.0.0.1:1433
                     ct=DriverManager.getConnection
                             ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");
                 
                     String sql="insert into s values(?,?,?,?,?,?,?,?)";
                     ps=ct.prepareStatement(sql);
                     ps.setString(1, jtf1.getText());
                     ps.setString(2, jtf2.getText());
                     ps.setString(3, jtf3.getText());
                     ps.setString(4, jtf4.getText());
                     ps.setString(5, jtf5.getText());
                     ps.setString(6, jtf6.getText());
                     ps.setString(7, jtf7.getText());
                     ps.setString(8, jtf8.getText());
     
                     ps.executeUpdate();
                     this.dispose();
                 }catch(Exception e) {
                     e.printStackTrace();
                 }finally {
                     try {
                         if(rs!=null)rs.close();
                         if(ps!=null)ps.close();
                         if(ct!=null)ct.close();
                     }catch(Exception e) {
                         e.printStackTrace();
                     }
                 }
             }
         }

              以上代码大多截取自最近做的学生档案管理系统。。。也就是数据库课程设计,用swing写了一个小界面,也了解了如何通过jdbc连接访问SQLserver,在eclipse中,对数据库进行增删改查操作。项目虽小,收获还是挺大的,开森(/≧▽≦)/。   

              如有错误,欢迎批评指导!

     
  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/phdeblog/p/9147997.html
Copyright © 2020-2023  润新知