Tag: database connection

使用JDBC和编译将Microsoft Access数据库连接到Java

对于学校数据库项目,我们正在制作数据库程序(用户GUI和数据库)。 使用Microsoft Access 2010我创建了数据库并使用一些示例数据填充它,并将其保存为.mdb格式并将其放在我的项目文件夹中。 在eclipse中运行它时,以下代码工作正常,连接甚至检索查询。 但是我发现我无法将代码导出到jar并运行它(这是项目所需的,在CD或闪存驱动器上为它们提供程序的工作副本),而且我也无法移植代码到Netbeans让它工作,以及尝试在Linux机器上编译。 我认为这是包含驱动程序或尝试使用Microsoft访问的问题。 运行jar或在Netbeans上运行时得到的错误在代码下方给出。 所以我要么问我如何包含驱动程序以使程序可移植,或者我如何处理这个问题呢? 提前致谢 import java.sql.*; public class JDBCTest { static Connection connection; static Statement statement; public static void main(String args[]){ try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance(); String database = “jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb”; connection = DriverManager.getConnection( database ,””,””); buildStatement(); executeQuery(); }catch(Exception e){ e.printStackTrace(); System.out.println(“Error!”); } } public static void buildStatement() throws […]

多个线程同时使用相同的JDBC连接

我试图更好地理解如果多个线程同时使用相同的JDBC连接尝试执行不同的sql查询将会发生什么。 结果是否在function上正确? 性能影响是什么? 线程A是否必须等待线程B完全使用其查询? 或者线程A能否在线程B发送其查询后立即发送其查询,之后数据库将并行执行两个查询? 我看到Apache DBCP使用同步协议来确保从池中删除的连接从池中删除,并且在它们关闭之前不可用。 这似乎比它需要的更不方便。 我正在考虑构建自己的“池”,只需创建一个静态的打开连接列表,并以循环方式分发它们。 我不介意偶尔的性能下降,并且每次使用后不必关闭连接的便利性似乎非常吸引人。 这样做有什么不好吗?

当关闭连接池需要太多时间时,如何强制关闭连接池中的连接?

有时关闭连接需要花费大量时间,例如超过10分钟到1小时,或者更糟,即使是无限期,取决于查询的重量或速度。 在客户端因为花费太多时间而取消查询的情况下,我希望尽快释放使用的底层连接。 我尝试取消PreparedStatement,关闭它,然后关闭结果集,然后最后关闭连接。 几乎立即取消。 关闭PreparedStatement和ResultSet需要花费太多时间,我必须将它包装在Callable with timeout中,以便在适当的时候跳过该进程并继续关闭连接本身。 我还没有什么运气可以试试。 我该如何处理? 我不能简单地让连接不公开,我不能让用户等待10分钟才能进行另一个类似的查询。 是什么原因导致连接关闭需要花费太多时间? 还有什么我能做的吗? 您认为Oracle查询提示会有帮助吗? 顺便说一下,我正在通过瘦型驱动程序使用Oracle JDBC。 更新: 显然,可以通过在connectionCacheProperties中配置TimeToLive属性来强制关闭连接,该属性会在特定时间内关闭连接。 但是,我需要的是根据需要。 这值得一提,因为这certificate可以像连接池那样强制关闭它。 事实上,我甚至在我的日志上收到以下消息。 ORA-01013: user requested cancel..

使用Java读取FoxPro 2.6数据

我正在尝试使用java读取FoxPro 2.6数据库,从较旧的基于FoxPro的应用程序检索数据,以更好地格式化输出。 我尝试过使用JavaDBF和xBaseJ但没有成功。 是否有一种通用的连接方式可以让我将这些信息输入我的Java应用程序?

LISTEN / NOTIFY pgconnection关闭java?

我正在使用PostgreSQL DB并应用它的LISTEN/NOTIFYfunction。 所以我的监听器在我的AS(应用服务器)上,并且我在我的数据库上配置了触发器,这样当在表上执行CRUD操作时,在AS上发送NOTIFY请求。 java中的LISTENER类: @Singleton @Startup NotificationListenerInterface.class) public class NotificationListener extends Thread implements NotificationListenerInterface { @Resource(mappedName=”java:/RESOURCES”) private DataSource ds; @PersistenceContext(unitName = “one”) EntityManager em; Logger logger = Logger.getLogger(NotificationListener.class); private Connection Conn; private PGConnection pgConnection = null; private NotifyRequest notifyRequest = null; @PostConstruct public void notificationListener() throws Throwable { System.out.println(“Notification****************”); try { Class.forName(“com.impossibl.postgres.jdbc.PGDriver”); String url = […]

连接超时是在不活动期后

我们有一个使用hibernate作为ORM工具的api,我们使用c3p0作为连接池处理程序。 我们在负载下没有问题。 但是,当api处于非活动状态一天左右时,我们就会遇到“无法获取连接”的exception。 因此,如果周末没有人使用api,我们会在周一早上收到连接错误。 Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. 我们使用mysql作为数据库。 在我的研究中,我知道mySQL在8小时左右后连接失效。 连接池可能会向客户端发出过时的连接,从而导致客户端的连接超时exception。 目前,我们没有在C3Po中配置任何连接测试。 可以说,如果我在池中将它们提供给客户端之前使用IdleTestPeriod来测试连接。 那么如果我的所有连接在某个时间点都未通过测试会发生什么? 是否会从池中删除这些失败的连接,并再次生成新的活动连接? 目前,这是我们正在使用的c3p0设置。 这个问题可能有其他原因吗? 谢谢您的帮助

关闭数据库连接以避免内存泄漏

跟进问题到Java中的关闭数据库连接 Connection conn = DriverManager.getConnection( “jdbc:somejdbcvendor:other data needed by some jdbc vendor”, “myLogin”, “myPassword” ); Statement stmt = conn.createStatement(); try { stmt.executeUpdate( “INSERT INTO MyTable( name ) VALUES ( ‘my name’ ) ” ); } finally { //It’s important to close the statement when you are done with it stmt.close(); } conn.close(); 我知道conn.close()是必要的,但不知道为什么。 一旦方法调用结束,垃圾收集器是否会释放连接对象(并释放存储在其中的每个处理程序指向数据库)?