返回顶部
首页 > 资讯 > 精选 >Java使用JNDI连接数据库的实现方法是什么
  • 764
分享到

Java使用JNDI连接数据库的实现方法是什么

2023-06-22 01:06:23 764人浏览 独家记忆
摘要

本篇文章为大家展示了Java使用JNDI连接数据库的实现方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。项目背景在项目中本身使用的SQL Server 数据库,某些功能下需要访问Sybase

本篇文章为大家展示了Java使用JNDI连接数据库的实现方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

    项目背景

    在项目中本身使用的SQL Server 数据库,某些功能下需要访问Sybase数据库(都淘汰的东西 QAQ),考虑到功能较少并且我们的UAT和PROD环境使用的是WEBSphere,其本身已经存在JNDI的连接方式,因此我决定使用JNDI设置,那么就需要解决JNDI在Tomcat下的配置了,找了很多资料,说到这,不得不吐槽我们国内的博客论坛,大部分都是抄,关键是还抄不全,错漏百出,还不注明原作者。

    环境

    Eclipse:Luna
    Tomcat:apache-tomcat-9.0.8

    概念

    数据源与连接池

    数据源名称(data source name,DSN)是包含了有关某个特定数据库信息的数据结构,这个信息是开放式数据库连接驱动能够连接到数据库上必需的信息,其实本质上就使程序与数据库连接的通道。数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接的,如odbc数据源。也就是说数据源仅仅是数据库的连接名称,一个数据库可以有多个数据源连接。

    在Java语言中,DataSource对象就是一个代表数据源实体的对象。一个数据源就是一个用来存储数据的工具,它可以是复杂的大型企业级数据库,也可以是简单得只有行和列的文件。数据源可以位于在服务器端,也可以位于客服端。

    连接池:在Java程序中,当我们需要对数据库进行操作时,对于数据库的增删改查等操作的前提是需要与数据库建立连接,而对于连接的管理其实就使建立在数据源的基础上,即连接池。
    常用的数据库连接池:

    序号连接池名称依赖的jar实现的datasource类备注
    1JNDI该数据源是由相应的web服务器(例如:tomcat,weblogic,websphere)负责初始化,创建,管理。程序中不需要引入特别的jar包。Javax.sql.datasource
    2C3P0c3p0-0.9.xxx.jarcom.mchange.v2.c3p0.ComboPooledDataSource
    3DBCPcommons-dbcp.jar
    commons-pool.jar
    org.apache.commons.dbcp.BasicDataSource
    4BoneCPbonecp-0.6.5.jar
    Google-collections-1.0.jar
    slf4j-api-1.5.11.jar,slf4j-log4j12-1.5.11.jar
    log4j-1.2.15.jar
    BoneCPDataSource

    什么是JNDI

    jndi全称是java naming and directory interface。简单点就是你按命名规则给一个东西命名然后你就可以通过该名字在特定环境下直接查找到该东西了。
    JNDI是用于向Java程序提供目录和命名功能的API。可以简单地把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和惟一的名字绑定。外部程序可以通过名字来获取对某个对象的引用。在一个文件系统中,文件名被绑定给文件。在DNS中,一个IP地址绑定一个URL。在目录服务中,一个对象名被绑定给一个对象实体。

    在Intranets(企业内部网)和Internates(互联网)中目录服务(Directory service)都非常重要,它规范了命名规则,让人们容易理解实体及之间的关系。JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、windows注册表等等。

    jndi被设计成独立于特定的目录服务,所以各种各样的目录都可以通过相同的方式进行访问。这样使用jndi的java程序员不仅可以获得统一规整的命名和目录,而且可以通过多层的命名方案无缝访问(seamless acess)目录对象。

    Java使用JNDI连接数据库的实现方法是什么

    JNDI优点

    JNDI是由web服务器,实现了java.sql.datasource。由web服务器负责初始化数据源,创建connection,分配,管理connection。由于本身是由web服务器实现的功能,因此不需要在项目project中引入特别的jar包,但是需要在服务器的某些配置文件中增加相关的配置。对于我们这种连接多个数据库有很好的效果。

    JDNI在Tomcat中的配置

    Jar包

    数据库的驱动程序包:
    jconn4.jar Sybase驱动程序包
    mssql-jdbc-6.1.0.jre7.jar SQL Server 程序驱动包
    2.jsP标签Ja包
    .jstl-1.2.jar
    standard-1.1.2.jar

    测试准备

    新建测试Web项目如下:

    Java使用JNDI连接数据库的实现方法是什么

    JSP:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %><!DOCTYPE html><html>  <head>    <title>JNDI数据源测试</title>  </head>    <body>        <%            Connection connoracle = null;            try {                //1、初始化名称查找上下文                Context ctx = new InitialContext();                //InitialContext ctx = new InitialContext();亦可                 //2、通过JNDI名称找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟的是DataSource名                                DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Sybase_claims");                //3、通过DataSource取得一个连接                connOracle = ds.getConnection();                out.println("Sybase Connection pool connected !!");                //4、操作数据库            } catch (NamingException e) {                System.out.println(e.getMessage());            } catch (SQLException e) {                e.printStackTrace();            } finally {                //5、关闭数据库,关闭的时候是将连接放回到连接池之中                connOracle.close();            }        %>        <hr/>        <%            Connection connSQLServer = null;            try {                //1、初始化名称查找上下文                Context ctx = new InitialContext();                //InitialContext ctx = new InitialContext();亦可                 //2、通过JNDI名称找到DataSource,对名称进行定位java:comp/env是必须加的,后面的是DataSource名                                DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/sqlserver");                //3、通过DataSource取得一个连接                connSQLServer = ds.getConnection();                out.println("SQLServer Connection pool connected !!");                //4、操作数据库            } catch (NamingException e) {                System.out.println(e.getMessage());            } catch (SQLException e) {                e.printStackTrace();            } finally {                //5、关闭数据库,关闭的时候是将连接放回到连接池之中                connSQLServer.close();            }        %>    </body></html>

    Tomcat:

    Java使用JNDI连接数据库的实现方法是什么

    将数据库驱动Jar包放入Tomcat的lib文件夹下:

    Java使用JNDI连接数据库的实现方法是什么

    JNDI配置

    在Tomcat 配置文件server.xml(apache-tomcat-9.0.8\conf)中的GlobalNamingResources标签内定义

      <!-- Global JNDI resources       Documentation at /docs/jndi-resources-howto.html  -->  <GlobalNamingResources>    <!-- Editable user database that can also be used by         UserDatabaseRealm to authenticate users    -->    <Resource name="UserDatabase" auth="Container"              type="org.apache.catalina.UserDatabase"              description="User database that can be updated and saved"              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"              pathname="conf/tomcat-users.xml" /><!--  |- name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,           为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一个jdbc的关于oracle的命名服务。  |- auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效  |- type:此名称所代表的类型,现在为javax.sql.DataSource  |- maxActive:表示一个数据库在此服务器上所能打开的最大连接数  |- maxIdle:表示一个数据库在此服务器上维持的最小连接数  |- maxWait:最大等待时间。10000毫秒  |- username:数据库连接的用户名  |- passWord:数据库连接的密码  |- driverClassName:数据库连接的驱动程序  |- url:数据库连接的地址--><!--配置Sysbase数据库的JNDI数据源--><Resource         name="jdbc/Sybase_claims"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="test"         password="test"        driverClassName="com.sybase.jdbc4.jdbc.SybDriver"        url="jdbc:sybase:Tds:127.0.0.1:4101?ServiceName=db_claims"/><!--配置SQL Server数据库的JNDI数据源--><Resource         name="jdbc/sqlserver"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="sa"         password="p@ssw0rd"        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"        url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sonora"/>

    全局引用

    在Tomcat 的context.xml(apache-tomcat-9.0.8\conf)中引用,针对于本Tomcat服务器下所有项目使用。

    <Context>    <!-- Default set of monitored resources. If one of these changes, the    -->    <!-- web application will be reloaded.                                   -->    <WatchedResource>WEB-INF/web.xml</WatchedResource>    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>    <!-- Uncomment this to disable session persistence across Tomcat restarts -->    <!--    <Manager pathname="" />    --><ResourceLink name="jdbc/Sybase_claims" global="jdbc/Sybase_claims" type="javax.sql.DataSource"/><ResourceLink name="jdbc/Sybase_iws_ref" global="jdbc/Sybase_iws_ref" type="javax.sql.DataSource"/></Context>

    当然,我们也可以不引用局部配置的,在Context标签中直接写数据源:

    <Context>    <!-- Default set of monitored resources. If one of these changes, the    -->    <!-- web application will be reloaded.                                   -->    <WatchedResource>WEB-INF/web.xml</WatchedResource>    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>    <!-- Uncomment this to disable session persistence across Tomcat restarts -->    <!--    <Manager pathname="" />    --><!--配置Sysbase数据库的JNDI数据源--><Resource         name="jdbc/Sybase_claims"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="test"         password="test"        driverClassName="com.sybase.jdbc4.jdbc.SybDriver"        url="jdbc:sybase:Tds:127.0.0.1:4101?ServiceName=db_claims"/><!--配置SQL Server数据库的JNDI数据源--><Resource         name="jdbc/sqlserver"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="sa"         password="p@ssw0rd"        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"        url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sonora"/></Context>

    局部引用

    局部引用:即是配置的数据源,只针对于指定项目使用。
    方式一:在server.xml中的host标签内配置

      <Host name="localhost"  appBase="webapps"            unpackWARs="true" autoDeploy="true">        <!-- SingleSignOn valve, share authentication between web applications             Documentation at: /docs/config/valve.html -->        <!--        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />        -->        <!-- Access log processes all example.             Documentation at: /docs/config/valve.html             Note: The pattern used is equivalent to using pattern="common" -->        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"               prefix="localhost_access_log" suffix=".txt"               pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Context docBase="jndi_demo" path="/jndi_demo" reloadable="false"><ResourceLink name="jdbc/Sybase_claims" global="jdbc/Sybase_claims" type="javax.sql.DataSource"/><ResourceLink name="jdbc/sqlserver" global="jdbc/sqlserver" type="javax.sql.DataSource"/></Context>      </Host>

    当然也也可以直接在Context标签下直接定义

    <Host name="localhost"  appBase="webapps"            unpackWARs="true" autoDeploy="true">        <!-- SingleSignOn valve, share authentication between web applications             Documentation at: /docs/config/valve.html -->        <!--        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />        -->        <!-- Access log processes all example.             Documentation at: /docs/config/valve.html             Note: The pattern used is equivalent to using pattern="common" -->        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"               prefix="localhost_access_log" suffix=".txt"               pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Context docBase="jndi_demo" path="/jndi_demo" reloadable="false"><Resource         name="jdbc/Sybase_claims"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="test"         password="test"        driverClassName="com.sybase.jdbc4.jdbc.SybDriver"        url="jdbc:sybase:Tds:127.0.0.1:4101?ServiceName=db_claims"/><!--配置SQL Server数据库的JNDI数据源--><Resource         name="jdbc/sqlserver"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="sa"         password="p@ssw0rd"        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"        url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sonora"/></Context>      </Host>

    方式二:在Tomcat安装目录下apache-tomcat-9.0.8\conf\Catalina\localhost下新建xml文件,文件名与项目名称相同。

    <!--映射JNDITest项目的虚拟目录--><Context docBase="D:/soft-install/apache-tomcat-9.0.8/webapps/jndi_demo/WebContent" debug="0" reloadable="false">     <!--引用Sybase数据库的JNDI数据源-->    <ResourceLink name="jdbc/Sybase_claims" global="jdbc/Sybase_claims" type="javax.sql.DataSource"/>    <!--引用sqlserver数据库的JNDI数据源-->    <ResourceLink name="jdbc/sqlserver" global="jdbc/sqlserver" type="javax.sql.DataSource"/></Context>

    方式三:
    在Tomcat下项目目录的META-INF中新建Context.xml 配置JNDI引用,例如:、apache-tomcat-9.0.8\webapps\jndi_demo\META-INF、。

    <Context reloadable="false"><ResourceLink name="jdbc/Sybase_claims" global="jdbc/Sybase_claims" type="javax.sql.DataSource"/><ResourceLink name="jdbc/sqlserver" global="jdbc/Sybase_iws_ref" type="javax.sql.DataSource"/></Context>

    <?xml version="1.0" encoding="UTF-8"?><Context   path="" reloadable="false"><Resource         name="jdbc/Sybase_claims"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="test"         password="test"        driverClassName="com.sybase.jdbc4.jdbc.SybDriver"        url="jdbc:sybase:Tds:127.0.0.1:4101?ServiceName=db_claims"/><!--配置SQL Server数据库的JNDI数据源--><Resource         name="jdbc/sqlserver"        auth="Container"         type="javax.sql.DataSource"        maxActive="100"         maxIdle="30"         maxWait="10000"        username="sa"         password="p@ssw0rd"        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"        url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sonora"/></Context>

    这样做的好处就是可以脱离Tomcat配置的更改。

    注意

    看了很多文章,有些是在项目web.xml中配置如下内容,经过的验证Tomcat中是可有可无的,不过有些文章说最好加上,以便于项目移植,因为有些服务器是需要的。

    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"     xmlns="Http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <!--   JNDI配置的资源引用:  • res-ref-name:表示引用资源的名称  • res-type:此资源对应的类型为javax.sql.DataSource  • res-auth:容器授权管理   -->   <!--Sybase数据库JNDI数据源引用 -->  <resource-ref>      <description>Sybase DB Connection</description>      <res-ref-name>jdbc/Sybase_claims</res-ref-name>      <res-type>javax.sql.DataSource</res-type>      <res-auth>Container</res-auth> </resource-ref>    <!--SQLServer数据库JNDI数据源引用 -->  <resource-ref>      <description>SQLServer DB Connection</description>      <res-ref-name>jdbc/sqlserver</res-ref-name>      <res-type>javax.sql.DataSource</res-type>      <res-auth>Container</res-auth>  </resource-ref>  </web-app>

    JNDI配置我们可以发现,第三种方式完全脱离Tomcat的配置,对于server的影响较小。不过我比较推荐全局配置,各处引用,方便切换。

    Tomcat的配置修改后,最好重启Tomcat以便生效,对于server.xml修改必须重启生效,而context.xml配置保存后tomcat会自动加载无需重启

    JNDI数据源获取写法有一下两种,前者是针对于Tomcat中的,而后者是针对于IBM WebSphere。

    A: java:comp/env/jdbc/Sybase_claims
    B: jdbc/Sybase_claims

    针对于A:
    java:comp/env 是环境命名上下文(environment naming context(ENC)),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题,也是为了提高EJB或者J2EE应用的移植性。
    在J2EE中的引用常用的有:
    JDBC 数据源引用在java:comp/env/jdbc 子上下文中声明
    JMS 连接工厂在java:comp/env/jms 子上下文中声明
    JavaMail 连接工厂在java:comp/env/mail 子上下文中声明
    URL 连接工厂在 java:comp/env/url子上下文中声明

    上述内容就是Java使用JNDI连接数据库的实现方法是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

    --结束END--

    本文标题: Java使用JNDI连接数据库的实现方法是什么

    本文链接: https://lsjlt.com/news/301779.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Java使用JNDI连接数据库的实现方法是什么
      本篇文章为大家展示了Java使用JNDI连接数据库的实现方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。项目背景在项目中本身使用的SQL Server 数据库,某些功能下需要访问Sybase...
      99+
      2023-06-22
    • Java使用JNDI连接数据库的实现方法
      目录项目背景环境概念数据源与连接池什么是JNDIJNDI优点JDNI在Tomcat中的配置Jar包测试准备JNDI配置全局引用局部引用参考资料项目背景 在项目中本身使用的SQL Se...
      99+
      2024-04-02
    • jndi连接数据库的步骤是什么
      JNDI(Java Naming and Directory Interface)连接数据库的步骤如下:1. 配置JNDI环境:在J...
      99+
      2023-09-07
      jndi 数据库
    • java连接oracle数据库的方法是什么
      Java连接Oracle数据库有多种方法,以下是其中的一种常用方法:1. 导入Oracle JDBC驱动程序:首先需要下载并导入Or...
      99+
      2023-08-09
      java oracle
    • Java连接PostgreSql数据库及基本使用方法是什么
      这篇文章主要介绍“Java连接PostgreSql数据库及基本使用方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java连接PostgreSql数据库及基本使用方法是什么”文章能帮助大家解...
      99+
      2023-07-05
    • Java中JNDI注入的实现方法是什么
      这篇文章主要讲解了“Java中JNDI注入的实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中JNDI注入的实现方法是什么”吧!About JNDI0x01 简...
      99+
      2023-06-25
    • android连接数据库的方法是什么
      Android连接数据库的方法有多种,最常用的方法是使用SQLite数据库。下面是使用SQLite数据库连接的步骤:1. 创建一个继...
      99+
      2023-08-28
      android 数据库
    • mysql连接数据库的方法是什么
      在MySQL中,连接到数据库的方法通常是使用mysql命令行工具或者通过编程语言中的相应库来连接数据库。 在命令行中使用mysql命...
      99+
      2024-03-05
      mysql 数据库
    • dbeaver连接数据库的方法是什么
      使用DBeaver连接数据库的方法如下: 打开DBeaver应用程序。 点击菜单栏中的“数据库”选项,然后选择“新连接”。 ...
      99+
      2024-03-14
      dbeaver 数据库
    • oracle数据库连接的方法是什么
      要连接Oracle数据库,可以使用以下方法之一: 使用Oracle提供的官方JDBC驱动程序来连接数据库。首先需要下载并安装Or...
      99+
      2024-04-02
    • sqlserver连接数据库的方法是什么
      在SQL Server中连接数据库可以使用以下几种方法: 使用SQL Server Management Studio (SSM...
      99+
      2024-04-09
      sqlserver 数据库
    • odbc连接数据库的方法是什么
      在使用ODBC(Open Database Connectivity)连接数据库时,一般需要按照以下步骤进行操作: 安装ODBC...
      99+
      2024-04-02
    • oracle连接数据库的方法是什么
      Oracle连接数据库的方法通常是使用Oracle提供的客户端工具,比如SQL*Plus或SQL Developer。在这些工具中,...
      99+
      2024-04-09
      oracle 数据库
    • Sqlsugar连接数据库的方法是什么
      SqlSugar连接数据库的方法通常是通过创建一个SqlSugarClient对象,并指定连接字符串,然后调用该对象的方法来操作数据...
      99+
      2024-04-09
      Sqlsugar 数据库
    • ADO.NET连接数据库方法是什么
      这篇文章主要讲解了“ADO.NET连接数据库方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO.NET连接数据库方法是什么”吧!ADO.NET连接数据库的内容包括:连接到数据库、...
      99+
      2023-06-17
    • Java使用JDBC连接数据库的步骤是什么
      Java使用JDBC连接数据库的步骤是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、JDBC是什么?JDBC 指 Java 数据库连接(Java Database ...
      99+
      2023-06-22
    • jsp连接sql数据库的方法是什么
      jsp连接sql数据库的方法是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧! JSP全名为Java Serv...
      99+
      2024-04-02
    • asp连接mysql数据库的方法是什么
      在ASP中连接MySQL数据库有多种方法,以下是常见的两种方法:1. 使用ADODB连接对象(ActiveX Data Object...
      99+
      2023-10-08
      asp mysql数据库
    • JSP连接MySql数据库的方法是什么
      这篇“JSP连接MySql数据库的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JSP连接MySql数据库的方法是...
      99+
      2023-06-27
    • asp.net web连接数据库的方法是什么
      在ASP.NET中连接数据库的方法有多种,其中常用的是使用ADO.NET库来进行数据库连接和操作。以下是连接数据库的一般步骤:1. ...
      99+
      2023-09-08
      asp.net 数据库
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作