JDBC教程建议使用DataSource
对象来获得数据库连接,而不是使用DriverManager
类。要引用“连接数据源对象”页面,请执行以下操作:
获取数据源连接的首选方式。
如何为到Postgres的JDBC连接获取这样的对象?我有一个JDBC驱动程序。
现在,我不想像这样摆弄JNDI。
我可以在我的Java应用程序中以编程方式实例化DataSource
吗?或者我必须自己实现那个DataSource
接口?
PGSimpleDataSource类与JDBC驱动程序捆绑在jdbc.postgresql.org实现DataSource接口。在PGSimpleDataSource
对象中配置数据库连接详细信息,并作为DataSource
对象传递。
PGSimpleDataSource ds = new PGSimpleDataSource() ;
ds.setServerName( "localhost" );
ds.setDatabaseName( "your_db_name_here" );
ds.setUser( "scott" );
ds.setPassword( "tiger" );
根据需要使用该对象与数据库建立连接。使用方便的try with resources语法。
try
(
Connection conn = ds.getConnection() ;
)
{ … }
JDBC驱动程序可以为您提供DataSource
接口的实现。
此实现的对象包含建立和配置到数据库的连接所需的信息,例如:
最多可提供三种实施方式:
DriverManager
的薄包装。每次对这样一个实现的对象调用DataSource::getConnection
,都会得到一个新的数据库连接
来自jdbc的开源免费驱动程序。postgresql。org提供所有三种类型的DataSource
实现。但作者不建议在生产中实际使用它们的连接池类型;如果需要池,请使用第三方连接池库。我们忽略了XA类型。
因此,让我们看看DataSource
的简单的每次刷新连接实现:org.postgresql.ds.PGSimpleDataSource
实例化一个空对象,然后调用一系列setter方法为您的特定数据库场景进行配置。setter方法继承自org。postgresql。ds。常见的BaseDataSource
。
我们还没有升级到接口数据源
,以便调用各种setter方法。请参阅数据源和JNDI页面上的示例代码和讨论。
PGSimpleDataSource ds = new PGSimpleDataSource() ; // Empty instance.
ds.setServerName( "localhost" ); // The value `localhost` means the Postgres cluster running locally on the same machine.
ds.setDatabaseName( "testdb" ); // A connection to Postgres must be made to a specific database rather than to the server as a whole. You likely have an initial database created named `public`.
ds.setUser( "testuser" ); // Or use the super-user 'postgres' for user name if you installed Postgres with defaults and have not yet created user(s) for your application.
ds.setPassword( "password" ); // You would not really use 'password' as a password, would you?
通常我会使用这些单独的html" target="_blank">setter方法。或者,您可以构造一个字符串,一个URL,其中包含要在数据源
上一笔设置的各种信息。如果你想走那条路线,请调用setUrl
。
这涵盖了基本内容。但是你可能想要或者需要一些其他的setter。其中大多数是在服务器上设置Postgres属性值。所有属性都具有智能默认值,但您可能希望在特殊情况下覆盖。
ds.setPortNumber( 6787 ) ; // If not using the default '5432'.
ds.setApplicationName( "whatever" ) ; // Identify the application making this connection to the database. Also a clever way to back-door some information to the Postgres server, as you can encode small values into this string for later parsing.
ds.setConnectTimeout( … ) ; // The timeout value used for socket connect operations, in whole seconds. If connecting to the server takes longer than this value, the connection is broken.
ds.setSocketTimeout( … ) ; // The timeout value used for socket read operations. If reading from the server takes longer than this value, the connection is closed. This can be used as both a brute force global query timeout and a method of detecting network problems.
ds.setReadOnly( boolean ) ; // Puts this connection in read-only mode.
如果使用TLS(以前称为SSL)加密数据库连接以防止窃听或恶意操作,请为此使用几个设置程序。
对于任何没有特定setter方法的Postgres属性,您可以调用setProperty(PGProperty属性,字符串值)
。
您可以通过调用许多getter方法中的任何一种来检查或验证此数据源上的设置。
配置PGSimpleDataSource
后,您可以将其作为DataSource
对象传递到代码库的其余部分。这将使您的代码库免受更改为另一个数据源
实现或更改为另一个JDBC驱动程序的冲击。
DataSource dataSource = ds ; // Upcasting from concrete class to interface.
return dataSource ;
使用DataSource
非常简单,因为它只提供了两种方法,即getConnection
上的一对变体,用于为数据库工作获取Connection
对象。
Connection conn = dataSource.getConnection() ;
完成连接后
,最佳做法是确保将其关闭。可以使用try with resources语法自动关闭连接,也可以显式关闭连接。
conn.close() ;
请记住,数据源
实际上不是数据源。数据源
实际上是生成/访问数据库连接的源。在我看来,这是一个误称,因为我认为它是ConnectionSource
。DataSource
与您的数据库对话的时间仅足以使用用户名和密码登录。登录后,使用连接
对象与数据库交互。
一旦配置好,您希望将数据源
对象保持在缓存状态。无需重复重新配置。实现应该是线程安全的。您可以随时随地调用getConnection
。
对于一个简单的小Java应用程序,您可能希望将其存储为单例或静态全局变量中的字段。
对于基于Servlet的应用程序(如Vaadin应用程序),您将创建一个实现ServletContextListener
接口的类。在该类中,当web应用程序启动时,您将建立数据源
对象。从那里,通过传递到setAttribute
将对象存储在ServletContext
对象中<代码>上下文是“web应用”的技术术语。通过调用getAttribute
并强制转换到DataSource
进行检索。
在企业场景中,数据源
可以存储在符合JNDI的实现中。一些Servlet容器(如ApacheTomcat)可能提供JNDI实现。有些组织使用服务器,如LDAP服务器。登记
问题内容: 给定2种rgb颜色和一个矩形区域,我想在这些颜色之间生成基本的线性渐变。我已经进行了快速搜索,唯一能够找到的是此Blog条目,但示例代码似乎丢失了,或者至少是在发布此信息之时。任何帮助,算法,代码示例,等等。这将用Java编写,但是显示层已经处理完毕,我只需要弄清楚如何弄清楚要显示的内容。 问题答案: 您需要在第一和第二种颜色之间进行插值。通过为每个分量(R,G,B)计算相同的插值,可
问题内容: 我使用eclipse在最初独立于eclipse创建的应用程序上工作。因此,该应用程序的目录结构绝对不适合日食使用。 我想以编程方式为该应用程序生成一个项目。在和文件是很容易的弄清楚,我已经了解到,项目存储在工作区下 不幸的是,这里的某些文件(尤其是)似乎是以某种二进制格式编码的。直觉上,我尝试使用-没有骰子反序列化它。因此,它似乎不是序列化的Java对象。 我的问题是:有没有一种方法可
问题内容: 有没有人使用基于Java的库来生成excel文档?最好支持2003年? 问题答案: 我目前正在使用非常全面的Apache POI(http://poi.apache.org/index.html)。2003文件格式版本仍处于beta版本,但似乎运行良好。我并没有很好地利用它的功能,只是对Excel进行简单的读写,但这似乎是可靠的。
问题内容: 使用Spring Boot我可以用以下方法实例化一个: 码: 特性: 这将创建一个数据源类: 如何以编程方式设置DataSource用户名/密码? 我们有一项政策,不要以纯文本形式存储凭据,我必须在工作的地方使用特定的凭据提供程序。 问题答案: 您可以使用,如果你使用的是首发。另外,为了覆盖默认的自动配置Bean,您需要将Bean标记为 就我而言,我具有以prefix 开头的属性。 例
问题内容: 我有一个奇怪的问题。我试图以编程方式将dataSource分配给表。 我已使用界面生成器在ViewController中为其创建了一个和IBOutlet。我创建了一个实现的类。我将表的设置为dataSource的实例。一切都会编译并正常运行,直到设置dataSource的行在运行时执行。 错误是并且定义线突出显示。 有什么想法为什么我得到这个运行时错误?我正在Swift中使用XCode
代码: 属性: 这将创建一个类为的数据源