Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java对象=方法?例子包括_Java_Jdbc_Interface - Fatal编程技术网

Java对象=方法?例子包括

Java对象=方法?例子包括,java,jdbc,interface,Java,Jdbc,Interface,今天我遇到了一些新的事情,我似乎无法控制自己。请记住,下面的问题适用于Java—主要是Java JDBC 我有以下代码: Connection con = DriverManager.getConnection(Url, "username", "password"); 这是: Statement myStmt = con.createStatement(); ResultSet myRs = myStmt.executeQuery("select * from employees"); 这

今天我遇到了一些新的事情,我似乎无法控制自己。请记住,下面的问题适用于Java—主要是Java JDBC

我有以下代码:

Connection con = DriverManager.getConnection(Url, "username", "password");
这是:

Statement myStmt = con.createStatement();
ResultSet myRs = myStmt.executeQuery("select * from employees");

这里到底发生了什么?我推测该方法返回一个对象,比如一个新的连接对象

另外,连接不是一个接口吗?那么它将如何创建一个新对象呢?

Java方法具有“返回类型”,因此您可以调用一个返回对象的方法。在这两种情况下

 Statement myStmt = con.createStatement();
    ResultSet myRs = myStmt.executeQuery("select * from employees");
这些方法是返回对象,一个是语句,另一个是执行语句(ResultSet)得到的结果数据


希望对您有所帮助,我假设您是OOP新手,这是您将使用和实现的常见模式。

Connection con=DriverManager.getConnection(Url,“用户名”,“密码”)

1) 是的,类“DriverManager”有一个返回“Connection”对象的静态方法

2) 是的,“连接”是一个接口。getConnection()返回的对象是实现该接口的类的实例

以下是DriverManager、Connection和Driver的文档:

需要注意的关键是,您希望在运行时动态加载正确的驱动程序。您可能有Oracle驱动程序、MSSQL驱动程序或mySQL驱动程序。这对几乎所有JDBC代码都是透明的,除了1)加载驱动程序和2)设置特定连接字符串的部分


“希望有帮助

接口中的描述了可用于特定对象的方法签名。你在这行干什么

Connection con = DriverManager.getConnection(Url, "username", "password");
是指将使用
getConnection
工厂方法创建的实例分配给一个引用
con
,该引用可以保存符合
Connection
接口的实例

不能直接实例化接口,因为接口没有指定实现。但是,您可以将对实现接口的对象的引用视为对其他对象的引用。如果严格遵守接口中定义的方法,则可以在编译时或运行时将一个对象与另一个对象交换,只要它们实现接口即可


工厂方法,如
getConnection()
是用于实例化对象的静态方法。也可以使用构造函数创建对象,但工厂方法更灵活,甚至可以在任何类中定义(例如示例中的
DriverManager
).

这里是的,您正在获取对象,当涉及到连接时,它是一个接口,您可以通过调用DriverManager.getConnection(Url,“用户名”,“密码”)来获取连接接口中方法的实现

基本上这是接口的另一种用法,实现是隐藏的。您只需知道此接口中有一个同名方法,您就可以使用它。

代码:

Connection con = DriverManager.getConnection(Url, "username", "password");
这是一个很好的例子。管理器根据传入的URL创建适当的具体连接

Connection
本身是所有具体连接类实现的接口()。MySQL、Postgres、Oracle等等。。。它们都是连接类。DriverManager选择其中正确的一个并创建它

司机经理怎么知道的?当类加载器加载驱动程序时,驱动程序类将与驱动程序一起加载。当驱动程序询问“谁响应此URL”时,它会调用每个驱动程序中的方法,而响应的驱动程序在调用时会返回一个连接

一旦您从
驱动程序
获得了
连接
对象(该对象知道如何与驱动程序使用的数据库进行对话),它就能够创建一条语句或对该数据库执行一个查询,返回一个结果集

具体细节由驾驶员来实施。您只需要以这种方式使用接口即可。从您的角度来看,所有结果集、语句和连接(以及驱动程序)的工作方式都是相同的,尽管它们在幕后连接到光标和数据库的方式可能不同。但这并不重要。你有一个界面,它们都以同样的方式工作

这些都是工厂模式的实例。可能是关于这件事的有用读物。还描述了其他模式。你可能也会发现它很有用(它有一个经典的“比萨饼”的例子)


由于这些是模式(我特意用大写字母“p”写下),您会发现这些解决方案在整个程序中以类似的方式反复使用。一旦您认识到您正在处理一个工厂,您就可能能够更有效地处理它。

“我想该方法会返回一个对象,例如一个新的连接对象?”-您已经发布了三个不同方法调用的代码;你是说第一个吗?那么你的问题中的另外两个的相关性是什么呢?还有:“连接不是一个接口吗?那么它将如何创建一个新对象?”-连接是一个接口是的,但连接不会创建任何对象。该对象来自
DriverManager.getConnection(…)
方法(在DriverManager类中)。很抱歉,我不想澄清这些。我想知道这三个问题,因为他们似乎使用不同的类来分配对象?“对不起,我应该澄清一下这些”-好的,现在就这样做,编辑你的问题。顺便说一句。。。欢迎使用堆栈溢出“类“驱动程序”有一个静态方法”-该类名为
DriverManager
而不是
Driver